信息來源:FreeBuf
在手機中,我們通常訪問一個網(wǎng)站的做法是打開瀏覽器在地址欄中輸入網(wǎng)站地址,一般來說這樣的方法有些煩人,所以,有些網(wǎng)站訪問對象通常也會生成一個二維碼圖片,方便用戶直接掃碼訪問,只要用戶手機掃碼就能跳轉(zhuǎn)到目標(biāo)訪問網(wǎng)站,或是把相應(yīng)信息顯示在用戶手機中。幾乎我們所有人都會用手機的掃碼功能,但是,你是否想過,如果你信任的應(yīng)用APP其掃碼功能出現(xiàn)安全錯誤,會發(fā)生什么情況?今天,我們就來談?wù)凢irefox IOS v10瀏覽器中的掃碼XSS漏洞。
Firefox IOS瀏覽器說明
根據(jù)蘋果應(yīng)用商店的說明,F(xiàn)irefox IOS v10中加入了更多新東西,極簡的用戶界面,可以隱藏多余顯示圖片,增加了一個二維碼掃碼功能,能突出顯示瀏覽記錄和最新資訊。
也就是說,從Firefox IOS v10開始,火狐手機瀏覽器加入了二維碼掃碼功能,其中使用了WebKit web view組件來加載內(nèi)容,其余的為SWIFT架構(gòu),包含在Firefox的漏洞眾測范圍之內(nèi)。以下為Firefox IOS v10掃碼訪問網(wǎng)站的一個動圖:
用javascript URI構(gòu)造XSS
所以,這里如何來發(fā)現(xiàn)其掃碼功能的漏洞呢?首先我想到的就是構(gòu)造一個javascript URI形式去替代二維碼中的URL,看看掃碼功能如何判斷,是否會把它當(dāng)成正常的文本,還是會當(dāng)成javascript代碼去執(zhí)行。我們試試看。
在這里,在二維碼生成網(wǎng)站其中輸入你的內(nèi)容就能自動生成一個二維碼,可以進行測試。
以上這兩個javascript URI功能為獲取用戶之前最后在瀏覽器中瀏覽過的網(wǎng)站信息。所以,假設(shè)有這么一種情況,當(dāng)前用戶處于瀏覽google.com的狀態(tài),但他通過Firefox掃碼想訪問另一網(wǎng)站,那么,如果掃碼的嵌入內(nèi)容是我們上述的javascript URI,那么當(dāng)他一掃碼就會跳出其訪問google.com的一些相關(guān)信息來。試試,確實可以,具體如下:
所以,這樣一來,既然能在這個點上完成javascript 代碼執(zhí)行,惡意攻擊者也就能用它竊取用戶cookie或其他相關(guān)信息了。這種攻擊范圍不僅只限于網(wǎng)站地址訪問可以用它來實現(xiàn)多種攻擊場景,如瀏覽器的閱讀模式。
瀏覽器閱讀模式下的XSS漏洞觸發(fā)
閱讀模式是瀏覽器提供給用戶的一種極簡閱讀體驗,在這種模式的加載過程中,瀏覽器會剔除掉一些不必要的代碼、框架、其它嵌入元素的渲染以及廣告的干擾。同樣,我用之前生成的形式看看是否能在閱讀模式下實現(xiàn)XSS,確實可以:
其中在代碼執(zhí)行后會跳出http://localhost:6571,這是javascript的window.location.href的用法。
在最后加入任意網(wǎng)站URL就能配合其它漏洞進行利用,形成對用戶信息的進一步威脅。
本地文件加載過程的XSS觸發(fā)
可以用該漏洞來觸發(fā)一些手機本地的文件加載,掃碼后,就有加載本地文件。
內(nèi)聯(lián)頁面加載過程的XSS觸發(fā)
在偽協(xié)議internal://頁面加載過程中形成XSS ,如:
CSP繞過
該漏洞同樣可以用來繞過CSP限制,比如某個網(wǎng)站只限于訪問來自它自身的內(nèi)容,如以下代碼場景:
// test.php
<?php
header("Content-Security-Policy: default-src 'self'");
if(isset($_GET['xss'])) {
echo$_GET['xss'];
}
?>
所以即使是這樣的限制,我們構(gòu)造的二維碼javascript代碼也可以無限制運行。
其它場景
還可以在頁面選定文本的查找中,如果選定文本是javascript URI形式,那么Firefox手機瀏覽器就會執(zhí)行其中的js代碼,但這種利用危害較小,只會顯示一個錯誤加載框,但好在還可以用它來把用戶導(dǎo)向其它惡意網(wǎng)站。
其它瀏覽器的該漏洞情況
除了Firefox,Opera mini for IOS也存在上述XSS漏洞,我們已經(jīng)及時告知了Opera官方,但他們目前為止還未給出回應(yīng)。
漏洞原因分析
從v10一直到v19版本,F(xiàn)irefox 都在地址欄中支持 javascript URI 調(diào)用,這樣就存在上述XSS可能。
經(jīng)上報給Firefox之后,他們及時從地址欄中刪除了javascript URI功能,漏洞也獲得CVE-2019-17003的分配。