Android adb setuid提权漏洞由Sebastian Krahmer在2010年公布,并发布利用工具RageAgainstTheCage (rageagainstthecage-arm5.bin)。该工具被广泛用于SuperOneClick、z4root等root工具和Trojan.Android.Rootcager、DreamDroid等恶意代码中。
该工具支持Gingerbreak 2.2.X及更低版本的系统。
漏洞原理:
adb启动时最初拥有root权限,在运行过程中需要降成shell权限。如下所示,adb源码中对于setgid()和setuid()没有检查返回值,导致降权失败后继续运行。
于是利用linux对shell进程存在数量限制的特点,产生大量僵尸进程来造成降权失败,这样继续运行的adb进程就拥有root权限。
从漏洞修补后的adb源码中我们可以看出,增加了对返回值的检查。
漏洞修补前的adb源码:
int adb_main(int is_daemon)
{
......
property_get("ro.secure", value, "");
if (strcmp(value, "1") == 0) {
secure = 1;
......
}
if