文章总结: 2026年3月31日Axios库遭遇供应链攻击,攻击者劫持维护者npm账号发布恶意版本1.14.1和0.30.4,通过伪装依赖plain-crypto-js植入跨平台远程控制木马。攻击流程涉及账号劫持、依赖注入、混淆投递、远控植入和自毁灭迹,影响数百万开发者。文档提供检测方法(检查版本和依赖)、修复步骤(降级锁定版本、清理残留、凭证轮换)以及供应链安全建议(启用2FA、依赖审计、CI/CD安全)。 综合评分: 87 文章分类: 供应链安全,漏洞分析,恶意软件,安全运营,应急响应
一亿下载量的 “毒药”:Axios 供应链投毒事件深度解析
原创
OOO OOO
船山信安
2026年4月1日 12:46 湖南
紧急预警:2026 年 3 月 31 日,全球最流行的 JavaScript HTTP 客户端库 Axios(周下载量超 1 亿)遭遇严重供应链攻击,攻击者通过劫持维护者 npm 账号发布恶意版本,植入跨平台远程控制木马(RAT),影响数百万开发者与企业系统。本文将完整复盘攻击流程、技术细节、自查方法与防御策略,帮你全面掌握这起影响深远的安全事件。
一、事件速览:48 小时的 “完美犯罪”
2026 年 3 月 30-31 日,攻击者精心策划了一场针对 Axios 的供应链投毒攻击,整个流程如下:
| 时间线 (UTC) | 关键事件 | | — | — | | 3 月 30 日 05:57 | 发布[email protected](良性版本,建立信任历史) | | 3 月 30 日 23:59 | 发布[email protected](恶意版本,含 postinstall 脚本) | | 3 月 31 日 00:00-00:39 | 劫持 Axios 维护者 npm 账号,手动发布两个恶意版本:1.14.1(1.x 分支)、0.30.4(0.x 分支) | | 3 月 31 日 03:00 | npm 官方紧急下架恶意版本,发布安全公告 | | 3 月 31 日 08:00 | Axios 团队发布官方声明,确认账号被劫持,提供修复方案 |
核心影响:恶意版本在线约 3 小时,期间所有执行npm install axios且未锁定版本的用户均可能中招,涉及 Windows、macOS、Linux 全平台。
二、攻击链全解析:五步 “投毒” 流程
攻击者构建了一条账号劫持→依赖注入→混淆投递→远控植入→自毁灭迹的完整攻击链,环环相扣,极具隐蔽性。
1. 账号劫持:攻破 “守门人”
攻击者通过未知手段(推测为钓鱼或凭证窃取)成功入侵 Axios 核心维护者的 npm 账号,修改邮箱并绕过 GitHub Actions+OIDC 的可信发布流程,获得手动发布权限。这是整个攻击的起点与关键,没有账号控制权,后续一切操作都无从谈起。
2. 依赖注入:埋下 “暗桩”
恶意版本在package.json中添加了一个幽灵依赖(phantom dependency):
"dependencies":{ "plain-crypto-js":"^4.2.1"}
这个包从未被 Axios 源码 import/require,唯一作用是在npm install时触发postinstall钩子执行恶意脚本。正常 Axios 通过 GitHub Actions 自动发布,而恶意版本是手动发布,绕过了自动化安全校验。
3. 混淆投递:伪装 “良药”
攻击者采用了双重伪装策略:
- 先发布良性版本[email protected],建立发布历史,避免 “全新包” 警报
- 恶意包命名模仿知名库crypto-js,降低警惕性
- 脚本使用混淆技术,增加静态分析难度
- 当用户执行npm install时,恶意依赖被自动安装并触发setup.js执行。
4. 远控植入:释放 “木马”
setup.js是攻击核心,执行以下操作:
5. 自毁灭迹:抹去 “痕迹”
最狡猾的一步 —— 攻击完成后,恶意脚本会删除自身(setup.js)和恶意package.json,用良性版本文件替换,制造 “未被篡改” 的假象,清理日志,防止被事后溯源。
这导致受害者检查node_modules时完全看不到异常,大大增加了检测难度。
三、技术细节:RAT 如何 “接管” 你的设备
1. 平台差异化攻击
攻击者针对不同系统设计了特定 payload:
| 系统 | 投递路径 | 伪装手段 | 恶意行为 |
| — | — | — | — |
| Windows | %TEMP%\updater.exe | 伪装系统更新程序 | 建立自启动,窃取浏览器凭证、SSH 密钥 |
| macOS | /Library/Caches/com.apple.act.mond | 伪装 Apple 系统缓存 | 利用 launchd 持久化,监控键盘输入 |
| Linux | /tmp/.systemd-update | 隐藏文件,设置 + wx 权限 | 植入 cron 定时任务,回传系统信息 |
2. C2 通信机制
恶意脚本通过 HTTP 协议与 C2 服务器通信,传输系统信息(OS 版本、CPU 架构、用户名)、已安装软件列表、网络配置还有窃取的敏感数据
C2 服务器http://sfrclak.com:8000在事件曝光后已被关停,但攻击者可能已收集大量敏感信息。
四、如何自查:你是否已 “中毒”?
快速检测三步法
检查 Axios 版本:
bash(命令行) 运行 npmlist axios 查看当前版本,若显示1.14.1或0.30.4,则已中招。
检查恶意依赖:
bash(命令行) 运行 lsnode_modules/plain-crypto-js 存在则可能被感染
扫描系统残留:
深度排查建议
- 检查近期npm install日志,查找plain-crypto-js相关记录
- 监控网络连接,查看是否有异常 IP 通信
- 检查系统自启动项、定时任务,删除不明条目
五、紧急修复:四步 “解毒” 指南
1. 降级并锁定版本
bash(命令行) 运行
- 1.x分支用户(推荐)
[email protected]
-
0.x分支用户
[email protected]
在package.json中添加覆盖配置,防止间接依赖解析到恶意版本:
{"dependencies":{ "axios":"1.14.0" }, "overrides":{// npm 8+ "axios":"1.14.0" }, "resolutions":{// yarn "axios":"1.14.0" }}
2. 清理恶意残留
bash(命令行) 运行
- 删除恶意依赖
npmuninstall plain-crypto-js
- 清理npm缓存
npmcache clean–force
手动删除各平台残留文件,必要时重装系统(针对已确认感染的设备)。
3. 凭证轮换
立即更换以下敏感信息,防止攻击者进一步利用:
- npm/GitHub 令牌
- 云服务密钥
- SSH 密钥
- 数据库密码
- 浏览器保存的密码
4. 强化安全配置
启用 npm 2FA(双因素认证)
CI/CD 中添加–ignore-scripts参数,禁用自动执行脚本
使用私有 npm 镜像,审核后再同步外部包
定期审计依赖树,使用snyk等工具检测风险
六、供应链安全启示录
Axios 事件再次敲响警钟:开源软件供应链已成为黑客攻击的 “重灾区”,即使是周下载量超 1 亿的顶级库也无法幸免。
开发者应做的 3 件事
版本锁定:在package.json中明确指定依赖版本,使用package-lock.json/yarn.lock
脚本管控:默认使用–ignore-scripts安装依赖,仅信任必要脚本
依赖审计:定期执行npm audit,使用 Snyk、Dependabot 等工具监控风险
企业级防御建议
| 防御层面 | 关键措施 | | — | — | | 依赖治理 | 建立内部镜像仓库,实施包审核机制 | | CI/CD 安全 | 启用工作流签名,限制发布权限,使用不可变基础设施 | | 运行时防护 | 部署行为检测工具,监控异常网络连接与文件操作 | | 应急响应 | 制定供应链攻击应急预案,定期演练 |
七、总结:安全没有 “免死金牌”
Axios 投毒事件是一次典型的供应链攻击,攻击者利用开源生态的信任机制,以最小成本获取最大攻击面。它提醒我们:在享受开源便利的同时,必须时刻保持警惕,不能将安全完全寄托于第三方。
行动清单:
- 立即检查并修复 Axios 版本
- 审计项目依赖树,清理可疑包
- 加强账号安全,启用 2FA
- 建立依赖安全管理制度
记住:安全是一场持续的战争,不是一次性的防御。在代码的世界里,最危险的往往不是那些显而易见的漏洞,而是隐藏在 “信任” 背后的暗箭。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:船山信安 OOO OOO《一亿下载量的 “毒药”:Axios 供应链投毒事件深度解析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论