PendingIntent重定向:一种针对安卓系统和流行App的通用提权方法——BlackHat EU 2021议题详解 (下)_getrunningservicecontrolpanel-程序员宅基地

技术标签: 安全  android  

在这里插入图片描述
以用户隐私安全为中心,用责任兑付信任,OPPO成立子午互联网安全实验室(ZIWU Cyber Security Lab)。实验室以“保护用户的安全与隐私,为品牌注入安全基因”为使命,持续关注并发力于业务安全、红蓝对抗、IoT安全、Android安全、数据和隐私保护等领域。

本篇文章源自OPPO子午互联网安全实验室。

1 不安全PendingIntent的通用利用方法

1.1 不安全PendingIntent的特征

至此,我们已经解决了本议题的第一个问题,经过研究表明,Android系统中使用的PendingIntent大都 可以被三方App获取。

获取方式包括bind SliceProvider、监听通知、连接媒体浏览器服务或者bind容纳 窗口小部件的AppWidgetsProvider。

于是,引入议题研究的第二个关键问题:如果这些PendigIntent不安全,如何利用才能造成安全危害?

首先,我们需要辨别什么样的PendingIntent是不安全的。前面描述的公开漏洞案例,均为劫持base Intent为空Intent的广播PendingIntent,说明如下empty base Intent构建的PendingIntent确定存在安全问题。

在这里插入图片描述

Android 12之前的开发者文档也对base Intent为隐式Intent的PendingIntent提出了安全警告,但却没 有明确告知到底存在何种危害。而且在AOSP代码和流行App当中,如下的代码模式广泛存在。这不禁让 我们思索, Implicit base Intent构建的PendingIntent是否真正存在问题?唯有找到一种确定的针对这 种PendingIntent的漏洞利用方法,才能真正证明安全问题的存在。

在这里插入图片描述

1.2 深入Intent fillIn改写机制

寻找利用方法之前,需要深入探索PendingIntent的改写机制,这决定了其他App获得PendingIntent以 后,如何对base Intent进行改写。这个机制由 Intent.fillIn 函数提供:

在这里插入图片描述在这里插入图片描述

在上述代码中,this对象指向当前Intent,other为其他Intent。如果当前Intent中的成员变量为空,则可 以被other中相应的成员变量覆盖。比较特殊的是Intent中的component和selector成员,即使当前Intent中的component和selector为空,也不能被other所改写,除非PendingIntent
设置了FILL_IN_COMPONENT
或者FILL_IN_SELECTOR标志。

1.3 PendingIntent重定向攻击

因此在获取PendingIntent之后,其base Intent的action、category、data、clidpdata、package、flag、extra等成员都是有可能改写的,而component和selector无法改写,如图所示。特别地,对于base Intent为隐式Intent的这种情况,action已经被设置了,因此也无法被改写,攻击者无法如前面安 卓系统broadcastAnyWhere漏洞那样,通过劫持PendingIntent、在base Intent中重新添加action,隐式打开一个受保护的组件。

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_59152315/article/details/123503289

智能推荐

手把手教你写openwrt的makefile_makefile for openwrt-程序员宅基地

文章浏览阅读7.6k次,点赞6次,收藏28次。一般情况下,我们下载openwrt源码之后,我们都会基于openwrt的环境,定制化开发一些功能,openwrt里面不一定包含我们所有需要的库,可能我们需要的用到的库要自己加上去,这就涉及到如何我把我需要的模块添加到openwrt中编译。 网上也有许多关于openwrt下makefile编写的文章,但是恰好工作需要,我也从不懂到熟悉,现在把学习的过程及结果分享给大家,希望给有需要帮_makefile for openwrt

PHP preg_replace() 正则替换所有符合条件的字符串-程序员宅基地

文章浏览阅读685次。大多数语言的正则表达式都是由“/”作为定界符的,而在PHP中,还可以使用“#”定界,如果字符串中包含大量“/”字符,在使用“/”定界的时候,就需要对这些“/”转义,而使用“#”就不需要转义,更简洁。而正则表达式必须要使用定界符包围起来,在Javascript中定界符是“/”,而在PHP中,比较常见的是用“/”定界,也可以用“#”定界,而且外面还需要用引号包围起来。也就是说所有正则字符都有特定含义,如果需要再用来表示原字符含义,就需要在前面加“\”转义,即使非正则字符,用“\”转义也是没有问题的。_preg_replace

