recientemente 發現漏洞 這可能允許維護者阻止過濾器列表 適用於 Adblock Plus、AdBlock 和 uBlocker 瀏覽器擴展 創建將遠程腳本注入網站的過濾器。
用戶規模已突破10萬大關, 如果惡意腳本被注入廣告攔截器,將會產生相當大的影響 因為他們可能會執行不需要的活動,例如竊取 cookie、連接信息、導致頁面重定向或其他不需要的行為。
對於那些 不熟悉廣告攔截器,基本上他們使用 URL 列表 與廣告和惡意行為有關。
一般情況下, 它們由一小群人甚至一個人管理。
當這些列表加載了廣告攔截擴展程序(例如 Adblock Plus)時,該擴展程序將阻止瀏覽器連接到列出的 URL,從而防止連接到惡意廣告或腳本。
$rewrite 過濾器選項導致了問題
當 廣告攔截器Plus 3.2 於2018年推出,它 添加了一個新的過濾器列表選項,稱為 $rewrite。
這個選項 允許的 給列表維護者 替換與正則表達式匹配的網絡請求 特別是使用另一個 URL 時。
休伯特·菲奎爾, 誰介紹了這個功能, 解釋說:
從適用於 Chrome、Firefox 和 Opera 的 Adblock Plus 3.2(以及從 3.1.0.2053 開始的開發版本)開始,新的 $rewrite 過濾器選項允許您重寫資源的 URL,而不是阻止它。
當 Adblock Plus 使用 $rewrite 選項將請求 URL 分配給過濾器時,它會根據提供的規則轉換 URL,並告訴瀏覽器同時加載資源。”
$ 規則語法 rewrite 指定用作新 URL 模板的字符串。
$n 被過濾器的第 n 個子匹配正則表達式替換。 它與 JavaScript 的 String.prototype.replace() 函數的語法相同。
如果生成的 URL 是相對的 (即它沒有主機), 原始查詢的來源將用作基礎。 無論哪種情況,如果新 URL 不共享源,則重寫將被視為失敗,並且初始請求將被傳遞。
此外,出於安全原因,對於 SCRIPT、SUBDOCUMENT、OBJECT 和 OBJECT_SUBREQUEST 查詢,$rewrite 過濾器將被忽略。 該選項可以方便地修改或刪除查詢參數。”
唯一的缺點是替換字符串必須是相對 URL,這意味著它不包含主機名,並且重寫時它必須屬於與請求相同的源域。
代碼執行甚至在谷歌地圖上完成
安全研究人員解釋道 即:
在某些情況下,未經授權的惡意過濾器維護者可能會創建將遠程腳本注入特定站點的規則。
為此, 只需尋找一個上傳腳本的網站即可 來自任何包含開放重定向的域 並使用 XMLHttpRequest 或 Fetch 下載要運行的腳本。
不是太難找到,因為要單獨做這件事 只需使用谷歌地圖作為概念證明。
研究人員解釋說 必須滿足以下標準 這樣就可以使用此方法來利用 Web 服務:
- 頁面必須使用 XMLHttpRequest 或 Fetch 加載 JS 字符串並執行返回的代碼。
- 該頁面不得使用內容安全策略指南限制可檢索該頁面的來源,也不得在執行下載的代碼之前驗證最終請求 URL。
- 檢索到的代碼的源必須具有開放的服務器端重定向或託管任意用戶內容。
使用XMLHttpRequest或Fetch下載腳本和打開重定向是問題的兩個關鍵。
為了緩解這個問題, 建議網站使用內容安全策略標頭和 connect-src 選項 指定可以加載腳本的站點白名單。