OpenClaw 路径遍历漏洞分析(CVE-2026-32846)

前言

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
# 攻击者构造请求读取 /etc/passwd
GET /api/media?file=../../../etc/passwd

场景二:窃取 SSH 密钥

1
2
# 读取用户 SSH 私钥
GET /api/media?file=../../../../home/user/.ssh/id_rsa

场景三:获取环境配置

1
2
# 读取应用环境变量(可能包含数据库密码、API Key)
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
# 升级到 2026.3.24 或更高版本
npm update openclaw
# 或
openclaw upgrade

(二)验证当前版本

1
2
openclaw --version
# 确保输出 >= 2026.3.24

(三)临时缓解措施(如无法立即升级)

  1. 限制文件访问目录:配置白名单,只允许访问特定目录
  2. 反向代理过滤:在 Nginx/Caddy 层拦截包含 ../ 的请求
  3. 启用审计日志:记录所有文件访问请求,监控异常行为
1
2
3
4
5
# Nginx 配置示例
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 # 确认版本 >= 2026.3.24

2. 检查访问日志

查找是否有异常的文件访问请求,特别是包含 ../ 的路径。

3. 轮换敏感凭证

如果怀疑敏感文件已被泄露:

  • 重新生成 SSH 密钥
  • 轮换 API 密钥和 Token
  • 更新数据库密码
  • 检查云服务访问日志

4. 安全加固

  • 最小权限原则运行 OpenClaw
  • 限制网络访问
  • 启用文件系统审计

九、参考资料

  1. Tenable - CVE-2026-32846
  2. VulnCheck - OpenClaw Media Parsing Path Traversal
  3. GitHub Security Advisory
  4. GitHub Commit 4797bbc

总结

CVE-2026-32846 是一个高危路径遍历漏洞,影响 OpenClaw 2026.3.23 及更早版本。漏洞存在于媒体解析模块,攻击者无需认证即可远程读取服务器上的任意文件,包括系统配置、密钥等敏感信息。

建议所有 OpenClaw 用户立即升级至 2026.3.24 或更高版本。


📌 本文基于公开安全信息整理,部分技术细节来源于官方安全公告。

整理时间:2026-03-27