上班中午休息時間看了下 exploit 的原始碼, 再看了下 Android 的 source tree, 最後拿 i9000 測試看看, 確認該 *漏洞* 在 Samsung 手機上應該都無效.
簡單版本: Samsung 手機上沒有 /system/etc/firmware 目錄, 導致漏洞無法讓系統使用相對路徑下的漏洞主程式. 當使用別的 root 方法建立 firmware 目錄後, 該漏洞便成功得逞.
長版本:
先看原程式
-
if ((sock = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT)) < 0)
-
die("[-] socket");
-
…
-
-
snprintf(buf, sizeof(buf), "ACTION=add%cDEVPATH=/..%s%c"
-
"SUBSYSTEM=firmware%c"
-
"FIRMWARE=../../..%s/hotplug%c", 0, basedir, 0, 0, basedir, 0);
-
if (sendmsg(sock, &msg, 0) < 0)
-
die("[-] sendmsg");
再看 Android source code, 當跑到
-
l = asprintf(&file, FIRMWARE_DIR"/%s", uevent->firmware);
就跳出了, 前面的 ../../.. 便是從 /system/etc/firmware 往前指三層, 不過 firmware 不存在, 也就無法指到漏洞所指定的路徑.
如果網友有 Samsung 系列手機, 可以試著安裝檔案管理員之類程式看看 /system/etc/ 下是否沒有 firmware 目錄, 至少我的 i9000 確定沒有.