一类新的安全缺陷正在默默无闻

原型污染漏洞影响JavaScript应用程序

2019年初,Snyk的安全研究人员披露了一个细节严重漏洞在Lodash,一个受欢迎的JavaScript库,它允许黑客攻击多个Web应用程序。beplay体育能用吗

安全漏洞是一个原型污染错误 - 一种允许攻击者利用规则的一种漏洞JavaScript以各种方式编程语言和泄露应用程序。

什么是原型污染?

JavaScript是基于原型的:当创建新对象时,它们会携带原型“对象”的属性和方法,其中包含基本功能,例如toString.构造函数hasownproperty.

基于对象的继承使JavaScript成为Web程序员来爱的灵活性和效率 - 但它也让它变得易受篡改。beplay体育能用吗

恶意演员可以通过修改对象对所有对象进行应用范围更改,因此名称原型污染。

有趣的是,攻击者甚至不需要直接修改对象 - 他们可以通过“__Proto__'任何JavaScript对象的属性。一旦您对对象进行了更改,它将适用于运行应用程序中的所有JavaScript对象,包括篡改后创建的对象。


阅读更多最新的JavaScript安全新闻


这是一个原型污染方式的简单示例。以下代码更改了该代码的值toString.在原型中的功能到任意代码:


让客户= {name:“person”,地址:“这里”}
console.log(customer.tostring())
//输出:“[对象对象]”

客户.__ proto __。toString =()=> {警报(“污染”)}
console.log(customer.tostring())
//警报框弹出:“污染”


现在,每次ToString()在一个对象上调用,将弹出一个警报框,并将消息“污染”(除非对象明确覆盖object.tostring()有自己的实施)。自从toString.广泛用于客户端JavaScript,这将导致应用程序的执行中断。

其他原型污染攻击涉及将属性和方法添加到对象以操纵应用程序的行为。

“[原型污染]并不完全独特,因为它或多或少地是一种物体注射攻击,”安全研究员穆罕默德Aldoub.每日SWbeplay2018官网IG.。“但是,它特别特别的是,绝对不是大多数人都知道的主流漏洞类型之一。

“这是模糊的,因为它主要是针对特定语言/框架,因为它并不像其他人那样记录。然而,它与其他'主流'vulns的危险不那么危险。“

原型污染的影响是什么?

“原型污染的影响取决于申请,”安全研究员MichałBentkowski.每日SWbeplay2018官网IG.

“在简单的时刻,每次JavaScript代码访问对象上不存在的属性(包括检查属性的存在),我们都可以使用原型污染更改支票的结果。”

他补充说:“取决于应用程序的确切逻辑,原型污染可能导致实际上所有流行的Web漏洞:远程代码执行(RCE),beplay体育能用吗跨站脚本((XS.),SQL注射, 等等。”

在Webeplay体育能用吗b浏览器上,原型污染通常导致XSS攻击(见上文示例)。在2019年,例如,一个原型污染错误在JavaScript库中找到jQuery留下了许多Web应用程序,易受此类攻击。beplay体育能用吗


你可能也会喜欢拒绝钱包攻击:如何防止昂贵的利用目标无服务器设置


但其他漏洞可能会表面。“对原型污染的客户端开发目前没有很好地覆盖,”Bentkowski说,目前正在进行详细说明本类别的利用如何绕过流行的HTML消毒者,如HTML-Sanitize和Dompurify。

在服务器端,原型污染的影响更好。

“通过使节点9S服务器崩溃,”安全研究人员来说,“对服务器端对服务器端的影响是至少拒绝服务”安全研究员POSIX.每日SWbeplay2018官网IG.。“但是,它肯定有可能链接到其他漏洞,例如远程代码执行。”


最近几个月的原型污染爆炸的Node.js生态系统已被击中最近几个月的原型污染爆炸的Node.js生态系统已被击中


去年,Bentkowski发现了一个kibana的原型污染虫,一个数据可视化库,它使得可以创建反向shell并实现RCE。

然后在今年7月,POSIX报道流行的Express-FileUpload库中的相同类型的缺陷,它可以允许黑客获取对Node.js服务器的远程shell访问权限。

在同一个月,安全研究员Francesco Soncina发现了一个原型污染漏洞在对象映射JavaScript库类型中,允许黑客逐步对Node.js应用程序的SQL注入攻击。

“如果根据库的最终应用程序具有动态代码评估或命令执行小工具,则攻击者可能会触发目标计算机上的任意命令执行,”Soncina写道。

和2020年9月,Snyk报道流行的节点伪造javascript库中的遗留功能包含了一个漏洞,可以允许攻击者对应用程序进行原型污染攻击。

脆弱性得到了高度严重的9.8分数和概念证明表明了这一点setpath.可用于污染__原型__基础对象的属性,导致应用程序范围内修改。

如何硬化应用于原型污染攻击

像许多其他安全漏洞,攻击者通过Web应用程序中的用户输入利用原型污染错误,并在文本字段,标题和文件中发送恶意代码。beplay体育能用吗

“我猜信任用户输入是问题的实际根源,所以开发人员应该非常小心地对用户可能影响哪些对象字段,”Aldoub说。

另一个问题是写入许多JavaScript应用程序的方式。“导致原型污染的编码模式在JavaScript代码中非常常见,”Bentkowski指出。

例如,许多JavaScript库接受选项对象并检查对象以存在特定属性。如果某些属性不存在,则它们默认为某些预定义选项(下面的示例)。


options.someoption = options.someoption ||default.someoption;


在这种情况下,攻击者可以使用原型污染来覆盖一些选择并操纵应用程序的逻辑。

一种流行的防御它可以创建开发人员从输入字符串中删除风险字段的块列表。但这比做了这更容易。


受到推崇的Trojannet - 对机器学习模型的简单而有效的攻击


“你必须枚举风险领域的所有可能性,以及编码这些领域的所有排列,这是一个不可估量的困难壮举,”Aldoub说。

例如,通过上述Lodash漏洞,开发人员最初检查了对该字段的字符串__Proto__,但是实现了这一点构造函数也是原型污染的潜在目标。

“如果发现另一个领域被发现是可利用的?”Aldoub说。

另一个重要步骤是检查潜在原型污染漏洞的依赖性模块,这提出了自己的挑战。

“从Application Developer的角度来看,很难检查使用的所有模块,”POSIX解释说。“因此,在使用之前,有必要验证模块是否完全验证。”

一个被低估的错误

所有的研究人员每日SWbeplay2018官网IG.发表伴随着共同的关注:原型污染没有得到足够的关注。

“我觉得这种脆弱性的无限潜力。但与可能性相比,我不认为已经完成了足够的研究,“Posix说,自去年以来一直专注于原型污染袭击事件。

“社区需要在更深入和更多的关注中学习和练习这种类型的脆弱性,因为它仍然模糊不清,”Aldoub说。

Bentkowski补充说:“原型污染可能对Web应用程序的安全性产生严重影响,但在那里没有许多来源,展示了它的利用的现实案例。beplay体育能用吗

“所以,这是一个完美的研究目标,”研究人员说,比喻Java Deserialization.,其他危险类型的脆弱性多年来大多是不受疑的。

一种菲达拉夫的安全研究人员介绍2015年表现出破坏性潜力爪哇反序列化并最终给了它在安全社区中应得的牵引力。

“我觉得这种突破仍然用于原型污染,”本斯科斯基说。


阅读更多什么是fetch元数据?如何保护您的Web资源免受信息窃取攻击beplay体育能用吗