jQuery CVE-2019-11358原型汙染漏洞分析和修復建議

一、安全通告

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) {


分享到:


相關文章: