PendingIntent重定向:一种针对安卓系统和流行App的通用提权方法——BlackHat EU 2021议题详解(上)

本文深入探讨了PendingIntent在Android系统中的安全风险,揭示了PendingIntent如何被恶意App利用进行权限提升。通过历史研究与案例分析,阐述了PendingIntent在SliceProvider、通知、MediaBrowserService和AppWidgets等场景的潜在风险,以及获取和利用这些PendingIntent的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 简介

1.1 Intent

安卓系统中,Intent是在组件间传递的通信消息,用于执行打开Activity、发送广播、启动服务等动作,而Intent对象内部的字段则规定了Intent发送的目的组件,以及执行动作的具体内容,包括action、category、data、clipdata、package、flag、extra、component和selector。

其中component和selector用于设置Intent的目的组件,规定Intent发送给谁。按照是否设置component和selector,Intent可划分为:

• 显式Intent:具有component或者selector的Intent

• 隐式Intent:仅设置了action的Intent,注册对应action的Intent-filter的组件可以接收到Intent。

另外,还有一种特殊的空Intent new Intent(),既没有设置component,也没有设置action,甚至没有设置任何字段。

1.2 PendingIntent

PendingIntent可以看作Intent的高级版本,实现了一种委托授权发送Intent进行组件间通信的机制。
首先,App可以使用getActivity、getBroadcast、getService等API向Android系统申请一个PendingIntent对象,例如在函数getActivity :

在这里插入图片描述
中,intent参数构成了所⽣成PendingIntent对象的base Intent,⽽在此特定的getActivity函数中,该base Intent应该⽤于打开Activity,否则⽆意义。后⾯的flags参数决定了PendingIntent的⾏为,例如FLAG_IMMUTABLE就⽤于规定base Intent不能被改写。

接下来,这个PendingIntent对象可以发送给其他App使用,其他App调用PendingIntent.send时,就能够以PendingIntent源App的身份和权限发送PendingIntent中的base Intent。其他App甚至还可以提供一个新的Intent,对base Intent进行改写。

在这里插入图片描述
图:PendingIntent面临的安全风险

因此, App A将PendingIntent交给App B,就意味着将自己的身份与权限连同要做的事情委托给了App B, 这个事情由PendingIntent中的base Intent指定。

如果恶意App有能力获取上述通信过程中的PendingIntent,就可能以源App的身份和权限发送修改后的base Intent,造成非预期的安全后果,这就是PendingIntent面临的安全风险。

2 历史研究

以往的研究涉及的实际漏洞案例不多,一个著名的例子是Android系统AccountMa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值