[CVE-2021-25397] [Samsung] [TelephonyUI] PhotoringReceiver导出存在任意文件写漏洞结合动态库加载行为可实现本地任意代码执行

Date
Version
Description
Author

2022.11.20

1.0

完整的漏洞分析与利用

wnagzihxa1n

0x00 漏洞概述

三星手机系统的TelephonyUI存在一个导出组件PhotoringReceiver,其接收外部传入的两个字段"photoring_uri""down_file",TelephonyUI会从"photoring_uri"下载文件到"down_file"指向的文件路径,此处存在任意文件写漏洞,结合私有目录下动态库加载的行为,可通过覆写动态库文件实现本地任意代码执行

0x01 触发条件

上线日期
应用名
包名
版本号
MD5
下载链接

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