[CVE-2021-25397] [Samsung] [TelephonyUI] PhotoringReceiver导出存在任意文件写漏洞结合动态库加载行为可实现本地任意代码执行
2022.11.20
1.0
完整的漏洞分析与利用
wnagzihxa1n
0x00 漏洞概述
三星手机系统的TelephonyUI存在一个导出组件PhotoringReceiver,其接收外部传入的两个字段"photoring_uri"和"down_file",TelephonyUI会从"photoring_uri"下载文件到"down_file"指向的文件路径,此处存在任意文件写漏洞,结合私有目录下动态库加载的行为,可通过覆写动态库文件实现本地任意代码执行
0x01 触发条件
TelephonyUI
com.samsung.android.app.telephonyui
12.1.02.37
f5176d28be8a735ad3e53df19b0fa81d
0x02 PoC
0x03 前置知识
0x04 Root Cause Analysis
组件com.samsung.android.app.telephonyui.carrierui.photoring.model.PhotoringReceiver导出
<receiver
android:name="com.samsung.android.app.telephonyui.carrierui.photoring.model.PhotoringReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.samsung.android.app.telephonyui.action.DOWNLOAD_PHOTORING"/>
</intent-filter>
</receiver>[1]和[2]取出传入Intent里的"photoring_uri"和"down_file"字段,[3]调用方法PhotoringMgr.downloadContent()处理传入的数据
方法PhotoringMgr.downloadContent()对类变量mCallMessageNetwork进行判空校验并赋值给局部变量callMessageNetwork,[1]调用方法CallMessageNetwork.a()继续处理
方法CallMessageNetwork.a()调用多线程类CallMessageNetworkThread
[1]根据当前运行环境编辑字段"photoring_uri",不影响后续逻辑,[2]使用参数RequestType.DOWNLOAD_CONTENT和"photoring_uri"初始化HTTPRequestHelper对象,并调用方法get()
在方法HTTPRequestHelper.get()里,[1]获取HttpClient对象,用于后续网络请求,[2]和[4]都是打印参数操作,[3]执行网络请求,[5]处理请求回来的返回值
[1]处理网络请求返回值
方法HTTPResponseParser.a()调用HTTPResponseParser.e(),加了层异常捕获
[1]从网络请求返回值里取出HttpEntity,[2]从HttpEntity里取出InputStream,[3]调用方法HTTPResponseParser.convertIsToFile()把InputStream写入到字段"down_file"指向的文件路径
写出到文件的方法HTTPResponseParser.convertIsToFile(),[1]创建对应的FileOutputStream对象,[2]读取数据,[3]写出到文件
完整的逻辑调用图如下
0x05 调试与利用
0x06 漏洞研究
0x07 References
《Two weeks of securing Samsung devices: Part 1》
https://blog.oversecured.com/Two-weeks-of-securing-Samsung-devices-Part-1/
附录:调试过程记录
Last updated