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