作者:360 Vulpecker Team
來源:安全客

概要

今年9月22日,360信息安全部的Vulpecker安全團隊發現了國內消息推送廠商友盟的SDK存在可越權調用未導出組件的漏洞,并利用該漏洞實現了對使用了友盟SDK的APP的任意組件的惡意調用、任意虛假消息的通知、遠程代碼執行等攻擊測試。

經過分析驗證,360 Vulpecker安全團隊將此漏洞細節第一時間提交給友盟進行修復。10月18日,友盟官方發布最新版3.1.3修復漏洞。為了確保受此漏洞影響的終端用戶有充分的時間進行安全更新,12月6日,360Vulpecker安全團隊首次向外界公開披露漏洞信息。

在360顯危鏡后臺數據庫中根據該含有漏洞版本的SDK的特征值查詢確認,發現約有3萬多APP受此漏洞的影響,根據包名去重后約7千多款APP產品,涉及多種類型的應用。鑒于該消息推送SDK使用范圍較廣,且受影響APP多是與終端用戶日常生活息息相關的應用,一旦被惡意攻擊者利用危害將是非常嚴重的。基于該漏洞,可以實現對終端用戶推送虛假詐騙信息、遠程竊取用戶終端設備中的敏感數據(例如通訊錄、照片、賬號密碼等數據)等功能。此外,該漏洞的危害依賴于Android應用本身提供的功能而有所不同,因此對終端用戶的攻擊方式亦是姿態各異,造成的危害也是多種多樣的。

此漏洞已經得到友盟官方修復,請用戶及時更新智能手機上安裝的各類APP,防止手機里的隱私數據和財產被不法分子輕易竊取。

前言

近年來,隨著移動互聯網的高速發展,智能終端設備已經走入人們生活的方方面面。在Android和iOS兩大移動平臺陣營中,Android系統以其開源性、易開發、豐富的硬件等優勢占據了市場上約80%的份額。

Android系統中提供的應用豐富多樣,且功能復雜,幾乎所有的應用都采用了第三方的SDK以加速其開發周期,節約成本。第三方SDK包括支付、統計、廣告、社交、推送、地圖類等,其在加速產品成型時,也引入了許許多多的安全問題。下圖所示內容為經360顯危鏡后臺查詢的幾款常用SDK使用情況統計數據,從圖中可以看出使用了該SDK開發的APP非常多。

下文以友盟消息推送SDK為例,詳細介紹一下第三方SDK在缺乏產品安全審計的情況下存在的高危漏洞風險,希冀以此能督促第三方SDK廠商在產品安全性方面能投入更多的精力。

SDK介紹

友盟 Push SDK是友盟互聯網數據服務SDK其中用來做消息推送的模塊之一,基于【友盟+】全域數據建立與用戶精準直接溝通的渠道,將APP的內容主動推送給終端用戶,讓用戶實時實地的獲取相關信息,有效提升用戶活躍和忠誠度。由于其定位精準、集成快速等優點,目前有多個知名APP在使用U-PUSH服務。

技術分析

友盟的消息推送SDK中有一導出Service組件存在漏洞,可被越權調用并利用該組件訪問任意service組件,甚至未導出的亦可。隨后,利用該漏洞調用友盟其他未導出的組件,可進一步越權調用任意導出和未導出的Activity,進而擴大了該漏洞的攻擊面,為攻擊者提供了更大范圍的攻擊可能性。

下文詳述了友盟的消息推送SDK中可越權調用所有非導出組件的漏洞技術原理,并據此詳述了如何實現非導出組件惡意調用、惡意消息通知、遠程代碼執行等攻擊行為。

漏洞起因

友盟最新的消息推送SDK中集成的說明文檔中的demo里,AndroidManifest文件中導出了一個IntentService——UmengIntentService,據推測這個服務是為了使用了PUSH SDK的APP之間相互喚醒使用的,詳情如下圖所示。

這個IntentService有個實現的抽象方法如下:

我們能看到外部接收了intent攜帶的body數據(JSON格式),交給UMessage構造后得到v3,如果display_type 為“pullapp”的話,可通過設置pulled_service和pulled_package參數能拉起任意未運行的servcie。其中Umessage函數的結構如下:

漏洞利用

初步利用——訪問未導出service組件

通過構造如下POC,可訪問APP內所有的service組件,甚至未導出的servcie。而且SDK提供了一個“貼心”的功能,接收額外的參數,封裝到新的Intent后發送給拉起的service。

*限制一點的只能putExtra String類型的數據,但是也足夠利用了。

PoC:

進階利用——訪問未導出Activity

SDK有幾個強大功能:接收推送的消息,下載圖片或接收文本進行通知展示。點擊通知后有幾個可選動作,打開URL、打開指定activity、運行其他APP和一個自定義的動作。我們通過一個未導出的Service——UmengDownloadResourceService進行進一步的利用。

打開activity的POC:

利用實例1——通用彈出釣魚通知

利用上面打開任意activity的POC,可以彈出任意通知,這個通知的圖標,文本都是可以定制的,而且用戶長按通知也會發現這個通知是漏洞APP發出的。點擊通知,我們可以跳轉url打開一個釣魚頁面或是釣魚activity。

利用實例2——隔山打牛,一點資訊下載任意壓縮包

通過檢索平臺搜索后發現,APP一點資訊是存在這個漏洞的。進一步挖掘過程中,發現APP有一個未導出的service——WebAppUpdateService,詳情如下。

通過構造合法的參數,可以利用WebAppUpdateService組件實現下載自定義的zip文件并解壓到當前應用沙箱目錄中,EXP代碼如下:

運行成功后,下載zip文件夾并解壓到相關目錄,這個目錄里存的是APP所使用的html頁面,而整個zip里文件都是我們能夠修改和替換。現在做釣魚頁面,加各種js代碼都沒問題了。

隨后,通過對該APP代碼的深度挖掘分析,我們發現該應用提供了動態加載插件的功能,且在對加載的插件解壓時未做過濾導致存在目錄穿越漏洞。結合該漏洞,我們可以在加載插件過程中覆蓋該APP的lib文件,注入自己的惡意代碼,進而造成遠程代碼執行。不言而喻,遠程代碼執行對用戶的危害是非常嚴重的,可遠程控制用戶終端設備,遠程竊取用戶隱私數據,甚至其他任意的惡意行為。下圖所示為結合上述漏洞實現的對用戶終端設備遠程獲取隱私敏感數據的攻擊截圖。

漏洞演示視頻如下:

http://v.youku.com/v_show/id_XMzIwNTAyMjUyOA==.html

影響范圍

通過分析發現,有漏洞的組件UmengIntentService是在新版3.1.X版本中引入的。我們據此確定以下的特征值,并在360顯危鏡后臺數據庫中查詢受該漏洞影響的APP:組件service中包含UmengIntentService并且在apk中包含字符串pullapp。

在360顯危鏡后臺數據庫中,按該漏洞的特征值查詢后發現約3萬多的APP受此漏洞的影響,其中不乏大公司的產品主流產品,對用戶影響巨大。

修復建議

如果組件導出是非必要的,將漏洞組件設置為不導出;

如果組件是必須導出的,在Service加上 android:protectLevel 增加權限校驗,至少為signature級別。

官方已有修復版本更新,請及時更新到最新版本。

時間軸

2017-09-22 發現漏洞
2017-09-25 通報官方
2017-10-18 官方發布最新版3.1.3修復漏洞
2017-12-06 對外公布漏洞詳情

參考鏈接


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/477/