原型污染:JavaScript 中的隐患

admin 2024年5月27日00:38:17评论5 views字数 925阅读3分5秒阅读模式

原型污染是一种漏洞,当攻击者可以操纵或将属性注入对象的原型时就会出现这种漏洞。在 JavaScript 中,对象从其原型继承属性。Object.Prototype 是所有其他对象派生自的父对象。如果我们将任何属性添加到 Object.prototype,它将自动提供给所有对象。

原型污染漏洞是如何发生的?🌪️

当用户提供的输入未得到正确处理/清理,从而导致对象属性被修改时,就会出现此漏洞。可以使用 __proto__(原型)添加/覆盖属性,从而污染原型链。

使用 JavaScript 的实际示例

原型污染:JavaScript 中的隐患

在上面的截图中,我们定义了一个名为“user”的对象。它从其父对象 Object.Prototype 继承了所有属性。toString() 是分配给我们声明的对象“user”的属性。让我们覆盖此属性并污染用户对象。

原型污染:JavaScript 中的隐患

我们已经覆盖了 toString() 函数并将自己的代码注入其中。现在让我们尝试执行它。

原型污染:JavaScript 中的隐患

代码片段

let user = {'name': 'mayank', 'age': 25} user.name user.name.toString()user.name.__proto__.toString = ()=>{alert(11111)}user.name.toString()

原型污染的影响🏹

攻击者可能会在代码中引入无限循环,从而导致大量资源消耗。

客户端原型污染可能成为DOM XSS的原因,而在服务器端也可能导致RCE。

它会破坏对象的行为,导致意外的敏感数据暴露或绕过实施的安全机制。

缓解措施

确保用户输入不包含影响原型链的 __proto__、构造函数或原型。

通过冻结 Object.prototype 也可以使用 Object.freeze(Object.prototype) 来防止此漏洞,但是由于兼容性问题,不太推荐使用。

Prototype Pollution: The Hidden Danger in JavaScripthttps://medium.com/@mayank_prajapati/prototype-pollution-the-hidden-danger-in-javascript-c8b17002e8da

原文始发于微信公众号(Ots安全):原型污染:JavaScript 中的隐患

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年5月27日00:38:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   原型污染:JavaScript 中的隐患http://cn-sec.com/archives/2779663.html

发表评论

匿名网友 填写信息