
LG Root Exploit
LG Root 利用
特别鸣谢: Juggie,感谢他指出更新包中一个奇怪的二进制文件(spritebud),这引导我发现了这个漏洞。
主题: Sprite Software 的备份软件中的竞态条件,该软件由 OEM 预装于 LG Android 设备上。
CVE ID: CVE-2013-3685
影响: 本地可利用的漏洞,只需极少的设备用户交互即可导致以 root 用户身份执行代码。在特定情况下,可以在设备用户不知情的情况下利用此漏洞。
产品: "Backup" "spritebud"
厂商: Sprite Software LG Electronics 可能还有其他厂商
受影响版本: spritebud 1.3.24 backup 2.5.4105 很可能还有其他版本
受影响的设备(取决于固件配置): LG-E971 LG Optimus G LG-E973 LG Optimus G LG-E975 LG Optimus G LG-E975K LG Optimus G LG-E975T LG Optimus G LG-E976 LG Optimus G LG-E977 LG Optimus G LG-F100K LG Optimus Vu LG-F100L LG Optimus Vu LG-F100S LG Optimus Vu LG-F120K LG Optimus Vu LG-F120L LG Optimus Vu LG-F120S LG Optimus LTE Tag LG-F160K LG Optimus LTE 2 LG-F160L LG Optimus LTE 2 LG-F160LV LG Optimus LTE 2 LG-F160S LG Optimus LTE 2 LG-F180K LG Optimus G LG-F180L LG Optimus G LG-F180S LG Optimus G LG-F200K LG Optimus Vu 2 LG-F200L LG Optimus Vu 2 LG-F200S LG Optimus Vu 2 LG-F240K LG Optimus G Pro LG-F240L LG Optimus G Pro LG-F240S LG Optimus G Pro LG-F260K LG Optimus LTE 3 LG-F260L LG Optimus LTE 3 LG-F260S LG Optimus LTE 3 LG-L21 LG Optimus G LG-LG870 LG(未知) LG-LS860 LG Mach LG-LS970 LG Optimus G LG-P760 LG Optimus L9 LG-P769 LG Optimus L9 LG-P780 LG Optimus L7 LG-P875 LG Optimus F5 LG-P875h LG Optimus F5 LG-P880 LG Optimus 4X HD LG-P940 LG Prada LG-SU540 LG Prada 3.0 LG-SU870 LG Optimus 3D Cube LG-US780 LG Lollipop 可能还有其他设备。
产品信息: "Backup" 和 "spritebud" 是 Sprite Software 编写的一套设置与应用程序备份/恢复系统,部署在 LG Android 智能手机上。"Backup" 是面向终端用户的前端应用,而 "spritebud" 是执行备份与恢复功能的服务。
详细信息: "spritebud" 守护进程由 init 脚本启动,并以 root 用户身份运行。该守护进程监听一个 Unix 套接字,接收来自 "Backup" 应用的指令。由于 "spritebud" 以 root 用户身份运行,借助精心构造的备份,我们可以写入任意文件、更改任意文件的权限和属主。
精心构造的备份包含针对我们的利用应用 "com.cunninglogic.lgpwn" 的恢复数据。这些数据包括:一个用于扩大我们利用窗口的 50MB 填充文件 (a)、su 二进制文件 (b)、用于安装 su 的脚本 (c),以及一个包含我们脚本路径的文本文件 (d)。所有文件均归该应用所有,并且全局可写/可读/可执行。所有文件均按字母顺序恢复。整个备份压缩后约为 2MB。该备份的结构如下:
drwxrwxrwx u0_a114 u0_a114 2013-05-28 20:13 files
./files:
在恢复之前,我们的利用应用会运行,监视该进程并等待。在恢复过程中,spritebud 守护进程首先创建 files 目录,然后设置其权限和属主。接着,它解压并恢复 "a" 文件,也就是我们的 50MB 填充文件。在恢复 "a" 期间,我们的利用应用有时间将 "d"(即包含我们脚本 (c) 完整路径的文本文件)符号链接到 /sys/kernel/uevent_helper。当 "d" 文件恢复完成后,我们的路径会被写入 uevent_helper。每当热插拔事件发生时(每隔几秒就会发生一次),内核会执行 uevent_helper 中保存的路径,我们的脚本 (c) 随之运行并安装 su 二进制文件 (b)。