背景

本月初美国著名安全公司kryptowire在其网站上发布了一篇Blog,他们的安全工程师在某智能终端的某个应用上发现了一个高危漏洞。

通过该漏洞,终端上安装的恶意应用可以成功提权到system权限,实现启动任意Activity(LaunchAnywhere),进而执行本地拨打电话到任意号码,恢复出厂设置,安装和卸载应用和安装证书等功能。

本文对该漏洞进行了深入分析和复现,确认该漏洞模型为Intent重定向,同时快速排查了我司的相关应用,排除了存在相同漏洞。由于该漏洞模型比较典型,不管是在Google AOSP代码还是各大厂开发的应用中每年都会发现类似的漏洞,这种漏洞往往危害性极大。

文中涉及的漏洞均已修复完成。

原理介绍

Intent重定向,即应用从不可信Intent 中提取数据,取出其中包含的Intent,或对提取的数据进行封装生成新的Intent,再调用 startActivity、startActivityForResult、startService、sendBroadcast等方法来启动或传递该Intent。

由于Android的Intent类实现了Parcelable,

因此可以将Intent类的对象作为Intent的 extra数据对象传递到另一个组件中。

攻击者原本是无法直接访问非导出的组件,但是通过Intent重定向,就可以用导出的组件作为跳板来访问非导出的组件,达到launchanywhere或者broadcastanywhere的目的。

Intent重定向违反了Android的安全设计,导致Android的安全访问限制(应用的沙箱机制)失效,造成以下安全问题:

1)普通应用和系统应用中的Intent重定向:

如果是普通应用,可以启动该应用中的任意组件包括非导出组件;

图1 普通应用中的Intent重定向原理

如果是system应用中存在这种漏洞,危害更大,可以启动手机中的任意组件(包括导出和非导出组件);

【一一帮助安全学习,所有资源获取一一】
①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥信息收集80条搜索语法
⑦100个漏洞实战案例

图2 系统应用中的Intent重定向原理

2)通过非导出的contentprovider组件中的content://URI来窃取敏感文件。
3)通过IntentScheme URL漏洞模型访问任意组件。
4)通过PendingIntent越权漏洞模型,劫持和修改Intent来达到提权的目的。

详细分析

接下来详细介绍普通应用和报告中的系统应用中的存在的两个Intent重定向的例子。

• 普通应用中Intent重定向漏洞分析

某应用中存在一个导出的HomeActivity组件,该组件中存在Intent重定向漏洞,请参考代码中的注释。

在该应用中还存在一个非导出组件WebViewActivity,终端上安装的恶意应用无法直接访问。

该组件WebViewActivity中有以下代码,使用webview来加载URL。

攻击者可以通过导出的HomeActivity访问该应用中的任意未导出的Activity,显然WebViewActivity也在其中。

我们编写一个恶意应用嵌入一个指向未导出组件的Intent并发给HomeActivity,从而让WebViewActivity加载其传入的恶意网站链接,进而达成窃取应用token等目的。

报告中的系统应用中的Intent重定向漏洞分析

接下来,分析一下报告中的Intent重定向漏洞。该应用的AndroidManifest.xml配置文件中有android:sharedUserId=“android.uid.system”,使用的系统签名且安装在priv-app目录中,因此该应用为system应用,具有system权限。该应用的testUsaWpsManager类中,动态注册了一个广播,action为USER_SELECT_WIFI_SERVICE_CALL:

因此该receiver即为导出的,其onReceive方法可以接收从外部传入的Intent。然后在没有任何校验的情况下,获取Intent中的extra_call_intent,构造一个新的Intent,然后作为参数传入setCallIntent方法中。

setCallIntent为该Intent添加FLAG_ACTIVITY_NEW_TASK,然后将Intent作为mtestTelecomManagerAdapter的makeCall方法的第二个参数。

makeCall方法最终会调用到startActivityAsUser方法,作为该方法的第一个参数. 而第二个参数为 UserHandle.CURRENT。

该漏洞中的Intent的流转如下图所示:

图3 Intent流转过程

在终端上安装和运行的零权限的恶意应用,可以实现在本地通过上述Intent重定向漏洞,在用户无感知情况下以system权限实现拉起任意终端上任意Activity,实现如拨打电话到任意号码,恢复出厂设置,安装和卸载应用,安装证书等高危操作,几乎完全控制了用户的终端。

• Intent 重定向漏洞的修复方法

方法 1:将被拉起的应用组件设为专用组件,即不对外暴露。如果被拉起的应用组件不需要接收来自其他应用的 Intent,则可以将此应用组件设为专用组件,只需在清单中设置android:exported=“false” 即可。

方法 2:确保提取的 Intent 来自可信的来源。可以使用getCallingActivity等方法来验证源Activity是否可信,只适用startActivityForResult。

方法 3:确保要重定向的Intent 安全。应该验证重定向的Intent,确保该 Intent不会被发送到应用的任何专用组件,以及不会将 URI 权限授予应用的某个专用contentprovider。在重定向 Intent 之前,应用可以先使用 resolveActivity等方法检查将使用哪个组件来处理该 Intent。

应用可使用 getFlags 等方法来检查 Intent 是否会授予 URI 权限。例如:

