jQuery 的「原型污染」安全漏洞
- 2020 年 1 月 20 日
- 筆記
前兩周發布的 jQuery 3.4.0 除了常規更新外,更重要的是修復了一個稱為「原型污染(prototype pollution)」的罕見安全漏洞。
什麼是原型污染?顧名思義,原型污染就是指攻擊者通過某種手段修改 JavaScript 對象的 prototype。
JavaScript 對象就跟變數一樣,但它不是存儲一個值(var car =「Fiat」),而是可以包含基於預定義結構的多個值 (var car ={type:」Fiat」, model:」500″, color:」white」})。
prototype 定義了 JavaScript 對象的默認結構和默認值,因此在沒有為對象賦值時應用程式也不會崩潰。
但如果攻擊者從 JavaScript 對象的 prototype 入手,攻擊者可通過將其控制的 prototype 注入對象,然後通過觸發 JavaScript 異常導致拒絕服務(denial of service),或者篡改應用程式源程式碼以注入攻擊者的程式碼路徑。最終的結果可能就是導致應用程式崩潰或劫持應用程式。
Snyk 團隊詳細描述了這個新的 jQuery 「原型污染」漏洞,其中包含攻擊原理和規避方法。「原型污染攻擊(CVE-2019-11358)」的概念驗證程式碼點此查看。
雖然漏洞比較嚴重,但好在「原型污染」攻擊並不能被大規模利用,因為每段攻擊程式碼必須針對每個目標進行微調。此外,大部分網站並不使用 jQuery 進行重要的操作,主要是用於操作動畫中的菜單或創建彈窗等。
最後,如果擔心安全問題,建議升級至最新版本 jQuery 3.4.0,畢竟目前大多數網站仍在使用 jQuery 的 1.x 和 2.x 分支,這意味著絕大多數基於 jQuery 的應用程式和網站仍有可能遭受攻擊。