Android APP Broadcast Receiver组件常见漏洞

admin 2023年8月21日14:48:27评论76 views字数 2575阅读8分35秒阅读模式

目录

  • 发现导出的Broadcast Receivers
  • 风险分析点-发送广播时
    • 普通广播导致的风险
    • 有序广播导致的风险
    • 代码示例
    • 发送广播是如何实现的
    • 敏感信息泄露
  • 风险分析点-接收广播时
    • 越权
    • 本地拒绝服务

BroadcastReceiver是四大组件之一,这个组件涉及:广播发送者和广播接收者,这里的广播实际上指的是「intent」当发送一个广播时,系统会将发送的广播(intent)与系统中所有注册的符合条件的IntentFilter进行匹配,匹配成功,则「执行相应的onReceive函数」

广播机制分为两个方面:广播发送者和广播接收者,一般来说,BroadcastReceiver就是广播接收者。

发现导出的Broadcast Receivers

当满足以下条件之一的时候,Broadcast receiver 组件将是导出状态,可以被其他 APP 调用:

  • 显式设置了 android:exported="true" (当 SDK 小于等于16的时候,默认为 true)
  • 设置了 <intent-filter> 的 action 标签,且未设置 android:exported="false"

也可使用drozer去扫描APP的导出组件有哪些。

Android APP Broadcast Receiver组件常见漏洞

Android APP Broadcast Receiver组件常见漏洞

风险分析点-发送广播时

发送广播时,如果处理不当,恶意应用便可以嗅探,拦截广播,致使敏感数据泄露;发送的intent没有明确指定接收者,而是简单的通过action进行匹配,恶意应用便可以注册一个广播接收者嗅探拦截到这个广播,如果这个广播存在敏感数据,就被恶意应用窃取了。

「发送广播是如何实现的」

  1. 使用Context.sendBroadcast(Intent)发送一个普通的广播。
  2. 使用Context.sendOrderedBroadcast发送一个有序的广播,这允许接收者按照优先级顺序接收广播,并且每个接收者都可以传递数据给下一个接收者。

代码示例

「发送一个普通广播」:app a

开发者自身定义intent的广播(最常用),发送广播使用如下:

Intent intent = new Intent();
intent.setAction("com.example.MY_CUSTOM_ACTION");
sendBroadcast(intent);

「接收广播:」 app b

首先,在AndroidManifest.xml中声明BroadcastReceiver

若被注册了的广播接收者中的intentFilter的action与上述匹配,则会接收此广播(即进行回调onReceive()),如下.MyReceiver则会接收上述广播

<receiver android:name=".MyReceiver">
    <intent-filter>
        <action android:name="com.example.MY_CUSTOM_ACTION" />
    </intent-filter>
</receiver>

如果发送的广播有对应权限,那么广播接收者也需要对应权限

「发送一个有序广播」

有序广播的使用过程与普通广播非常类似,差异仅在于广播的发送方式

sendOrderedBroadcast(intent,null); //参数1:接收的Intent 参数2:与权限相关字符串,一般为null

发送出去的广播被广播接收者按照先后顺序接收 有序是针对广播接收者而言的。广播接收者接收广播的顺序规则(同时面向静态和动态注册的广播接收者):(1)按照Priority属性值从大-小排序

(2)Priority属性相同者,动态注册的广播优先

Android APP Broadcast Receiver组件常见漏洞

  • 接收广播按顺序接收
  • 先接收的广播接收者可以对广播进行截断,即后接收的广播接收者不在接收此广播,可以使用abortBroadcast()方法
  • 先接收的广播接收者可以对广播进行修改,那么后接收的广播接收者将接收到被修改后的广播

敏感信息泄露

普通广播导致的风险

Android APP Broadcast Receiver组件常见漏洞

有序广播导致的风险

Android APP Broadcast Receiver组件常见漏洞

Android APP Broadcast Receiver组件常见漏洞

Android APP Broadcast Receiver组件常见漏洞

Android APP Broadcast Receiver组件常见漏洞

风险分析点-接收广播时

接收广播时处理不当,便会导致拒绝服务攻击、伪造消息、越权操作等。

越权

 adb forward tcp:31415 tcp:31415
 drozer console connect
run app.broadcast.send --action theBroadcast --extra string phonenumber 18888888888 --extra string newpass "you nei gui,zhong zhi jiao yi"

本地拒绝服务

如果敏感的BroadcastReceiver没有设置相应的权限保护,很容易受到攻击。最常见的是拒绝服务攻击。拒绝服务攻击指的是,传递恶意畸形的intent数据给广播接收器,广播接收器无法处理异常导致crash。拒绝服务攻击的危害视具体业务场景而定,比如一个安全防护产品的拒绝服务、锁屏应用的拒绝服务、支付进程的拒绝服务等危害就是巨大的。

run app.broadcast.info  -a org.owasp.goatdroid.fourgoats

run app.broadcast.send --action 广播名 --extra string name lisi


#发送空数据导致本地拒绝服务
run app.broadcast.send --action <action>

Android APP Broadcast Receiver组件常见漏洞


参考:

https://mp.weixin.qq.com/s/xwlMdFd5lygrjnDqMqi8wA

[原创]Android APP漏洞之战(3)——Broadcast Recevier漏洞详解-Android安全-看雪-安全社区|安全招聘|kanxue.com

https://oldbam.github.io/android/security/android-vulnerabilities-insecurebank-broadcast-receivers

https://redfoxsec.com/blog/exploiting-broadcast-receivers

https://appsec-labs.com/portal/hacking-android-apps-through-exposed-components


原文始发于微信公众号(闻鸡习武):Android APP Broadcast Receiver组件常见漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年8月21日14:48:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Android APP Broadcast Receiver组件常见漏洞https://cn-sec.com/archives/1966388.html

发表评论

匿名网友 填写信息