事件概述
2026年5月14日,查找币安全团队威胁情报监控系统捕获到 npm 生态中广泛使用的 Node.js IPC 工具包 node-ipc 出现三个异常发布版本:9.1.6、9.2.3 和 12.0.1。该组件周均下载量约53万次,直接依赖项目超过400个,在 Node.js 生态中覆盖面极广,本次投毒事件影响面不容忽视。
攻击链路分析
恶意版本特征
事件链路显示,三个恶意版本的 node-ipc.cjs 文件尾部均新增了约80KB的混淆代码,具备凭据收集与 DNS 外传能力。经反混淆比对确认,9.1.6、9.2.3 和 12.0.1 的入口代码字节级一致,表明攻击者采用了统一的恶意载荷。
入侵方式
本次投毒属于正版包遭入侵场景,攻击者未创建伪造包名,而是沿用 node-ipc 的真实命名空间、仓库元数据与作者信息,通过官方发布链路向用户正常依赖分发了受污染版本。受害者项目在 require("node-ipc") 路径加载时会静默触发恶意流程。
恶意行为流程
当依赖引入后,恶意代码会执行以下操作:
- 凭证窃取:窃取 AWS 云凭证、SSH 私钥、系统环境变量(含 API 密钥与数据库密码)
- 主机指纹收集:获取主机指纹及
/etc/hosts等敏感系统信息 - 数据外传:通过 DNS 隧道分片外传至攻击者控制的远程服务器
值得注意的是,该流程在依赖引入时不会自动执行(该包未配置 preinstall/install/postinstall/prepare 等生命周期脚本),风险点在于后续流程中的实际代码加载行为,例如构建脚本、测试运行或应用运行时执行了 require("node-ipc")。
版本历史与异常行为
回溯版本历史,该组件的异常活动特征明显:
| 版本 | 发布时间 | 发布者 | 备注 |
|---|---|---|---|
| 12.0.0 | 2024-08-12 | riaevangelist(原作者) | 正常版本 |
| 9.1.6 | 2026-05-14 | atiertant | 恶意版本 |
| 9.2.3 | 2026-05-14 | atiertant | 恶意版本 |
| 12.0.1 | 2026-05-14 | atiertant | 恶意版本 |
该项目在 12.0.0 发布后陷入长达21个月的停更期,直到近期突然由另一个名为 atiertant(a.tiertant@atlantis-software.net)的账号推送三个恶意版本。尽管该账号目前位列 node-ipc 的维护者名单,但在本次投毒事件之前,其从未有过该组件的发布历史。
这种“高下载量休眠项目 + 长期停更后由新凭证突发推送”的异常行为,是 NPM 供应链攻击的典型范式。其幕后成因通常指向两种可能:
atiertant的账号凭证遭攻击者窃取- 该账号本身就是攻击者通过某种手段被特意添加进维护者列表
与历史事件的关联
该事件与2022年历史投毒事件(CVE-2022-23812)存在技术家族相似性,但不应直接归入同一漏洞单元。历史事件的主要风险在于破坏性行为,而本轮样本的主线为凭据窃取与隐蔽外传,攻击目的更加明确——获取高价值凭证数据。
技术细节深度解析
样本差异与入口注入
本轮投毒覆盖版本为 node-ipc@9.1.6、node-ipc@9.2.3、node-ipc@12.0.1,均为2026年5月14日发布。三者的官方入口文件内容高度一致,且保留 node-ipc 真实包元信息。
恶意逻辑被注入到 node-ipc.cjs(CommonJS 入口),而 ESM 入口 node-ipc.js 保持干净,说明攻击者只在 CommonJS 入口上做了投毒。package.json 中的关键字段如下:
{
"main": "node-ipc.cjs",
"exports": {
".": {
"import": "./node-ipc.js",
"require": "./node-ipc.cjs"
}
}
}
由此可见,只有 require("node-ipc") 的加载路径会进入污染代码,构成实质攻击入口。
混淆还原与关键字符串解码
反混淆后可见三类关键技术:
- 控制流平坦化:使用
while(!![]) { switch-case }结构打乱执行顺序 - 字符串表索引化:真实文本被统一替换为
_0x查询函数 - 自定义 Base-16 编码函数:将16字符表映射为可打印字符串,恢复后可见外传域名与加密材料
解码样例:
2647M2M6P64656M2G637H→bt.node.js3786M216G75727563747164796360727P66796465627M2M6→ 外传域名相关字符串
文件哈希信息
node-ipc-9.1.6.tgz
- SHA1:
58ae7338960ef525d7c655023d7c81e3ddb283d6 - SHA256:
c2f4dc64aec4631540a568e88932b61daebbfb7e8281b812fa01b7215f9be9ea
node-ipc-12.0.1.tgz
- SHA1:
fe5d107b9d285327af579259a32977c4f475fa26 - SHA256:
78a82d93b4f580835f5823b85a3d9ee1f03a15ee6f0e01b4eac86252a7002981
恶意 node-ipc.cjs
- MD5:
d1ba0419cb5e5de91b9b58e87b8322e1 - SHA1:
ab7388363936bf527afd4173b5728c7cdbdd01ab - SHA256:
96097e0612d9575cb133021017fb1a5c68a03b60f9f3d24ebdc0e628d9034144
防护建议
查找币安全团队建议相关开发者和项目团队立即采取以下措施:
- 版本锁定:立即检查项目中
node-ipc的版本,避免使用9.1.6、9.2.3和12.0.1,回滚至已知安全版本(如12.0.0) - 凭证轮换:若项目在受影响期间运行过,立即轮换所有 AWS 凭证、SSH 私钥及数据库密码
- 环境审计:检查系统环境变量是否暴露敏感信息,审计
/etc/hosts文件变更 - 依赖审查:检查项目依赖树,确认是否存在间接依赖
node-ipc的组件 - 监控告警:启用依赖包的版本变更监控,对长期停更后突然发布新版本的项目保持警惕
总结
本次 node-ipc 投毒事件再次敲响供应链安全的警钟。攻击者通过入侵维护者账户或利用维护者权限,向广泛使用的开源组件注入恶意代码,窃取高价值凭证数据。这种攻击模式隐蔽性强、影响面广,对 Web3 和传统开发项目均构成严重威胁。
查找币监控系统已捕获本次攻击并触发高危告警,相关客户已收到通知。我们建议所有 npm 生态参与者加强依赖管理,建立版本变更监控机制,共同维护供应链安全。
本文由查找币安全团队整理发布