Edge瀏覽器(Chromium)——從XSS到接管網頁

微軟早前宣佈他們將發佈基於Chromium的Edge瀏覽器。繼谷歌Chrome之後,微軟的Edge將成為第二款基於Chromium的瀏覽器。

在2019年8月20日,微軟宣佈了一項新的漏洞獎勵計劃,主要針對基於Chromium的Edge瀏覽器。該項目規定,只有針對微軟的代碼所開發的攻擊才能得到賞金,這意味著攻擊面非常小。但為了彌補這一點,微軟願意提供了兩倍的獎勵。這意味著這款新瀏覽器中一個過審的漏洞可能價值3萬美元。

在這篇文章中,我將解釋是如何在這個新瀏覽器中發現3個不同的漏洞,從而賺到4萬美元。我還驚喜地發現,我報告了這個項目中第一個有效漏洞。

New Tab Page (NTP) XSS

新標籤頁(NTP)是打開瀏覽器或打開新標籤時看到的第一個頁面。當然也有其他例外,我說的是默認設置下。NTP在新Edge瀏覽器中的一個獨特之處在於它實際上是一個在線網站,地址為:

<code>https://ntp.msn.com/edge/ntp?locale=en&dsp=1&sp=Bing/<code>

火狐的內置頁是about:home/about:newtab,Chrome瀏覽器的是chrome-search://local-ntp/local-ntp.html。我們現在必須尋找微軟對Chromium所做的新改動,這樣才能拿到賞金。

這個漏洞的發現其實是一個意外。當我第一次打開新Edge瀏覽器時,我從未過多注意NTP,而是直接研究相對於Chromium來說比較獨特的功能,被稱Collections,儘管當時它貌似和懸賞無關,並且只能通過某個標誌啟用。但我仍然想看看是否能找到突破口。

Collections就像一個更強大、功能更豐富的書籤,一旦你將一個網站添加到Collections中,它將獲取標題、描述和圖像,然後將其保存並以Twitter card的形式顯示。所以其中一個測試是看看一旦我保存了一個標題中有HTML標籤的網頁,Collections欄是否會渲染標題中的HTML代碼。測試後,發現答案是否定的。

研究了一會兒還是無效果,於是我決定暫去睡覺。到了第二天早上,當我打開新款Edge瀏覽器決定進行下一輪測試時,迎接我的是以下NTP:

Edge瀏覽器(Chromium)——從XSS到接管網頁

你看到了嗎?上圖中那個又小又粗的字母“a”?

因為這是一個新的瀏覽器,所以我訪問的所有網站幾乎都會成為“頂部推薦”,展示在NTP中,而且貌似沒有進行安全過濾。是的,現在沒有任何東西阻止我執行javascript代碼,以下是一段簡單的PoC視頻:

Edge瀏覽器(Chromium)——從XSS到接管網頁

<code>https://leucosite.com/Edge-Chromium-EoP-RCE/NTP-TOPSITE-XSS.mp4/<code>

你可能還沒意識到這個漏洞的重要性。NTP上的XSS有什麼用?實際上,NTP是一個高權限頁面。我們在基於Chromium的瀏覽器上通過查看chromejavascript對象內部數據來進行測試。

下圖對比了普通網站上的chrome對象和Edge設置頁面上的chrome對象。

Edge瀏覽器(Chromium)——從XSS到接管網頁

其中edge://settings/profiles包含更多的功能,而這些額外的功能也是我們感興趣的高權限功能。

到目前為止,我們已將JS代碼注入到高權限的頁面中,從而實現了非法提權(EoP)。現在讓我們來探索一下,在這種特殊的環境下,我們能做些什麼。

潛在RCE

我開始研究那些高權限函數,看看是否能幫助我執行命令。很快我便在chrome.qbox上發現了一個未被記錄的對象,我在網絡上找不到任何和它有關的詳細資料。我猜測這一定是一個微軟獨有的對象,那它到底是什麼呢?

Edge瀏覽器(Chromium)——從XSS到接管網頁

<code>https://leucosite.com/Edge-Chromium-EoP-RCE/qbox.mp4/<code>

我發現chrome.qbox.navigate中有一個特殊的功能,通過報錯消息,發現它需要一個類型為qbox.NavigationItem的對象。

經過後續測試後,我發現我可以將一個JSON對象傳遞給這個函數,而這個JSON對象至少包含一個“url”和“id”。這就是不報錯所需要的最少參數。

<code>chrome.qbox.navigate({id:0,url:""})/<code>

很好,但可惜除了不報錯它什麼也沒做,我期待能彈出窗口或發生一些明顯的改變,但什麼都沒有。所以我嘗試遍歷了一下“id”和“url”的值,直到最後我執行以下操作:

