
近期,全球最流行的JavaScript HTTP客户端库Axios遭遇了严重的供应链攻击,攻击者通过入侵官方维护者账号发布了两个携带恶意代码的版本(axios@1.14.1和axios@0.30.4),这一事件在开发者社区引发了广泛关注。本文将全面剖析此次攻击的技术细节、影响范围、风险等级以及应对措施,帮助开发者和企业有效规避潜在威胁。
2026年3月30日至31日,攻击者通过盗取的Axios维护者npm账号(jasonsaayman),绕过了GitHub Actions CI/CD保护机制,手动发布了两个恶意版本axios@1.14.1与axios@0.30.4。这两个版本并未直接修改Axios的核心代码,而是通过注入隐藏依赖plain-crypto-js@4.2.1的方式植入后门。
攻击时间线显示:
值得注意的是,作为全球周下载量达1.5亿次的基础库,Axios被广泛应用于从React前端到CI/CD工具,再到服务器端API的各类场景中,这使得此次攻击的潜在影响面极为广泛。
攻击者采用了供应链投毒的经典手法,但在技术实现上展现了高度的专业性和隐蔽性:
依赖注入:恶意axios版本在package.json中引入了伪装的加密库plain-crypto-js@4.2.1,该包名仿冒了热门加密库crypto-js
后门机制:plain-crypto-js通过postinstall钩子脚本执行恶意代码,其setup.js文件经过高度混淆,能够:
多平台攻击:恶意载荷针对不同操作系统设计了不同的持久化方式:
隐蔽性设计:攻击者刻意避开了直接修改Axios核心代码的方式,而是通过依赖链引入恶意包,这种"间接攻击"模式大大降低了被常规安全检查发现的概率。
此次攻击的特殊性在于:
特别值得关注的是,
OpenClaw生态在特定场景下可能受到影响:
# 检测本地axios恶意版本
npm list axios | grep -E "1\.14\.1|0\.30\.4"
npm list -g axios | grep -E "1\.14\.1|0\.30\.4"
# 检测恶意依赖
ls node_modules/plain-crypto-js
# macOS
ls -la /Library/Caches/com.apple.act.mond
# Linux
ls -la /tmp/ld.py
# Windows
dir "%PROGRAMDATA%\wt.exe"
# 卸载恶意版本
npm uninstall axios
npm uninstall -g axios
# 安装安全版本
npm install axios@1.14.0
npm install -g axios@1.14.0
# 删除恶意依赖
rm -rf node_modules/plain-crypto-js
# 清理npm缓存
npm cache clean --force
# 安全重装(阻止postinstall脚本执行)
npm ci --ignore-scripts
Linux/macOS:
# 删除恶意文件
rm -f /tmp/ld.py /Library/Caches/com.apple.act.mond
# 检查持久化项
crontab -l | grep -i "sfrclak"
grep -r "sfrclak.com" ~/.bashrc ~/.zshrc /etc/cron*
Windows(管理员权限):
# 删除恶意文件
Remove-Item "$env:PROGRAMDATA\wt.exe" -Force
# 检查计划任务
Get-ScheduledTask | Where-Object {$_.TaskName -like "*wt*"} | Unregister-ScheduledTask -Confirm:$false
Axios投毒事件揭示了现代软件开发中几个关键的安全问题:
依赖管理最佳实践:
npm auditnpm config set ignore-scripts true阻止postinstall脚本执行CI/CD安全加固:
--ignore-scripts参数企业级防护措施:
Axios供应链投毒事件再次敲响了软件供应链安全的警钟。在开源生态日益复杂的今天,任何一环的失守都可能导致灾难性的连锁反应。开发者需要从被动响应转向主动防御,通过最小权限原则、深度验证机制和零信任架构构建多层次防护体系。
正如安全专家所言:"没有绝对安全的软件,只有不断提高的安全意识与防御能力"。此次事件不应仅被视为一次孤立的安全事件,而应作为整个行业反思和改进的契机,推动建立更加健壮、透明的供应链安全生态。