<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址:http://drops.wooyun.org/mobile/11263

            0x00 前言


            現在越來越多Android App使用了WebView,針對WebView的攻擊也多樣化。這里簡單介紹下目前的WebView File域攻擊一些常用的方法,并重點舉例說明下廠商修復后依然存在的一些問題。(影響Android 4.4及以下)

            0x01 WebView中的file協議


            我們知道,在Android JELLY_BEAN以下版本中,如果WebView沒有禁止使用file域,并且WebView打開了對JavaScript的支持,我們就能夠使用file域進行攻擊。

            在File域下,能夠執行任意的JavaScript代碼,同源策略跨域訪問能夠對私有目錄文件進行訪問等。APP中如果使用的WebView組件未對file協議頭形式的URL做限制,會導致隱私信息泄露。針對IM類軟件會導致聊天信息、聯系人等等重要信息泄露,針對瀏覽器類軟件,則更多的會是cookie等信息泄露。

            譬如之前Wooyun上爆了一個利用file域攻擊的漏洞( WooYun: 360手機瀏覽器缺陷可導致用戶敏感數據泄漏 )

            代碼如下:

            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);
            

            0x02 使用符號鏈接同源策略繞過


            WebKit 有跨域訪問的檢查,它的規則是 ajax 訪問相同 path 的文件就 allow,否則 deny。利用符號鏈接,把相同文件名指向了隱私文件,會造成同源策略檢查失效。攻擊者通過本地文件使用符號鏈接和File URL結合,利用該漏洞繞過同源策略,進而進行跨站腳本攻擊或獲得密碼和cookie信息。

            在JELLY_BEAN及以后的版本中不允許通過File url加載的Javascript讀取其他的本地文件,不允許通過File url加載的Javascript可以訪問其他的源,包括其他的文件和http,https等其他的源。那么我們要在通過File url中的javascript仍然有方法訪問其他的本地文件,即通過符號鏈接攻擊可以達到這一目的,前提是允許File url執行javascript。

            目前所知,通過使用符號鏈接同源策略繞過可以使file域攻擊影響到Android 4.4,進一步擴大了攻擊范圍。

            這個典型的漏洞分析可以看下參考欄中的【2】

            0x03 依然存在問題


            自13年file域導致的安全問題受到關注后,一些廠商進行了相應的修復。因為一些開發者的認識程度以及可能產品實際需求,雖然各種廠商針對性做了不少patch的工作,但是仍然出現了各種問題。當然,這里的前提是WebView 沒有禁用file協議也沒有禁止調用javascript,即WebView中setAllowFileAccess(true)和setJavaScriptEnabled(true)。我們舉幾個例子說明如下:

            A、某app修復的時候,在某個過程中判斷url是否以file:///開頭,如果是的話就返回,不是的話,再loadUrl

            p1

            p2

            乍看這個修復,認為已經能夠防止file域攻擊問題了。但是,忽略了一個問題,如果我們在file:///前面添加空格,是否還仍然能夠正常loadUrl。嘗試后發現會修正下協議頭,也就是說file域前面添加空格,是能夠正常訪問的。于是我們構造了如下POC就能夠繞過這個限制:

            Intent i = new Intent();
            i.setClassName("xxx.xxx.xxx","xxx.xxx.xxx.xxxxxx");
            i.putExtra("url", " file:///mnt/sdcard/filedomain.html"); //file域前面增加空格
            startActivity(i);
            

            B、很自然,有些開發者就想trim去空格就可以修復了,于是我們又看到下面這個例子

            p3

            這種修復方式,一般認為已經解決了前面說明的問題了。但是,這里頭存在一個技巧,即協議頭不包括///,還是仍然能夠正常loadUrl。看下我們構造了如下POC就能夠繞過這個限制:

            Intent i = new Intent();
            i.setClassName("xxx.xxx.xxx","xxx.xxx.xxx.xxxxxx");
            i.putExtra("url", "file:mnt/sdcard/filedomain.html"); //file域跟mnt之間沒有空格的情況
            startActivity(i);
            

            通過這兩個簡單的例子,從細節可以看到雖然現在越來越多的開發者注意到file域攻擊的一些問題,也進行了相應的對抗措施,但是仍然還有不少因修復不善導致的繞過的方法,根源還是在于要獲取協議頭的問題。

            0x04 參考


            0x05 總結


            總結一下這類問題的修復

            1. 對于不需要使用file協議的應用,禁用file協議
            2. 對于需要使用file協議的應用,禁止file協議調用javascript
            3. 將不必要導出的組件設置為不導出

            File域下攻擊的問題,現在已經算是老生常談了,但是依然還存在很多猥瑣的手段來利用。這里不一一說明了,總之思想有多遠,攻擊面就有多寬!Have Fun!

            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线