jQuery 修復的“原型污染”安全漏洞是什麼?
前兩週發布的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的應用程序和網站仍有可能遭受攻擊。