NPM 投毒分析 — Shai-Hulud 攻击重现

2025年11月26日 20:20:15 加密货币 投稿:互联网
/

欧易OKX交易所


全球三大交易所之一,注册领价值6,0000元数币盲盒

APP下载  官网注册

作者:Joker & Ccj1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

背景

近日,NPM 社区再次爆发大规模 NPM 包投毒事件,本次事件与 2025 年 9 月的 Shai-Hulud 攻击事件高度相关,本次的 NPM 包中的恶意代码窃取开发者密钥和 API 密钥以及环境变量等敏感信息,利用密钥创建公开仓库并上传这些窃取的敏感信息。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

慢雾(SlowMist) 自主研发的 Web3 威胁情报与动态安全监控工具 MistEye 第一时间响应,迅速推送相关威胁情报,为客户提供关键的安全保障。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

同时,后台会在第一时间保存恶意样本,并计算其对应的 SHA-256 等特征值。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

分析过程

以 @asyncapi/php-template@0.1.1 包为例,在对比旧版本 @asyncapi/php-template@0.1.0 时可以发现,0.1.1 版本比 0.1.1 版本新增了两个 js 文件,为 setup_bun.js 和经过混淆的 bun_environment.js 文件。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

在 package.json 中新增了 preinstall 脚本,使得在依赖安装之前会自动执行 setup_bun.js。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

在 setup_bun.js 中,首先会去检查系统是否已经安装了 Bun,如果未安装,会自动从官方下载并安装 Bun,并且正确设置环境变量以便找到 Bun 可执行文件。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

最后使用 bun 执行 bun_environment.js 文件,该 bun_environment.js 是一个经过高度混淆的恶意文件。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

经过将恶意脚本的部分代码反混淆后,可知 aL0() 是整个恶意脚本的主入口函数,大概的可以看出此恶意脚本进行了敏感信息的窃取,会先对运行环境进行检查是否存在 NPM 或 GitHub 等凭据,若检测到这些凭据,它会利用 NPM 凭据进行供应链传播,并且所有收集到的系统信息和敏感数据最终会被打包并上传到攻击者控制的 GitHub 仓库,用于后续利用。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

凭据窃取1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

AWS:该恶意脚本实现 runSecrets() 和 listAndRetrieveAllSecrets() 方法,runSecrets() 方法会遍历所有能找到的云访问凭据以及所有可能的区域,最大化扫描范围;而 listAndRetrieveAllSecrets() 则在指定凭据与区域内进行“深度挖掘”,遍历出所有 Secret,并获取其最新明文内容。两者配合后,攻击者能够将受害者 AWS 账号中可访问的所有 SecretString 和 SecretBinary 一次性全部导出。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

而 enumerateValidCredentials() 方法主要用来全面搜集所有能用的云服务密钥。它会从环境变量、配置文件、CLI 登录等各种来源逐一尝试,凡是能成功验证的凭据都会被记录下来,供后续窃取云端机密时使用。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

GCP:该恶意脚本中实现的另一个 listAndRetrieveAllSecrets() 方法主要是针对 GCP 模块,它会先根据指定的 Project ID 列出该 GCP 项目下所有的 Secret,然后直接定位每个 Secret 的最新版本,并调用 accessSecretVersion 读取其明文内容。最终将所有获取到的机密(如 API Key、数据库密码等)逐一收集起来。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

Azure:该恶意脚本中实现的另一个 listAndRetrieveAllSecrets() 方法主要专门针对 Azure 模块。它会先通过 Azure Resource Manager 扫描整个订阅,找出所有 Key Vault;随后使用获得的凭据逐一连接每个 Vault;最后枚举其中的所有 Secrets,并调用 getSecret 获取每个机密的明文值。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

在窃取敏感信息的实现中,还使用合法的安全工具来攻击受害者。在 extractAndInstall() 方法中,解压并提取出 TruffleHog 的二进制文件,TruffleHog 本是用于在代码库中检测和验证泄漏的机密信息,如 API 密钥和凭证,则被攻击者使用来对受害者的整个文件系统进行扫描。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

NPM 供应链传播

该恶意脚本实现了个 updatePackage() 函数用于进行 NPM 供应链传播。首先使用窃取的 NPM Token,下载受害者拥有发布权限的合法 NPM 包的源代码,然后修改 package.json 文件,在 scripts 字段中插入恶意的 preinstall 脚本命令。同时将恶意脚本放入包中,自动将包的版本号加 1,以触发用户的自动更新,将带有恶意脚本的 NPM 包推送到 NPM 官方仓库中。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

后门与 C2

在窃取完信息后,将利用窃取的 GitHub Token 在其账号下创建一个随机名称的仓库,并获取注册令牌,将受害者的电脑伪装成该仓库的自托管 GitHub Actions Runner。随后,攻击者在仓库中植入恶意工作流,使得任何被触发的 Actions 任务都会在受害者机器上执行,从而实现远程代码执行。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

并把这些窃取的信息经过双重 base64 加密上传到创建的仓库里,这些创建的仓库的描述都是“Sha1-Hulud: The Second Coming.”。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

经过解密后可以看到用户泄漏的敏感数据。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

总结

本次的 NPM 仓库投毒结合了蠕虫和自托管运行程序的长期持久性且利用了 TruffleHog 进行攻击。慢雾安全团队建议开发者在构建和发布新迭代时,应采用依赖包版本锁定策略。若依赖包存在必要的安全或功能更新,应通过内部严格的安全审计流程进行更新,并同步更新锁定版本,避免盲目更新引入新的风险。1WT比特币币圈炒币新手入门基础知识学习教程 - 币学堂

声明:币学堂所有作品(图文、音视频)均来源互联网,观点仅代表作者本人,绝不代表本站赞同其观点或证实其描述。
提示:投资有风险,入市须谨慎。本资讯不作为投资理财建议。