Android Superuser 提權(quán)漏洞分析
近日,國外安全研究人員揭露多款A(yù)ndroid平臺下的授權(quán)應(yīng)用管理軟件存在3個安全漏洞,利用漏洞可進(jìn)行root提權(quán),詳見鏈接:http://forum.xda-developers.com/showthread.php?t=2525552。 TSRC也對這3個Android Superuser 提權(quán)漏洞進(jìn)行了分析,具體分析情況請參見下文。
一、Superuser環(huán)境變量設(shè)置漏洞
【影響產(chǎn)品】
在 Android <= 4.2.x 已root過的系統(tǒng)上使用到以下授權(quán)管理應(yīng)用的都可能受影響:
1、ChainsDD Superuser (當(dāng)前版本,包括v3.1.3)
2、CyanogenMod/ClockWorkMod/Koush Superuser (當(dāng)前版本,包括v1.0.2.1)
3、Chainfire SuperSU v1.69以前的版本
【漏洞原理】
1、 偽造包含惡意shell代碼的app_process,該shell代碼將/system/bin添加到環(huán)境變量,然后在data目錄創(chuàng)建文件,由于默認(rèn)情況下僅允許root權(quán)限才能創(chuàng)建,若創(chuàng)建成功就代表root提權(quán)成功,具體代碼如下:

2、 利用chmod 755 app_process賦予惡意腳本app_process執(zhí)行權(quán)限,然后將惡意腳本app_process所在目錄添加到環(huán)境變量PATH=`pwd`:$PATH;
3、 正常情況下,通過命令su –c ‘true’ 會執(zhí)行系統(tǒng)的app_process程序,但由于惡意腳本所在目錄已經(jīng)被添加到環(huán)境變量,此時會導(dǎo)致惡意腳本app_process替換原系統(tǒng)的app_process程序被執(zhí)行。
4、 環(huán)境變量BOOTCLASSPATH也存在上述問題。
二、AndroidSuperuser shell字符轉(zhuǎn)義提權(quán)漏洞
【影響產(chǎn)品】
1、CyanogenMod/ClockWorkMod/Koush Superuser(當(dāng)前版本,包括v1.0.2.1)
2、Chainfire SuperSU v1.69之前的版本
【漏洞原理】
1、 在ClockWorkMod Superuser 中對于執(zhí)行“su –c ‘COMMAND’”命令時,是通過以下代碼實現(xiàn)的,其中的關(guān)鍵函數(shù)在于get_command用于獲取傳入的“COMMAND”參數(shù):
2、 由于get_command對傳遞進(jìn)來的“COMMAND”參數(shù)未作有效轉(zhuǎn)義,通過以下命令可繞過限制以root權(quán)限執(zhí)行命令:
snprintf(user_result_command, sizeof(user_result_command),"exec /system/bin/am " ACTION_RESULT " --ei binary_version %d--es from_name '%s' --es desired_name '%s' --ei uid %d --ei desired_uid %d --escommand '%s' --es action %s --user %d", VERSION_CODE, ctx->from.name,ctx->to.name, ctx->from.uid,ctx->to.uid, get_command(&ctx->to), policy == ALLOW ?"allow" : "deny", ctx->user.android_user_id);
3、 SuperSU雖然對字符有作一定過濾,但反點`與$符號可繞過過濾,可使用以下命令來執(zhí)行root命令:
su -c '`touch /data/abc`' su -c '$(touch /data/abc)'
三、AndroidSuperuser su –daemon提權(quán)漏洞
【影響產(chǎn)品】
Android >= 4.3 安裝有以下授權(quán)管理應(yīng)用的都可能受到影響:
1、CyanogenMod/ClockWorkMod/Koush Superuser 當(dāng)前版本
【漏洞原理】
1、 攻擊者必須擁有adb shell訪問權(quán)限;
2、 創(chuàng)建惡意shell文件trojan,主要用于設(shè)置環(huán)境,并創(chuàng)建/data/trojan.out文件,由于data目錄僅限于root權(quán)限才能創(chuàng)建,因此若生成trojan.out文件就說明root提權(quán)成功:

3、 將各種常用命令與shell文件trojan掛鏈接,添加trojan所在目錄到環(huán)境變量,劫持常用命令來執(zhí)行惡意腳本:
for x in id ls cp cat touch chmod chown iptables dmesg; do ln -strojan /data/local/tmp/$x ; done PATH=/data/local/tmp:$PATH
4、攻擊者需要一個非shell(uid不是2000)的擁有suid能力的linuxUID來避開su daemon的main函數(shù)中的檢查。一個可行的辦法是安裝一個設(shè)置了”debuggable”標(biāo)志的應(yīng)用,并使用run-as以它的uid來運(yùn)行。(由于4.3的run-as有bug,所以沒辦法正常工作,而4.4中已經(jīng)修復(fù)了這個問題,故這里采用run-as.422來運(yùn)行應(yīng)用):
setsid run-as.422 my.debuggable.package /system/xbin/su --daemon&
5、 當(dāng)有程序向superuser請求root權(quán)限時,一使用到被掛鏈接的命令,惡意shell文件trojan.out就會以root權(quán)限來執(zhí)行。