总结

攻击者结合了系统应用中的动态广播注册漏洞模型和Intent重定向漏洞模型,对终端造成了极大的威胁。Android应用漏洞利用的常态,是攻击者会结合若干漏洞,形成一个完整的攻击链,造成更大的危害。要防范Android终端中应用的漏洞,对安全从业人员和开发者提出了更高的要求,需要熟悉常见的漏洞模型和防范措施。

网络安全漏洞分析之重定向漏洞分析相关推荐

  1. 开源 CMS Drupal 修复 XSS 和开放重定向漏洞

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 开源 CMS Drupal 的更新修复了跨站脚本 (XSS) 漏洞和开放重定向漏洞,不过这些它们仅被评为"中危"级 ...

  2. 【安全漏洞】CVE-2021-1732 win32k漏洞分析

    漏洞描述 内核模块win32kfull.sys的win32kfull!xxxClientAllocWindowClassExtraBytes函数中存在Type Confusion漏洞,利用此漏洞进行越 ...

  3. 【安全漏洞】Resin解析漏洞分析

    前言 前阵子看有师傅在公众号上发表了Resin解析漏洞分析,我们也知道有个常用的OA用的就是Resin,因此我认为了解它的漏洞是十分必要的. [学习资料] 原理分析 这个漏洞和IIS解析漏洞比较像,可 ...

  4. web安全从基础术语、windows/linux基础到安全漏洞/病毒木马挖掘与分析利用(持续更新)

    web安全知识从基础术语.windows/linux基础到安全漏洞/病毒木马挖掘与分析利用(持续更新) 专业术语 web环境搭建 windows基础 linux基础 linux系统命令 linux命令 ...

  5. rmi反序列化导致rce漏洞修复_RMI反序列化漏洞分析

    原创:Xman21合天智汇 一.RMI简介 首先看一下RMI在wikipedia上的描述: Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Ja ...

  6. DVWA平台漏洞测试与源码分析(一)SQL注入

    DVWA平台是初学网络安全者了解十大漏洞的有效途径,此平台收集了当前威胁网络安全的最常见的十大漏洞,并且为各位初学者提供了靶场实验环境,我们可以利用此平台进行各种攻击实验,从而丰富自己对于Web安全的 ...

  7. 易想团购 注入 user.php,易想团购系统通杀SQL注入漏洞分析及利用漏洞预警 -电脑资料...

    刚打开红黑看到J8基友写的一个{易想团购系统 最新版 通杀}的文章,看他贴的代码里面有个get_client_ip()函数,哈哈,我猜没过滤,果断下了一套程序, 找到get_client_ip()函数 ...

  8. cve-2019-7609 Kibana远程代码执行漏洞攻击方法和漏洞原理分析

    目录 0x00 前言 0x01 漏洞简介 0x02 环境搭建 0x03 漏洞利用 0x04 漏洞机理 1.POC验证 ​2.漏洞产生原理和攻击思路 3.payload构建 0x05 危害分析和处理建议 ...

  9. common-collections中Java反序列化漏洞导致的RCE原理分析

    2019独角兽企业重金招聘Python工程师标准>>> common-collections中Java反序列化漏洞导致的RCE原理分析 隐形人真忙 · 2015/11/11 22:4 ...

最新文章

  1. Java中ArrayList源码分析
  2. 记录Hbase bug——org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
  3. python与材料计算快速入门线上训练营_Python18天训练营第二课基础1
  4. html三张图片的轮播代码_vue写了个轮播图
  5. 学计算机的想当警察去一线,想当警察但又怕收入不高,我到底该选择梦想还是现实?...
  6. 我在工作中是这样使用Maven
  7. Oracle10g安装了11g的ODAC后,PL/SQL连接提示TNS:无法解析指定的连接标识符
  8. 百度远场语音识别套件-开箱评测
  9. C++ string用法
  10. 如何优雅地计算多变量
  11. 深度学习实现minst手写数字识别
  12. html5妇女节游戏,2018三八妇女节趣味游戏大全
  13. 全市场等权中位数_市场指数估值周报20200412
  14. 经济学论文素材之汇率波动的外汇风险
  15. linux shell 中各种符号的含义
  16. KindEditor 360浏览器系列无法显示
  17. 西门子PLC与Unity3D通讯丨串口通讯
  18. 思维导图 以及 日历规划软件
  19. IOS屏幕适配(四)最新系统IOS13适配
  20. 关于Scrum+XP+DevOps的学习

热门文章

  1. 各种资源--可免费下载数据的网站(感觉可以的话来波点赞关注哟)
  2. vue项目 登陆逻辑 和 页面加载逻辑
  3. laravel 网银支付
  4. session_start(): open(/tmp/sess_1e6e96186c98e4dbb1947e63e20c340f, O_RDWR) failed: Permission denied
  5. Xshell下载激活使用心得
  6. RPATH $ORIGIN 你的库为什么找不到
  7. java图片小猫,LAVApi.java
  8. 科普!GB 和 GiB 有何区别 112G 可用收 128G 的钱合理吗
  9. #region和#endregion的作用
  10. selenium IDE命令全手册/Selenium reference中文版