2018年1月9日, 國家信息安全漏洞共享平臺(CNVD)發(fā)布關(guān)于Android WebView存在跨域訪問漏洞(CNVD-2017-36682)的公告,本文最后會給出具體的解決方案。
漏洞描述
WebView是Android用于顯示網(wǎng)頁的控件,是一個基于Webkit引擎、展現(xiàn)Web頁面、解析并執(zhí)行JavaScript代碼的控件,Android應(yīng)用可以使用WebView空間,靈活的擴展自身的業(yè)務(wù)功能。
市面上大多數(shù)使用HTML5技術(shù)開發(fā)的應(yīng)用均使用WebView進(jìn)行HTML5頁面的展示。除了從遠(yuǎn)程服務(wù)器加載Web頁面,WebView還可以通過修改特定配置,從文件中進(jìn)行HTML5頁面的加載。在未正確配置WebView的情況下,會致使WebView同源策略失效,導(dǎo)致HTTP協(xié)議、file協(xié)議跨源攻擊的發(fā)生。該漏洞使得WebView能夠訪問當(dāng)前應(yīng)用內(nèi)部數(shù)據(jù),如果WebView加載了來源不明的HTML文件,可能導(dǎo)致當(dāng)前應(yīng)用內(nèi)部數(shù)據(jù)被攻擊者竊取,如身份認(rèn)證信息、加密密鑰、用戶隱私信息等。
漏洞分析
Android應(yīng)用內(nèi)部分可導(dǎo)出的Activity組件中,WebView允許通過file URL對http域進(jìn)行訪問,并且未對訪問路徑進(jìn)行嚴(yán)格校驗,由此導(dǎo)致了本次漏洞的出現(xiàn)。
該漏洞的產(chǎn)生條件:
(1)應(yīng)用中存在設(shè)置為可被導(dǎo)出的Activity組件,并且組件中包含Webview調(diào)用。
(2)Webview調(diào)用中setAllowFileAccessFromFileURLs 或
setAllowUniversalAccessFromFileURLs 設(shè)置為true(minSdk<=4.1 默認(rèn)為true,minSdk>4.1 默認(rèn)為false)。
解決方案
第一步
如果你的activity里面使用了webview,請關(guān)閉該activity的導(dǎo)出功能(該功能是允許外部應(yīng)用打開該activity)
<activity
android:name=".activity.WebViewActivity"
android:exported="false"http://關(guān)閉導(dǎo)出功能
android:screenOrientation="portrait"/>
第二步
如果你的activity必須要打開導(dǎo)出功能,請手動關(guān)閉通過file URL對http域進(jìn)行訪問
webView.getSettings().setAllowFileAccessFromFileURLs (false);
第三步
對于必須使用file URL對http域進(jìn)行訪問時,可對傳入的URL路徑范圍嚴(yán)格控制,例如建立URL白名單,設(shè)置允許訪問的URL列表(不要遺漏路徑中可能出現(xiàn)的特殊情況如“../../”等,避免限制被繞過)