<code>chrome.qbox.navigate({id:999999,url:null})/<code>

一旦執行,Edge瀏覽器就消失了。我檢查了一下crashdump文件夾,並找到以下信息:

<code>(69a4.723c): Access violation - code c0000005 (first/second chance not available)
ntdll!NtDelayExecution+0x14:
00007ffd`9fddc754 c3 ret/<code>

可能是因為參數不可用。

<code>rax=000001ff5651ba80 rbx=000001ff5651ba80 rcx=000001ff5651ba80
rdx=3265727574786574 rsi=000001ff5651ba80 rdi=0000009eb9bfd4f0
rip=00007ffd17814b40 rsp=0000009eb9bfd300 rbp=000001ff4fec30a0
r8=000000000000008f r9=0000000000000040 r10=0000000000000080
r11=0000009eb9bfd290 r12=000000000000006f r13=0000009eb9bfda90
r14=0000009eb9bfd478 r15=00000094b5d14064
iopl=0 nv up ei pl nz na po nc
cs=0033 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010206

msedge!ChromeMain+0x9253e:
00007ffd`17814b40 488b02 mov rax,qword ptr [rdx] ds:32657275`74786574=????????????????
Resetting default scope

FAULTING_IP:
msedge!ChromeMain+9253e
00007ffd`17814b40 488b02 mov rax,qword ptr [rdx]

EXCEPTION_RECORD: (.exr -1)
ExceptionAddress: 00007ffd17814b40 (msedge!ChromeMain+0x000000000009253e)
ExceptionCode: c0000005 (Access violation)
ExceptionFlags: 00000000
NumberParameters: 2
Parameter[0]: 0000000000000000
Parameter[1]: ffffffffffffffff
Attempt to read from address ffffffffffffffff

DEFAULT_BUCKET_ID: INVALID_POINTER_READ

PROCESS_NAME: msedge.exe/<code>

不過我仔細研究了一下,看來這是一個可利用的崩潰。我沒有專研過內存漏洞,所以不得不重新閱讀和此有關的MDN文件。我不停地探索qbox.navigate函數,設法產生不同的崩潰,最後我確定肯定有一個可利用的崩潰(RCE)!下面是第二種PoC:

<code>

<title>test<iframe>/<title>

q

/<code>

而這一點得到了微軟的證實,事實上,之前的兩個漏洞(XSS和崩潰)分別讓我得到了1.5萬和1萬美元的獎勵。從技術上講,我已發現了新Edge瀏覽器的兩個漏洞!

接管目標

在之前的漏洞(XSS)中有一點很突出,那就是它依賴於ntp.msn.com來渲染HTML代碼。那麼,為什麼不把ntp.msn.com作為一個不錯的老Web應用來進行滲透測試呢?我所需要的就是一個XSS,以及去觸發瀏覽器的某個漏洞。

當訪問https://ntp.msn.com/compass/antp?locale=qab&dsp=1&sp=qabzz時,我注意到,它看起來就像一個正常的NTP,只是沒有正確加載,而正常的NTP頁面https://ntp.msn.com/edge/ntp?locale=en&dsp=1&sp=Bing幾乎總是使用某種緩存機制加載,兩者源代碼似乎也有所不同。

我使用Burpsuite去對https://ntp.msn.com/compass/antp?locale=qab&dsp=1&sp=qabzz進行研究,然後發現假如設置一個cookiedomainId,那麼它將出現在非正常的NTP頁面中的script標籤中。由於這裡不存在任何安全檢查,所以我可以使用cookie將惡意代碼注入這個頁面。

利用cookie攻擊測試的好處是,你可以設置在給定域名下屬的所有子域中都使用該cookie。所以我只需要在任何MSN子域中找到一個XSS,使用它設置一個cookie,這樣非正常的NTP頁面便會執行惡意JS。後來我在http://technology.za.msn.com中找到了個XSS,可惜這個網站現在被刪除了,它似乎是一個被遺忘的子域名,使用了非常老舊的技術。我發現當向這個網站發送一個惡意的POST請求時,會導致這個網站出現一條錯誤消息,其中變量值沒有安全過濾,相關PoC如下:

