包 tough-cookie 的 4.1.3 之前的版本存在原型污染漏洞,原因是在使用 CookieJar 且 rejectPublicSuffixes=false 模式时对 Cookie 的处理不当。该问题源于对象的初始化方式。
https://nvd.nist.gov/vuln/detail/CVE-2023-26136
原型污染是一种影响 JavaScript 的漏洞。原型污染指的是能够向现有的 JavaScript 语言构造原型(如对象)中注入属性的能力。JavaScript 允许修改所有对象的属性,包括其魔术属性,例如 proto、constructor 和 prototype。攻击者通过注入其他值来操纵这些属性,从而覆盖或污染 JavaScript 应用程序中基对象的对象原型。然后,Object.prototype 上的属性会通过原型链被所有 JavaScript 对象继承。当这种情况发生时,会导致拒绝服务(触发 JavaScript 异常),或者篡改应用程序源代码以强制攻击者注入的代码路径,从而导致远程代码执行
原型污染主要通过两种方式发生:
重要说明:https://github.com/salesforce/tough-cookie/issues/282 https://security.snyk.io/package/npm/tough-cookie/2.5.0
=> 要修复 MemoryCookieStore 类中的漏洞,需要修改 putCookie 方法,以防止在 cookie.domain 被设置为 proto 时发生原型污染。
https://github.com/salesforce/tough-cookie/pull/283
a. 修改 tough_cookie_2.5.0\node_modules\tough-cookie\lib\memstore.js
将 memstore.js 中所有新建对象的地方从 {} Object.create(Object.prototype) 改为 Object.create(null),
这样我们使用的对象实例就不具有可被污染的原型属性。
b. 新建了 /node_modules/tough-cookie/lib/test-unit.js 在 vanillajs 中使用,它位于 tests 文件夹中的文件 cookie_jar_test.js “Issue #282 - Prototype pollution”
命令:node test-unit.js
c. 新建了文件 /node_modules/tough-cookie/lib/testVerifyVulnerable.js 验证漏洞行为已被修复。
命令:node testVerifyVulnerable.js
change.diff : https://github.com/ronmadar/Open-Source-Seal-Security/blob/cf768f1932f087c30ebec7fe60c3fca323b4e54b/change.diff
a. 常规包 tough-cookie V 2.5.0
命令:npm install [email protected] && node index.js
b. 带有更改的压缩包 tough-cookie V 2.5.0 tgz 格式
命令:npm install ./tough-cookie-2.5.0-PATCHED.tgz && node index.js
c.
原型污染: 通过直接向 Object.prototype 添加属性,存在污染整个原型链的风险。 这可能导致整个应用程序出现意外行为,因为任何遍历原型链的对象都可能受到影响。
安全风险:在 Web 应用环境中,攻击者可以利用原型污染操纵对象和属性,可能导致特权提升、信息泄露等安全漏洞。
兼容性问题:修改像 Object.prototype 这样的核心原型可能会引入与其他依赖标准行为的库或框架的兼容性问题。 在集成或更新依赖项时可能导致错误或意外行为。 d. 上面已写。
如何安装此项目