CyberGlossary

漏洞

原型链污染

别称: Object.prototype 污染, __proto__ 注入

定义

JavaScript 漏洞,攻击者通过不可信输入修改 Object.prototype,向所有对象注入属性,从而改变应用行为甚至导致 RCE。

原型链污染利用 JavaScript 的原型链:在 merge/clone/assign 操作中设置 __proto__、constructor.prototype 或 prototype 等键,攻击者可改变 Object.prototype,使所有普通对象继承这些属性。该问题常出现于递归合并工具、深拷贝函数、查询字符串解析器或接受用户 JSON 的模板引擎中。后果包括拒绝服务、认证绕过,以及当被污染的属性影响安全相关查询(isAdmin、sandbox、渲染选项等)时的远程代码执行。具有代表性的 CVE 包括 lodash CVE-2019-10744 以及众多 Node.js 库的漏洞。缓解措施包括拒绝 __proto__/constructor 键、对不可信数据使用 Map 或 Object.create(null)、对原型 Object.freeze,并选择更安全的库。

示例

  • 向使用 JSON merge 的端点发送 {"__proto__":{"isAdmin":true}},从而在全局获得管理员权限。
  • 污染原型以更改模板渲染选项并触发 RCE。

相关术语