CVE-2020-7699:NodeJS模块代码注入

CVE-2020-7699:NodeJS模块代码注入
文章图片
研究人员在下载量超700万的Node.js模块中发现其存在安全漏洞 , 攻击者利用该漏洞可以发起DoS攻击或完全获取远程shell访问权限 。
该漏洞CVE编号为CVE-2020-7699 , 位于express-fileuploadnpm组件中 , 该组件从npm处下载量超过730万 , 其中不含有从GitHub、镜像网站和其他克隆库中下载的 。
该漏洞属于PrototypePollution(原型污染)漏洞类型 , 这是JS代码中的常见漏洞类型 。 因为JS是基于原型的语言 , 语言中的每个对象、函数和数据结构都有Prototype特征 , 可以通过"_proto__"进行修改 。
使用这种设计漏洞的原型攻击通过注入不相适应的对象类型到现有的对象中来引发错误 , 导致DoS攻击 。
利用现有原型的攻击
由于express-fileupload提供的"parseNested"特征使得现实的攻击成为可能 。 启用"parseNested"选项后 , 其负责将上传的JSON数据转化为对象 。
安全研究人员Posix称express-fileupload模块提供了[Node.js]应用中上传和管理文件的多个选项 , 其中parseNested负责将参数降维 。
"parseNested"选项如下图所示:
CVE-2020-7699:NodeJS模块代码注入
文章图片
有漏洞的express-fileupload配置
在"Content-Disposition"HTTPheader中提供一个简单的payload , 攻击者就可以提供一个"__proto__.toString"值来触发攻击 。
CVE-2020-7699:NodeJS模块代码注入
文章图片
可以触发原型污染攻击的样本payload
"_proto__"可以影响JS的原型特征 , 因为继承了所有JS对象和结构 。
如果Object.prototype.toString可以被污染 , 就会引发错误 , 对每个请求 , [sic]会返回500错误 。
通过逆向shell实现远程代码执行
此外 , 攻击者还可以在有漏洞的系统上获取shell 。 该漏洞利用了有漏洞的express-fileupload版本 , 使用了模板引擎EJS(嵌入式JS模板) 。
假设你的应用使用了EJS来分析上传的数据 , 而没有进行额外的检查 。 那么攻击者就可以发送一个HTTP请求来覆写EJS的outputFunctionName选项 。
CVE-2020-7699:NodeJS模块代码注入
文章图片
远程代码执行的EJSpayload
上面的payload中利用了express-fileupload中的原型污染 , 让EJS来启动Node.js子进程 。 新启动的进程可以派生一个逆向shell到攻击者的计算机 。
【CVE-2020-7699:NodeJS模块代码注入】建立连接后 , 攻击者就可以在被黑的服务器上执行任意代码 。
通过EJSpayload实现shell访问
漏洞影响
研究人员称该漏洞并不影响所有用户 。 只有启动了"parseNested"选项的应用受到该原型污染漏洞的影响 。
此外 , 为了实现完全的shell访问和远程代码执行 , 有漏洞的express-fileupload和EJS库是必备条件 。 但需要注意的是EJS并不是唯一实现shell访问的唯一库 。 在接收到研究人员的报告后 , express-fileupload很快就修复了该漏洞 , 用户可以更新到npmv1.1.9 。
参考及来源:https://www.bleepingcomputer.com/news/security/nodejs-module-downloaded-7m-times-lets-hackers-inject-code/
【来源:嘶吼RoarTalk】
声明:转载此文是出于传递更多信息之目的 。 若有来源标注错误或侵犯了您的合法权益 , 请作者持权属证明与本网联系 , 我们将及时更正、删除 , 谢谢 。 邮箱地址:newmedia@xxcb.cn


    推荐阅读