axios投毒下openclaw更新行为的风险分析报告
1. 报告信息
• 报告名称:axios投毒下openclaw更新行为的风险分析报告 • 报告日期:2026-03-31 • 分析对象: openclaw官方安装与更新路径• 分析目标:判断在 axios@1.14.1被下架前,安装或升级 OpenClaw 的行为是否会拉取到被投毒版本
2. 执行摘要
本次分析结论如下:
1. OpenClaw 官方推荐的全局安装与升级路径,明确使用 openclaw@latest。2. OpenClaw 并未在自身逻辑中显式写死 axios@latest,但其传递依赖链会在安装时按 semver 规则解析axios的兼容最新版本。3. 依赖链为: openclaw->@line/bot-sdk@^10.6.0->axios@^1.7.4。4. axios@^1.7.4覆盖1.14.1,因此在恶意版本仍存在于 npm registry 的时间窗内,官方全局安装或升级 OpenClaw 的行为,高概率会解析并安装axios@1.14.1。5. 结合公开事件时间线,风险时间窗为北京时间 2026-03-31 08:21至约2026-03-31 11:15。6. openclaw issue #58140 报告的安装异常现象,与本次 axios 投毒事件的行为特征高度吻合。
结论性判断:
在北京时间 2026-03-31 08:21 至约 11:15 之间,通过 OpenClaw 官方文档推荐方式执行安装或升级,存在较高概率拉取到被投毒的 axios@1.14.1。
3. 分析范围与问题定义
本报告围绕以下问题展开:
1. OpenClaw 的升级逻辑是否会拉取当时 registry 中的最新兼容依赖。 2. OpenClaw 对 axios的依赖是否为直接依赖,还是通过@line/bot-sdk间接引入。3. 在恶意 axios@1.14.1上架但尚未下架的时间窗内,安装或升级 OpenClaw 是否可能命中恶意版本。4. issue #58140是否与本次事件存在时间和行为上的相关性。
4. 关键事实与证据
4.1 OpenClaw 官方更新行为
OpenClaw 官方更新文档显示:
• 官网安装器在全局安装场景下使用 npm install -g openclaw@latest• 文档明确给出全局更新命令 npm i -g openclaw@latest• 文档同时给出 pnpm add -g openclaw@latest• openclaw update在 npm 或 pnpm 安装场景下,会尝试通过包管理器执行更新
这说明其官方推荐路径并不是安装某个固定版本,而是始终以 openclaw@latest 为入口。
来源:
• OpenClaw 更新文档
4.2 OpenClaw 与 axios 的依赖链
公开包元数据显示,OpenClaw 相关发布版本依赖 @line/bot-sdk ^10.6.0。
而 @line/bot-sdk@10.6.0 的已发布 package.json 中声明:
{"optionalDependencies":{"axios":"^1.7.4"}}这意味着:
• axios并非 OpenClaw 顶层直接锁定依赖• 它是由 @line/bot-sdk通过optionalDependencies引入• 只要安装时未显式 --omit=optional,npm 默认会尝试安装该依赖
来源:
• openclaw 包元数据 • @line/bot-sdk@10.6.0 package.json • npm package.json 文档
4.3 npm 对兼容版本的解析行为
npm 对依赖范围按 semver 规则解析。^1.7.4 会接受高于等于 1.7.4 且低于 2.0.0 的版本,因此 1.14.1 在该范围内。
对 fresh install 或全局安装场景而言,若未使用可发布的锁定机制来固定传递依赖,npm 会在安装时解析符合范围的最新版本。普通 package-lock.json 主要用于应用本地安装,不等同于发布到 registry 后对消费者安装过程的强制传递锁定;若要将依赖解析结果随包发布并影响消费者,通常需要 npm-shrinkwrap.json。
基于公开材料,未发现 OpenClaw 官方更新文档中存在任何 --omit=optional、依赖冻结、或传递依赖锁定保护措施。
来源:
• npm package-locks 文档 • npm shrinkwrap 文档 • npm package.json 文档
4.4 axios 投毒事件时间线
根据 StepSecurity 对事件的公开分析:
• axios@1.14.1于2026-03-31 00:21 UTC发布• 约于 2026-03-31 03:15 UTC被下架• 下架后, latest回退至1.14.0
换算为北京时间:
• 发布时点: 2026-03-31 08:21• 下架时点:约 2026-03-31 11:15
同时,StepSecurity 指出恶意版本通过新增依赖及 postinstall 机制落地恶意载荷。
来源:
• StepSecurity: axios compromised on npm
5. 技术分析
5.1 OpenClaw 是否“拉 latest”
需要区分两个层次:
1. OpenClaw 顶层安装入口是否拉 latest2. 传递依赖 axios是否会在安装时解析到“当时最新兼容版本”
对第一个问题,结论明确:是。官方文档使用的是 openclaw@latest。
对第二个问题,严格来说不是“代码里直接写 axios@latest”,但实际效果接近“拉当时兼容范围内的最新版本”。原因是:
• OpenClaw 依赖 @line/bot-sdk• @line/bot-sdk@10.6.0声明axios@^1.7.4• ^1.7.4会覆盖1.14.1• 在全局安装或升级场景中,包管理器会根据当前 registry 状态解析该范围
因此,从风险视角看,OpenClaw 的官方全局更新路径对 axios 呈现出“安装时跟随 registry 当前兼容最新版本”的行为特征。
5.2 风险是否来自仓库 lockfile
仓库中的 pnpm-lock.yaml 只对仓库源码安装和开发环境有较强参考意义。它并不能自动代表通过 npm i -g openclaw@latest 安装 npm 已发布包时,消费者环境中的传递依赖一定被锁死。
也就是说:
• 对源码仓库执行受 lockfile 约束的安装,风险相对较低 • 对官方文档推荐的全局安装与升级路径,风险显著更高
这也是为什么本报告重点判断官方安装器和全局更新行为,而不是仅凭仓库 lockfile 下结论。
5.3 optionalDependencies 是否会默认安装
会,除非显式省略。
@line/bot-sdk 中的 axios 不是普通 dependencies,而是 optionalDependencies。但根据 npm 官方文档,optional 依赖默认仍会安装,只有在使用 --omit=optional 等配置时才会跳过。
由于 OpenClaw 文档中未体现此类保护参数,因此应按“默认会安装”进行风险判断。
6. 风险窗口判断
6.1 时间窗口
按照公开时间线,本次风险窗口为:
• 开始:北京时间 2026-03-31 08:21• 结束:约北京时间 2026-03-31 11:15
6.2 结论表
axios@1.14.1 | ||
2026-03-31 08:21 | ||
2026-03-31 08:2111:15 | 1.14.1 | |
2026-03-31 11:15 之后 |
7. 分场景风险评估
7.1 高风险场景
• 通过官网安装器执行首次安装 • 使用 npm i -g openclaw@latest• 使用 pnpm add -g openclaw@latest• 执行 openclaw update,且当前安装方式为 npm 或 pnpm 全局安装
这些场景共同特点是:
• 以 openclaw@latest为入口• 发生新的依赖解析 • 没有看到对 optionalDependencies的显式抑制
7.2 相对低风险场景
• 基于源码仓库、且严格遵循现有 lockfile 的安装 • 已在风险窗口之前完成安装,之后未重新解析依赖
但应注意:
• 如果源码路径执行了重新解析依赖的安装行为,仍不能绝对排除风险 • 若 lockfile 被刷新、删除,或安装命令未严格冻结,也可能重新命中恶意版本
8. 与 issue #58140 的相关性
openclaw issue #58140 报告称,用户运行官方 PowerShell 安装命令后,Windows Defender 识别到恶意批处理文件和启动项相关风险。
该 issue 与本次事件具有以下一致性:
• 时间发生在 2026-03-31• 场景是官方安装命令 • 症状与恶意安装后持久化行为相符
因此,该 issue 可以视为本次风险链路的强支持性案例。
需要说明的是:
• 该 issue 能够支持“事件已经在 OpenClaw 安装场景中实际暴露” • 但其本身并不能替代依赖解析链和时间窗分析 • 根因判断仍应以更新文档、依赖声明、npm 解析规则和 axios 事件时间线为主
9. 风险结论
综合以上证据,可以得出如下结论:
1. OpenClaw 官方升级逻辑并非显式固定安全版本,而是基于 openclaw@latest执行安装或升级。2. OpenClaw 对 axios的引入来自@line/bot-sdk@10.6.0的optionalDependencies,其版本范围为^1.7.4。3. 在 npm 默认行为下,该范围会在安装时解析到兼容范围内的最新版本。 4. axios@1.14.1处于兼容范围内,且在北京时间2026-03-31 08:21至约11:15间曾短暂存在于 registry。5. 因此,在该时间窗内使用 OpenClaw 官方推荐方式执行安装或升级,存在较高概率拉取到被投毒的 axios@1.14.1。
最终结论:
OpenClaw 的升级逻辑不是“直接拉 axios@latest”,但其实际效果在本次事件中等价于“在安装时解析到了 registry 中当时最新的兼容 axios 版本”,因此在恶意版本上线窗口内具有明确的供应链暴露风险。
10. 应急建议
建议立即对以下对象进行排查:
• 北京时间 2026-03-31 08:21至约11:15期间安装或升级过 OpenClaw 的主机• 同时间段内执行过自动化构建、CI、打包、部署的节点 • 通过官网安装器、PowerShell 安装命令、 npm i -g openclaw@latest、pnpm add -g openclaw@latest、openclaw update执行更新的设备
建议优先执行以下措施:
1. 检查是否安装过 axios@1.14.1、axios@0.30.4、plain-crypto-js@4.2.12. 对命中机器按“恶意 postinstall可能已执行”处理3. 检查启动项、计划任务、异常批处理文件和可疑持久化痕迹 4. 轮换可能暴露的凭据、令牌和会话 5. 对受影响机器开展主机取证与恶意文件清理
使用下面提示词让智能体自查(ref:慢雾):
参考下面这个方法排查一遍我们的环境是否存在被投毒的 axios@1.14.1 与 axios@0.30.4,及恶意模块 plain-crypto-js,不能漏,确保排查全面:Check for the malicious axios versions in your project:npm list axios 2>/dev/null | grep -E "1\.14\.1|0\.30\.4"grep -A1 '"axios"' package-lock.json | grep -E "1\.14\.1|0\.30\.4"Check for plain-crypto-js in node_modules:ls node_modules/plain-crypto-js 2>/dev/null && echo "POTENTIALLY AFFECTED"If setup.js already ran, package.jsoninside this directory will have been replaced with a clean stub. The presence of the directory is sufficient evidence the dropper executed.Check for RAT artifacts on affected systems:# macOSls -la /Library/Caches/com.apple.act.mond 2>/dev/null && echo "COMPROMISED"# Linuxls -la /tmp/ld.py 2>/dev/null && echo "COMPROMISED" "COMPROMISED"# Windows (cmd.exe)dir "%PROGRAMDATA%\wt.exe" 2>nul && echo COMPROMISED11. 分析边界与说明
本报告基于公开资料进行分析,结论针对“官方推荐安装与升级路径”的风险行为。
以下内容属于合理推断而非直接源码证明:
• pnpm add -g openclaw@latest在风险窗口内的解析结果与 npm 全局安装保持同类风险特征• 官方发布包未采用足以冻结该传递依赖解析结果的发布锁定机制
这些推断建立在官方文档命令、npm 解析规则、已发布依赖元数据和公开事件时间线的一致性基础上,具有较高可信度。
12. 参考资料
1. OpenClaw 更新文档 2. OpenClaw 仓库 3. OpenClaw issue #58140 4. openclaw 包元数据 5. @line/bot-sdk@10.6.0 package.json 6. npm package.json 文档 7. npm package-locks 文档 8. npm shrinkwrap 文档 9. StepSecurity: axios compromised on npm
夜雨聆风