漏洞追蹤:最新IE UXSS漏洞技術(shù)分析

責(zé)任編輯:editor04

2015-02-07 23:03:32

摘自:51CTO

最近David Leo在Full Disclosure上爆出了一個(gè)ie的uxss漏洞,可以繞過ie的同源策略。3、瀏覽器在第一個(gè) iframe 上執(zhí)行 eval 中的 js 腳本,分為一下幾個(gè)步驟:

最近David Leo在Full Disclosure上爆出了一個(gè)ie的uxss漏洞,可以繞過ie的同源策略。本文簡要分析一下這個(gè)漏洞的原理。

漏洞追蹤:最新IE UXSS漏洞技術(shù)分析

攻擊過程

<iframe src="redirect.php"></iframe>

<iframe src="https://www.google.com/images/srpr/logo11w.png"></iframe>

<script>

top[0].eval('_=top[1];alert();_.location="javascript:alert(document.domain)"');

</script>

poc中第一個(gè) iframe 利用一個(gè)302跳轉(zhuǎn),跳轉(zhuǎn)到目標(biāo)域,第二個(gè)iframe也加載了目標(biāo)域的一個(gè)資源,和兩個(gè)資源可以是不同的資源,當(dāng)然跟Content-Type也沒有關(guān)系。

上述 poc 在瀏覽器中的渲染過程大概如下:

1、瀏覽器渲染第一個(gè) iframe,并加載 redirect.php 的資源;

2、瀏覽器渲染第二個(gè) iframe,并加載對應(yīng)的資源;

3、瀏覽器在第一個(gè) iframe 上執(zhí)行 eval 中的 js 腳本,分為一下幾個(gè)步驟:

a.將第一個(gè) iframe 賦值給一個(gè)變量

b.彈出一個(gè)alert 框

c.用戶關(guān)閉 alert框

d.通過給 location 賦值的方式,在目標(biāo)域上執(zhí)行 payload

4、payload 在第一個(gè) iframe 所在的域中執(zhí)行,也就是目標(biāo)域。

漏洞真相

貌似漏洞的關(guān)鍵在那個(gè) alert 彈窗,由于 js 是單線程運(yùn)行的,所有的彈窗(alert, prompt, and confirm)還有異步函數(shù)都會阻斷瀏覽器進(jìn)程,但是,這塊的邏輯根據(jù)瀏覽器的不同,實(shí)現(xiàn)也有所不同。來看看上面的 POC 在不同瀏覽器上的渲染時(shí)間圖:

FireFox

當(dāng)alert框彈出的時(shí)候,firefox 會繼續(xù)處理網(wǎng)絡(luò)請求,當(dāng)?shù)谝粋€(gè) iframe 跳轉(zhuǎn),并且加載了目標(biāo)域的資源之后,alert 彈窗將會被自動關(guān)閉,js 腳本停止執(zhí)行,所以,后續(xù)payload 代碼不會執(zhí)行。

Chrome

當(dāng)alert 彈窗彈出的時(shí)候,所有網(wǎng)絡(luò)請求都終止了,所有后續(xù) payload 中的 js 還是在原有的域上執(zhí)行的。

IE

當(dāng) alert 彈窗彈出的時(shí)候,IE 會繼續(xù)處理網(wǎng)絡(luò)請求,當(dāng)?shù)谝粋€(gè) iframe 跳轉(zhuǎn)之后,目標(biāo)域的資源加載完成之后,用戶關(guān)閉彈窗,payload 后續(xù)的代碼是在目標(biāo)域上執(zhí)行的。

本質(zhì)原因

當(dāng)?shù)谝粋€(gè) iframe 跳轉(zhuǎn)之前,payload 中的 js 都是在原有的域上執(zhí)行的,這不會繞過 SOP,然而,當(dāng)?shù)谝粋€(gè) iframe 跳轉(zhuǎn)之后,IE 會轉(zhuǎn)換相關(guān)的域。所以,之前 payload 中的 js 腳本的域切換到目標(biāo)域了,而不是原本的域,所以,就可以在目標(biāo)域上執(zhí)行任意代碼。注意,這里第二個(gè) iframe 也是必須的。

利用成本&&其他

根據(jù)現(xiàn)有的 payload,貌似整個(gè)利用過程需要用戶參與,事實(shí)上并非如此,看如下 payload:

<iframe src="redirect.php"></iframe>

<iframe src="https://www.google.com/images/srpr/logo11w.png"></iframe>

<script>

top[0].eval('_=top[1];with(new XMLHttpRequest)open("get","sleep.php",false),send();_.location="javascript:alert(document.domain)"');

</script>

alert 彈窗的目的是阻塞瀏覽器進(jìn)程,上面 payload 用一個(gè)異步請求來達(dá)到同樣的效果。

影響范圍

目前 win7-win8.1上面的 ie10-ie11都受影響。

建議普通用戶先切換到其他瀏覽器吧。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號