<code>POST /pebble.asp?relid=172 HTTP/1.1
Host: technology.za.msn.com

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0
Accept: text/html,application/xhtml+xm l,application/xm l;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 20
Origin: http://technology.za.msn.com
Connection: close
Referer: http://technology.za.msn.com/pebble.asp?relid=172
Cookie: PublisherUserProfile=userprofileid=322220CC%2D9964%2D47F9%2DAE30%2D2222258E99A4; PublisherSession=uid=DIN2DWDWDFWWW7L3OHA5N6; ASPSESSIONIDSCCQSRDS=EOJQQDDFGGGEEPCPNFOBL; _ga=GA1.q.21062224016.4569609491; _gid=GA1.q.1840897607.1569609491; _gat=1; __utma=2qq77qq6.21qqqq4016.156qqqq9491.156960qqq.qqqqqq91.1; __utmb=201977236.1.10.1569609491; __utmc=201977236; __utmz=201977236.1569609491.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmt=1; __gads=ID=qqqq5dd817qqqb4:T=1562229492:S=ALNI_MZUnsEhqqqqjxzklxqqqqqJHo1A
Upgrade-Insecure-Requests: 1

startnum=90'xss/<code>

唯一的缺點是,當出現錯誤時,服務器需要大約需要42秒才能做出響應。也許我們需要想辦法去解決它。在服務器響應後,我們發現xss會渲染在頁面中,用一個通用的XSS向量去替換它就會導致JS代碼執行。由於不存在X-frame-OPTIONS,所以我可以在自己的網站嵌入一個iframe,指向目標網站,執行所需的惡意POST請求。這樣受害者就被XSS所攻擊,cookie被改變。

正如我之前提到的,XSS是工作在非正常的NTP網頁上,而不是默認/正常的NTP網頁,而普通的NTP會使用localStorage中的一個條目進行緩存。這並不是一個大問題,因為非正常和正常的NTP頁面都是相同的源,我能夠訪問localStorage中的相關條目,並將我最終的JS代碼添加到緩存的HTML中。現在,我就可以接管NTP頁面了。

你可能想知道接管NTP的危險是什麼,正如我前面提到的,NTP頁面是一個高權限頁面,所以我們能夠訪問一些非常有趣的函數,它們可以做很多有趣的事情。以下是我認為的惡意動作:

1.要求Edge用戶使用他們的Microsoft帳戶登錄,由於NTP是官方網頁,所以用戶很信任它。

2.訪問chrome.authPrivate.acquireAccessTokenSilent,這可能會洩漏用戶的訪問令牌並執行惡意操作。

3.使用chrome.authPrivate.getPrimaryAccountInfo(e=>{console.dir(e)})洩露用戶信息,顯示電子郵件地址和帳號。

4.使用chrome.embeddedSearch.searchBox.paste("file:///C://")誘騙用戶訪問本地文件。

5.使用chrome.embeddedSearch.newTabPage.updateCustomLink(i,"http://www.g.com","http://www.g.com")編輯位於NTP中的頂端站點。

6.使用chrome.ntpSettingsPrivate.setPref設置的所有可改變項。

7.持續跟蹤用戶和偽造MSN內容,我們可以像現在許多惡意插件那樣注入虛假廣告。

總結

讓我們總結一下攻擊流程:

1.誘騙受害者訪問我們的惡意網站

2.惡意網站中隱形的iframe會使用POST請求將XSS發送到technology.za.msn.com

3.在大約42秒後,XSS成功在technology.za.msn.com中觸發

4.technology.za.msn.com中的XSS會添加一個cookiedomainId,其中包含第二個payload

5.受害者接著被重定向到非正常的NTP頁面https://ntp.msn.com/compass/antp?locale=qab&dsp=1&sp=qabzz

6.一旦https://ntp.msn.com/compass/antp?locale=qab&dsp=1&sp=qabzz被加載,domainId中的XSS成功被渲染

7.這個XSS會查看localStorage,並在緩存的HTML代碼的開頭插入我們的最終payload。

此時,NTP已經被完全接管,當用戶打開一個新的選項卡時,最終的payload將一直被觸發!我向微軟報告了這一漏洞,收到了15000美元的獎勵。

PoC和視頻

我大量使用編碼的原因是由於domainId中的字符有使用限制。

<code>



<iframe>

Loading...(ETA 42secs)




/<code>

視頻地址:https://leucosite.com/Edge-Chromium-EoP-RCE/NTP-XSS-FULL.MP4


本文由白帽彙整理並翻譯,不代表白帽匯任何觀點和立場

來源:https://nosec.org/home/detail/3616.html

原文:https://leucosite.com/Edge-Chromium-EoP-RCE/

白帽匯從事信息安全,專注於安全大數據、企業威脅情報。

公司產品:FOFA-網絡空間安全搜索引擎、FOEYE-網絡空間檢索系統、NOSEC-安全訊息平臺。

為您提供:網絡空間測繪、企業資產收集、企業威脅情報、應急響應服務。


分享到:


相關文章: