最近 發現 流行的廣告攔截器«Adblock Plus»具有一個漏洞,可以組織JavaScript代碼的執行 在網站上,如果使用未經第三方測試的過濾器 懷有惡意 (例如,通過連接第三方規則集或在MITM攻擊期間通過規則替換)。
列出具有過濾器集的作者 可以在可訪問的網站的上下文中組織其代碼的執行 用戶使用運算符»$ rewrite«添加規則,從而可以替換部分URL。
如何執行此代碼?
聲明 $ rewrite不允許替換主機 在網址中 但它提供了自由操縱論點的機會 的請求。
然而 可以實現代碼執行。 某些網站,例如Google Maps,Gmail和Google圖片, 他們使用了動態加載以純文本形式傳輸的可執行JavaScript塊的技術。
如果服務器允許重定向請求,則可以通過更改URL的參數將其轉發到另一台主機(例如,在Google的上下文中,可以通過»google.com/search«API進行重定向) 。
加 允許重定向的主機,您也可以發起攻擊 針對允許用戶內容定位的服務(代碼託管,文章放置平台等)。
的方法 擬議的攻擊僅影響使用JavaScript代碼動態加載字符串的頁面 (例如,通過XMLHttpRequest或Fetch),然後運行它們。
另一個主要限制是需要使用重定向或將任意數據放在提供資源的源服務器那一側。
黃大仙禁運, 證明攻擊的相關性,它向您展示如何通過使用“ google.com/search”重定向來打開maps.google.com來組織代碼執行。
實際上,使用$ rewrite選項時,使用XMLHttpRequest或Fetch下載要運行的遠程腳本的請求不會失敗。
另外,開放重定向也同樣重要,因為它允許XMLHttpRequest從遠程站點讀取腳本,即使該腳本似乎來自同一源。
他們已經在努力解決問題
解決方案仍在準備中。 該問題還會影響AdBlock和uBlock阻止程序。 uBlock Origin Blocker不支持該問題,因為它不支持»$ rewrite»運算符。
曾經,uBlock Origin作者拒絕添加$重寫支持,理由是可能存在安全性問題和主機級別限制不足(建議使用querystrip選項清除查詢參數,而不是替換它們,而不是進行重寫)。
保護用戶是我們的責任。
儘管實際風險非常低,我們還是決定刪除$ rewrite選項。 因此,我們將在技術上盡快發布Adblock Plus的更新版本。
我們這樣做是為了預防。 沒有嘗試濫用重寫選項,我們將盡力防止這種情況的發生。
這意味著不會對任何Adblock Plus用戶造成威脅。
DAdblock Plus開發人員認為實際攻擊不太可能,因為對常規規則列表的所有更改都會得到審核,並且用戶很少實踐第三方列表的連接。
默認情況下,通過MITM進行規則替換會刪除HTTPS的使用 加載常規阻止列表(對於其餘列表,計劃在將來的版本中禁止HTTP下載)。
要阻止網站方面的攻擊, 可以應用CSP指令 (內容安全策略),通過它可以明確標識可以從其加載外部資源的主機。
來源: https://adblockplus.org, https://armin.dev