安卓导出组件activity拒绝服务漏洞(Drozer调试)

  • App在AndroidManifest.xml文件中设置了Activity为导出,导致该组件可以被第三方程序调用,并可以通过Intent接受参数传入。如果这些组件在从Intent获取参数的时候没有对其合法性进行校验,且代码没有使用异常处理,则会导致App抛出异常无法被捕获,进而导致App崩溃。第三方恶意程序可以通过在后台不断发送能够使App崩溃的Intent,使得程序无法正常运行

漏洞危害

  • 第三方恶意程序可以通过在后台不断发送能够使App崩溃的Intent,使得程序无法正常运行

检测方法

1.参考Drozer官方文档对PC、测试手机进行配置;

2.PC连接模拟器

  • adb connect 127.0.0.1:7555

3.模拟器中运行Drozer

安卓导出组件activity拒绝服务漏洞(Drozer调试)
4.配置端口转发

  • adb forward tcp:31415 tcp:31415

5.启动Drozer控制台

  • drozer console connect

安卓导出组件activity拒绝服务漏洞(Drozer调试)
6.获得当前应用导出的Activity

  • run app.activity.info --package com.ccssoft.ywt

安卓导出组件activity拒绝服务漏洞(Drozer调试)
7.对搜索到的Activity逐个执行以下命令,尝试启动Activity

  • run app.activity.start --component com.ccssoft.ywt (包名) com.ccssoft.module.outside.SSOLoginActivity (函数名)

安卓导出组件activity拒绝服务漏洞(Drozer调试)
发现程序已经奔溃,说明存在activity拒绝服务漏洞

修复建议

  • 根据业务需要,对非必要导出的组件加入android:exported="false"属性,阻止其他程序访问
  • 对于必须导出的组件,严格检查传入参数(Intent)的处理代码
  • 如果该组件只需要在自己开发的应用之间调用、共享数据,最好将android:protectionLevel属性设置为"signature"保护级别。签名权限不需要用户确认,因此,这种方式不仅能提升用户体验,而且在相关应用使用相同的**进行签名来访问数据时,还能更好地控制对内容提供程序数据的访问