利用Node.js原型污染实现无文件系统RCE攻击
发布日期:2023年3月23日 15:00 UTC
更新日期:2023年3月23日 15:00 UTC
在本篇文章中,我们将介绍一种针对服务器端原型污染(SSPP)的新型利用技术。如果已经检测到SSPP(可能使用了我们的黑盒检测技术),实现远程代码执行(RCE)的下一步就是找到诸如fork()这样的接收器。
–import命令行标志
从Node.js 19.0.0版本开始,–import标志允许指定要加载的模块。在设计Academy实验时,我发现可以使用–import命令行选项执行任意JavaScript代码,而无需依赖文件系统!Michał Bentkowski最初在Chrome中使用类似函数的import()和data:协议在客户端JavaScript中发现了这一点,但这同样适用于Node.js命令行标志。
攻击方式如下:
|
|
在测试时,这同样在NODE_OPTIONS环境中被允许。我们向Node.js开发团队报告了此问题,经过慎重考虑,他们认为这"不是入口点安全问题",因此不违反其威胁模型。
执行任意代码
要执行任意代码并获得文件系统或系统命令的访问权限,必须使用import导入Node模块。以下是使用此技术的演示:
|
|
上述代码使用–import命令行标志加载data URL,该URL使用import加载Node文件系统模块,并将内容为"pwnd"的文件写入/tmp/pwnd。
亲自尝试
我们已升级Academy实验室中的Node.js,以便您可以尝试此技术。最适合使用的实验室是"通过服务器端原型污染实现远程代码执行",因为该实验室使用fork()。使用以下代码应在使用–import标志时创建DNS交互。您能修改有效负载来解决实验室问题吗?
|
|