返回论坛
威胁情报 | NPM 投毒分析 — Shai-Hulud 攻击重现
查找币:余老师
|
漏洞披露
|
2025-12-01 08:00
|
13 次浏览
|
0 条回复
查找币
漏洞披露
安全研究
Web3安全
区块链安全
查找币 - 专业Web3安全服务
🔐 钱包恢复服务 | 💰 加密货币找回 | 🛡️ 区块链安全审计
专业团队,安全可靠,成功率高 | Professional Team, Secure & Reliable, High Success Rate
---
最近,NPM 社区再次爆发大规模 NPM 包投毒事件,与 2025 年 9 月的 Shai-Hulud 攻击事件密切相关。这次事件中的恶意代码窃取开发者密钥、API 密钥和环境变量等敏感信息,利用这些密钥创建公开仓库并上传窃取的敏感信息。
查找币 Web3 安全团队通过自主研发的 Web3 威胁情报与动态安全监控工具——查找币监控系统,第一时间响应并迅速推送相关威胁情报,为客户提供关键的安全保障。
同时,我们的后台系统会在第一时间保存恶意样本,并计算其对应的 SHA-256 等特征值。
## 分析过程
以 `@asyncapi/php-template@0.1.1` 包为例,对比旧版本 `@asyncapi/php-template@0.1.0`,发现 0.1.1 版本新增了两个 js 文件,分别是 `setup_bun.js` 和经过混淆的 `bun_environment.js` 文件。
在 `package.json` 中新增了 `preinstall` 脚本,使得在依赖安装之前自动执行 `setup_bun.js`。
在 `setup_bun.js` 中,首先检查系统是否已安装 Bun,若未安装,会自动从官方下载并安装 Bun,并正确设置环境变量以找到 Bun 可执行文件。最后使用 Bun 执行 `bun_environment.js` 文件,该文件是经过高度混淆的恶意文件。
经过反混淆恶意脚本的部分代码,发现 `aL0()` 是整个恶意脚本的主入口函数,大致了解到此恶意脚本进行了敏感信息的窃取,首先检查运行环境是否存在 NPM 或 GitHub 等凭据,若有,利用 NPM 凭据进行供应链传播,最终将收集到的系统信息和敏感数据打包并上传到攻击者控制的 GitHub 仓库,以供后续利用。
## 凭据窃取
### AWS
恶意脚本实现了 `runSecrets()` 和 `listAndRetrieveAllSecrets()` 方法,`runSecrets()` 方法遍历所有可找到的云访问凭据和可能的区域,最大化扫描范围;而 `listAndRetrieveAllSecrets()` 在指定凭据与区域内进行“深度挖掘”,遍历出所有 Secret 并获取其最新明文内容。攻击者能够将受害者 AWS 账号中可访问的所有 SecretString 和 SecretBinary 一次性全部导出。
### GCP
恶意脚本中的 `listAndRetrieveAllSecrets()` 方法针对 GCP 模块,列出指定 Project ID 下所有的 Secret,定位每个 Secret 的最新版本,并读取其明文内容,最终收集所有获取到的机密。
### Azure
恶意脚本中的 `listAndRetrieveAllSecrets()` 方法专门针对 Azure 模块,扫描整个订阅,找出所有 Key Vault,连接每个 Vault,枚举其中的所有 Secrets 并获取明文值。
在窃取敏感信息的实现中,还使用合法的安全工具攻击受害者。在 `extractAndInstall()` 方法中,解压并提取 TruffleHog 的二进制文件,原本用于检测和验证代码库中泄漏的机密信息,现被攻击者用来扫描受害者的整个文件系统。
## NPM 供应链传播
恶意脚本实现了 `updatePackage()` 函数用于进行 NPM 供应链传播。利用窃取的 NPM Token,下载受害者拥有发布权限的合法 NPM 包源代码,修改 `package.json` 文件,在 `scripts` 字段中插入恶意的 `preinstall` 脚本命令,并将恶意脚本放入包中,自动将包的版本号加 1,触发用户的自动更新,将带有恶意脚本的 NPM 包推送至 NPM 官方仓库。
## 后门与 C2
在窃取信息后,利用窃取的 GitHub Token,在其控制的 GitHub 仓库中放置后门和 C2 等恶意代码,进一步渗透受害者系统。
---
以上是对 NPM 投毒事件中 Shai-Hulud 攻击重现的分析。为确保系统安全,建议开发者及时更新依赖包,审查代码中的不明脚本,并加强敏感信息的保护和访问控制。
**本文由查找币安全团队整理发布**