前言
2026年3月26日,OpenClaw 被披露存在一个高危路径遍历漏洞(CVE-2026-32846),该漏洞存在于媒体解析模块中。攻击者可绕过路径验证函数,读取服务器上的任意文件,包括系统配置、SSH 密钥等敏感信息。
⚠️ 重要提醒:如果你正在使用 OpenClaw 2026.3.23 或更早版本,请立即升级至 2026.3.24!
一、漏洞概述
| 属性 |
内容 |
| CVE 编号 |
CVE-2026-32846 |
| 漏洞类型 |
路径遍历(Path Traversal) |
| CVSS v4 评分 |
8.7(高危) |
| 影响版本 |
OpenClaw ≤ 2026.3.23 |
| 修复版本 |
2026.3.24(commit 4797bbc) |
| 发现者 |
Zhijie Zhang |
| CWE |
CWE-22:路径名限制不当 |
二、漏洞原理
(一)问题根源
OpenClaw 的媒体处理流程中,isLikelyLocalPath() 和 isValidMedia() 两个函数负责验证用户提供的文件路径是否在允许范围内。然而,这两个函数存在不完整验证的问题:
1 2 3 4 5 6 7 8 9
| 问题1: isLikelyLocalPath() ├── 未正确处理相对路径(如 ../../../etc/passwd) ├── 未校验符号链接指向 └── 路径规范化不完整
问题2: isValidMedia() ├── allowBareFilename 选项允许仅传文件名 ├── 文件名可被构造为包含路径遍历字符 └── 绕过沙箱限制
|
(二)攻击链
1 2 3 4 5 6 7 8 9
| [攻击者构造恶意路径] ↓ [isLikelyLocalPath() 验证绕过] ↓ [isValidMedia() allowBareFilename 绕过] ↓ [路径解析时允许 ../ 跳转] ↓ [读取沙箱外任意文件]
|
三、攻击场景
场景一:读取系统敏感文件
1 2
| GET /api/media?file=../../../etc/passwd
|
场景二:窃取 SSH 密钥
1 2
| GET /api/media?file=../../../../home/user/.ssh/id_rsa
|
场景三:获取环境配置
1 2
| GET /api/media?file=../../.env
|
四、CVSS 评分详解
1
| CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
|
| 指标 |
值 |
含义 |
| AV (Attack Vector) |
Network |
可远程利用 |
| AC (Attack Complexity) |
Low |
攻击复杂度低 |
| AT (Attack Requirements) |
None |
无特殊条件 |
| PR (Privileges Required) |
None |
无需权限 |
| UI (User Interaction) |
None |
无需用户交互 |
| VC (Confidentiality) |
High |
高度机密性影响 |
关键点:无需认证、无需用户交互、可远程攻击 → 高危漏洞
五、影响范围
(一)受影响部署
| 部署类型 |
风险等级 |
说明 |
| 本地开发环境 |
中 |
攻击者需本地访问 |
| 内网服务器 |
高 |
内网任意用户可利用 |
| 公网暴露 |
极高 |
任何人可远程攻击 |
(二)可泄露的敏感信息
| 数据类型 |
文件路径 |
危害程度 |
| 系统用户 |
/etc/passwd, /etc/shadow |
🔴 严重 |
| SSH 私钥 |
~/.ssh/id_rsa, ~/.ssh/id_ed25519 |
🔴 严重 |
| 环境变量 |
.env, docker-compose.yml |
🔴 严重 |
| 应用配置 |
config.yml, settings.json |
🟠 高 |
| 云服务凭证 |
~/.aws/credentials, ~/.kube/config |
🔴 严重 |
六、修复方案
(一)升级到安全版本
1 2 3 4
| npm update openclaw
openclaw upgrade
|
(二)验证当前版本
(三)临时缓解措施(如无法立即升级)
- 限制文件访问目录:配置白名单,只允许访问特定目录
- 反向代理过滤:在 Nginx/Caddy 层拦截包含
../ 的请求
- 启用审计日志:记录所有文件访问请求,监控异常行为
1 2 3 4 5
| location ~ \.\. { deny all; return 403; }
|
七、技术细节:修复代码对比
修复前(存在漏洞)
1 2 3 4 5 6
| function isValidMedia(path, options = {}) { if (options.allowBareFilename && !path.includes('/')) { return true; } }
|
修复后(commit 4797bbc)
1 2 3 4 5 6 7 8 9 10 11
| function isValidMedia(path, options = {}) { const resolvedPath = path.resolve(baseDir, path); if (!resolvedPath.startsWith(baseDir)) { throw new Error('Path traversal detected'); } }
|
关键改进:
- 使用
path.resolve() 规范化路径
- 验证最终路径是否在允许的基础目录内
- 拒绝任何尝试跳出沙箱的请求
八、应急响应建议
如果你认为自己可能已受影响:
1. 立即升级
1 2
| openclaw upgrade openclaw --version
|
2. 检查访问日志
查找是否有异常的文件访问请求,特别是包含 ../ 的路径。
3. 轮换敏感凭证
如果怀疑敏感文件已被泄露:
- 重新生成 SSH 密钥
- 轮换 API 密钥和 Token
- 更新数据库密码
- 检查云服务访问日志
4. 安全加固
- 最小权限原则运行 OpenClaw
- 限制网络访问
- 启用文件系统审计
九、参考资料
- Tenable - CVE-2026-32846
- VulnCheck - OpenClaw Media Parsing Path Traversal
- GitHub Security Advisory
- GitHub Commit 4797bbc
总结
CVE-2026-32846 是一个高危路径遍历漏洞,影响 OpenClaw 2026.3.23 及更早版本。漏洞存在于媒体解析模块,攻击者无需认证即可远程读取服务器上的任意文件,包括系统配置、密钥等敏感信息。
建议所有 OpenClaw 用户立即升级至 2026.3.24 或更高版本。
📌 本文基于公开安全信息整理,部分技术细节来源于官方安全公告。
整理时间:2026-03-27