Blitz.js中的原型污染导致远程代码执行

Blitz.js是一个JavaScript Web应用程序框架,修复了一个危险的原型污染漏洞,该漏洞可能导致Node.js服务器上的远程代码执行(RCE)。原型污染是一种JavaScript漏洞,允许攻击者利用编程语言的规则来改变应用程序的行为并以各种方式破坏它。新的错误,由Sonar的研究人员发现并报告,攻击者可以操纵Blitz.js应用程序中的代码来创建反向shell并在服务器上运行任意命令。

“Blitz.js是一个即将在GitHub上获得关注的JS框架,”Sonar的漏洞研究员Paul Gerste说。“我们选择它是为了帮助保护其代码库并研究现实世界的漏洞。”

Blitz构建在Next.js(一个基于React的框架)之上,并添加了组件以将其变成一个全栈Web开发平台。

Blitz.js的广告功能之一是它的“零API”层,它允许客户端通过简单的函数调用服务器端业务逻辑,而无需编写API代码。

Blitz.js在后台对服务器进行RPC调用,并将响应返回给客户端函数调用。

“Blitz.js在Next.js(以及其他功能)之上添加了一个RPC层,该层使用superjson来反序列化来自传入请求的数据。该漏洞完全在superjson内部,”Gerste说。

作为JSON的扩展版本,superjson增加了对日期、正则表达式和循环依赖的支持。循环依赖特性允许JSON规范引用属性名称,从而导致原型漏洞。攻击者可以使用这些属性名称来更改服务器上正在运行的代码。

Gerste发现了一系列可以通过原型污染漏洞触发并导致RCE的漏洞利用。

首先,向服务器发送一个污染的JSON请求,这会触发Blitz.js的路由机制来加载一个带有污染原型的JavaScript文件。这允许攻击者使用恶意JavaScript对象执行任意代码。

理想情况下,攻击者会在服务器上创建并运行一个文件。但是Blitz.js不支持上传功能。但是,它有一个CLI包装脚本,它使用JavaScript的spawn()函数来启动一个新进程。

攻击者可以使用此函数启动CLI进程并在服务器上运行任意命令。

这个漏洞特别危险的地方在于它可以在没有任何身份验证的情况下触发,这意味着任何可以访问Blitz.js应用程序的用户都可以发起RCE攻击。

“攻击者将拥有与易受攻击的应用程序相同级别的特权,”Gerste说。“因此,如果应用程序以root身份运行,攻击者也将拥有root权限。”

原型污染错误通常以非常复杂的方式起作用。例如,在Blitz.js的情况下,CLI包装器对象本身并不容易受到攻击,但可能会被原型污染错误滥用。

“这种攻击技术利用了一种本身不是漏洞的代码模式,”Gerste说。“原型污染可以非常侵入性地影响目标应用程序,并且需要大量工作才能摆脱所有可能受原型污染影响的代码。”

Gerste 在他写的bug中给出了一些可以强化JavaScript应用程序免受原型污染的一般性建议,包括冻结Object.prototype或在Node.js中使用--disable-proto=delete标志。

“我认为许多JavaScript开发人员仍然不知道原型污染,”Gerste说。“我没有看到开发人员经常使用我们在文章中推荐的模式。通过我们的博客文章,我们试图帮助教育JavaScript开发人员并分享这些知识。”

发表评论

评论已关闭。

相关文章