一、安全通告
jQuery官方於日前發布安全預警通告,通報了漏洞編號為 CVE-2019-11358的原型污染漏洞。由攻擊者控制的屬性可被注入對象,之后或經由觸發 JavaScript 異常引發拒絕服務,或篡改該應用程序源代碼從而強制執行攻擊者注入的代碼路徑。奇安信代碼衛士將持續關注該漏洞進展,並第一時間為您更新該漏洞信息。
二、文檔信息
文檔名稱 | jQuery CVE-2019-11358原型污染漏洞 |
---|---|
關鍵字 | jQuery,原型污染 |
發布日期 | 2019年4月23日 |
分析團隊 | 奇安信代碼衛士 |
三、漏洞信息
3.1 漏洞分析
./src/core.js 第155行:
if ((options = arguments[ i ]) != null) {
options 取傳入的參數 arguments[i]
,而后第158 、159 行:
for (name in options) { copy= options [name];
name、copy值進而可以受輸入控制。
最后,在第183行:
target[name] = jQuery.extend (deep,clone, copy);
在第187行:
target[name] = copy;
如果 name 可以為 __proto__
,則會向上影響target 的原型,進而覆蓋造成原型污染。
target 在第127行:
target = arguments[ ">0 ] || {},
3.2 風險評估
漏洞本身是高危漏洞,但利用難度比較大。原型污染漏洞並未可大規模被利用的漏洞,因為漏洞要利用成功,需要攻擊者非常了解具體代碼的結構,需要攻擊者深入了解每個網站和對象原型的運作方式以及這些原型如何在龐大的圖式中進行分解,然后構造合適的利用方法才能成功。一般閉源的網站系統,攻擊者很難深入了解從而構造利用代碼,所以幾乎不受此漏洞攻擊。
四、修復方案
(1)jQuery version 3.x 修復方案
升級到最新的3.4.0版本。
(2)jQuery version 2.x 修復方案
$ diff jquery-2.2.4.js jquery-2.2.4-patch.js 213c213,214 < if (target === copy) { --- > // Prevent Object.prototype pollution > if (name === "__proto__" || target === copy) {
(3)jQuery version 1.x 修復方案
$ diff jquery-1.12.4.js jquery-1.12.4-patch.js 213c213,214 < if (target === copy) { --- > // Prevent Object.prototype pollution > if (name === "__proto__" || target === copy) {