聚焦源代碼安全,網羅國內外最新資訊!
編譯:代碼衛士
Sanitizer API 是一款內置瀏覽器庫,用於刪除受用戶控制的輸入中的潛在惡意代碼。原型污染是一種JavaScript 漏洞,可導致攻擊者利用JavaScript 編程語言的規則更改應用程序的行為並以多種方式攻陷該應用。
安全研究員 Michal Bentkowski 表示,該漏洞強調了防禦客戶端原型污染攻擊面臨的挑戰。
原型污染可發生在客戶端(瀏覽器)和服務器端(Node.js 服務器)。Bentkowski 在這一領域開展了大量研究工作,他在探索Chromium 中的客戶端原型污染漏洞使發現了這個新漏洞。
Sanitizer API 被添加到Chromium 瀏覽器中,支持將原生清理取代第三方庫如DOMPurify。
Bentkowski研究發現,如果JavaScript 對象Sanitizer 以空對象作為參數進行初始化,則會觸發繞過清理流的內部機制。Bentkowski表示該空對象導致瀏覽器「遍歷原型鏈」。
Bentkowski 展示了API如何缺乏對嵌入SVG對象的JavaScript片段的清理,進行概念驗證。一旦將假設已清理的SVG插入該頁面,就會執行JavaScript 代碼。Bentkowski在報告中提到要利用該漏洞,必須啟用瀏覽器的 #enable-experimental-web-platform-features。
他表示,「我認為啟用該標記的人很少。然而,Sanitizer API 在Chrome 105(8月底發布)中是默認啟用的,因此受影響人數要大得多。」
Chromium bug追蹤工具上的討論情況說明了原型污染漏洞邊界的複雜性。操縱原型是JavaScript之所以靈活和用途廣泛的特性之一,也就是說加固應用程序安全使其免受原型污染攻擊將一直要求web開發人員的細緻投入。
正如一名安全研究員在討論中提到的那樣,該原型污染向量並不是 Sanitizer API中應當解決的問題。這名研究員指出,「Object原型被污染的環境已遭攻陷,我認為選擇加固所選web API不會提供更實際的好處,它可能只是會讓人有一種關於安全和API認知複雜性花費的錯覺。」
Bentkowski 指出,「在報告該bug前,我不知道WebIDL 標準的存在,該標準定義原型鏈必須由 Web APIs 遍歷。這意味着它實際是一種特性,而且現在也無法改變它,因為改變後向後不兼容,也就是說很多應用程序將會崩潰。」因此,開發人員需要識別並從受用戶控制的來源中刪除所有污染原型的工具。
儘管如此,Bentkowski 的發現確實帶來一些修複方案。他表示,「該bug僅在SVG實例中起作用。最後它是提交中的真實bug。原型污染本身是『特性』。然而,它不應能夠通過特殊構造的配置對象而繞過Sanitizer。」
https://portswigger.net/daily-swig/prototype-pollution-bug-in-chromium-bypassed-sanitizer-api
題圖:Pixabay License
本文由奇安信編譯,不代表奇安信觀點。轉載請註明「轉自奇安信代碼衛士 https://codesafe.qianxin.com」。


奇安信代碼衛士 (codesafe)
國內首個專注於軟件開發安全的產品線。
覺得不錯,就點個「在看」 或 "贊」 吧~