研究人员发现express-fileupload库中存在一个注入漏洞(CVE-2020-7699),攻击者可利用该漏洞对Node.js服务器发动原型污染攻击。
express-fileupload,是一个Node.js程序包,下载量超过700万,借助该程序包,应用程序可处理web应用程序中上传的文件。
express-fileupload 1.1.8之前版本受到该漏洞的影响,NVD将其CVSS v3分值评为9.8。该漏洞已在该库最新1.1.9版本中得到了修复。
该漏洞打开了拒绝服务攻击的大门,在某些情况下,还可导致远程shell访问。
Node.js的编程语言JavaScript使用原型定义函数和对象的属性。原型污染攻击利用该特征操纵应用程序的行为。
express-fileupload含有一个parseNested选项,该选项从上传的文件中创建嵌套的对象结构。当启用该选项时,攻击者可以在web请求中使用特殊构造的文件名发动原型污染攻击。
在其博客文章中,安全研究人员Posix展示了如何利用该漏洞造成Node.js服务器崩溃,并在每次的请求中返回内部服务器错误,导致拒绝服务。
根据Posix发布的信息,该漏洞还可被用于攻击其他的库,例如流行的EJS模板引擎,该模板引擎经常与express-fileupload组合使用。
攻击者可利用express-fileupload污染EJS的outputFunctionName参数,获取对Node.js服务器的shell访问权限。
“我的文章解释了如何通过EJS获取shell,”Posix对The Daily Swig说到,并补充说这样的攻击并不限于EJS。“由于原型污染可以改变多种上下文的流,简单地添加几个引用的模块可以为攻击者创造许多可能性。”
Posix向express-fileupload的开发人员报告该漏洞后,该漏洞得到了修复。该Node.js程序包的维护人员Richard Girges告诉The Daily Swig,该库的大多数用户可能不受该漏洞的影响。
“该漏洞只影响打开express-fileupload的parseNested选项的用户,”他解释道,“默认情况下,该选项不会打开,因为它用于解决一个非常特定的情况,也就是用于如何处理多部分请求的情况。”
“我们一获悉该漏洞,就发布了补丁(在GitHub上收到初始报告后大约15个小时)。我们还在NPM注册表中对express-fileupload之前版本发布了弃用通知,因为这是通知用户需要升级该程序包的最有效方法。”
根据Posix的说法,EJS仍然容易受到原型污染攻击。
“EJS确实非常努力地将传递给模板的数据与用于渲染模板的选项分离,”EJS库的维护人员Matthew Eernisse告诉The Daily Swig,并补充表示outputFunctionName(在Posix的PoC中被利用的属性)是个选项,不应通过可能受污染的用户输入来设置。
“我们当然无法控制用户选择如何使用EJS,如果他们选择传入未经过滤的用户输入的数据,一切就都白费了。”他补充道。
受到安全研究人员Michał Bentkowski开展的类似工作的启发,在发现该express-fileupload漏洞的过程中,Posix使用NPM模块分析去寻找Node.js应用程序中真实存在的原型污染漏洞。
Posix说到,“在CTF和其他安全比赛中,JavaScript原型或特性中的安全漏洞通常会被修复。但是在真实世界中,这方面的研究几乎没有。”
“受污染的原型会影响应用程序的所有领域,而不受范围约束。我认为,我们需要对这方面的技术开展更多的研究。”
------------------------------------------------------------------------------------------------------------------
文章来源The Daily Swig;转载请注明出处。
关注群智分析平台公众号,获取资讯《Mitsubishi Electric工厂自动化产品漏洞可被用于远程攻击组织》、《社交平台Meetup存在漏洞,用户的Paypal资金可能已遭黑客窃取》。