POI导出word,POI写word并导出.POI word相关类详解_poi生成word 在cell中新建p-程序员宅基地

文章浏览阅读397次。目录需求:用POI写一个Word并导出需求:用POI写一个Word并导出想到一个小品,问把大象装冰箱需要几步?_poi生成word 在cell中新建p

ISTQB初级认证-知识点及脑图总结-程序员宅基地

文章浏览阅读4.6k次,点赞17次,收藏72次。前言此文章为本人利用课余时间进行的ISTQB初级认证知识和考点的总结。总结过程主要参考了“ISTQB测试人员认证初级大纲(2011版)”,由于作者能力与精力有限,此篇文章可能会存在纰漏,望见谅并及时指出。谢谢!ISTQB思维脑图上图中红色字体部分为重要考点和易错点。ISTQB(初级)知识和考点总结软件测试基础(1)为什么需要测试(1.1)缺陷带来的危害(1.1.1)资金受..._istqb初级

Qt C++ 实现无边框窗体自定义缩放和拖动_qt无边框窗口缩放-程序员宅基地

文章浏览阅读1.8k次。在本文中,我们使用Qt C++中创建了一个无边框窗体,并实现自定义缩放和拖动功能。我们利用标志隐藏了窗体的边框,并通过事件过滤器监听了窗体和顶部栏的事件,从而实现了窗口的拖动和缩放功能。我们还通过辅助函数判断鼠标所处的边缘区域,并设置相应的鼠标样式,提供了直观的用户反馈。_qt无边框窗口缩放

随便推点

DDR5相比DDR4有什么新特性?-程序员宅基地

文章浏览阅读2.9k次,点赞2次,收藏29次。关注、星标公众号,不错过精彩内容作者:黄工素材来源:网络公众号:strongerHuang第五代双倍数据率同步动态随机存取存储器(英语:double data rate fifth-ge..._ddr4和ddr5的性能差距

java百度天气接口解析_Java调用天气接口(百度天气)解析返回的JSON数据-程序员宅基地

文章浏览阅读678次。简介:本文详细讲述了通过Java调用百度天气接口的方法,取得返回的JSON格式的数据,并且通过第三方包解析JSON格式的数据。通过百度天气API调用网络编程接口接收返回的JSON格式的数据。关于百度天气接口的详细说明可以参考文章: http://www..com/txw1958/p/baidu-weather-forecast-api.html使用百度提供的天气接口,也就是通过一个URL访问百..._java百度天气api接口

改造智能风扇之——普通BLDC风扇拆机分析篇_fu6831 bldc-程序员宅基地

文章浏览阅读4.5k次,点赞6次,收藏20次。拆机学院:直流变频塔扇一、概述随着国内经济的快速发展,如今的电风扇如已一改在人们印象中的传统形象,在外观和功能上都更追求个性化。当然风扇的动力核心也由最初的交流电机,延伸出使用直流电机。这次我们通过拆解一款直流变频塔扇,从硬件上学习一下目前这种直流变频风扇的工作方式。二、直流变频风扇从某宝买了一台,对其进行拆机,可从结构上,可将风扇拆解为3个部分,顶部的控制部门,中间出风口和扇叶,底部的电机和电源驱动部分。外壳除了螺丝还有卡扣,拆的时候需要注意下,太暴力,可能会造成塑料卡扣断裂,拆开外壳,下面我_fu6831 bldc

Linux系统VsCode 配置C/C++环境_linux vscode配置c/c++环境-程序员宅基地

文章浏览阅读1.8w次,点赞30次,收藏210次。Linux系统VsCode 配置C/C++环境_linux vscode配置c/c++环境

骨架图的模拟js实现_js 骨架图-程序员宅基地

文章浏览阅读592次。骨架图的模拟js实现场景​ 为了提升体验,我们这边在页面初始渲染时加入了骨架图来代替loading,在拿到数据后再渲染数据,更改组件的展示。感觉确实比loading要提升体验,开始没接触过,对这部分比较感兴趣,就尝试着用html+css+js实现了一个简略版的骨架图,其效果如下​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JJgeBzIe-1613973854534)(./骨架图.gif)]​ 骨架图本质上也是在数据未接收到时的页面初始展示,相比于loading体_js 骨架图

2061:【例1.2】梯形面积_c++梯形面积保留小数点后两位-程序员宅基地

文章浏览阅读1.6k次。2061:【例1.2】梯形面积_c++梯形面积保留小数点后两位