2026 年 3 月 19 日到 22 日,四天时间,OpenClaw 连续被披露了九个 CVE。
这不是一个安全研究团队的集中审计——而是多个独立的安全研究者在同一时期各自发现的漏洞。CVE 的类型五花八门:路径穿越、服务端请求伪造(SSRF)、认证绕过、跨站脚本(XSS)、信息泄露、未授权的配置修改、WebSocket 劫持、日志注入、不安全的默认权限。
每一个 CVE 单独看都是严重的安全问题。九个放在一起,画面就更清楚了——这不是代码质量的偶然失误,而是架构层面的系统性安全债务。
九个 CVE 的共同根源
表面上看,这九个漏洞各不相同。路径穿越利用的是文件处理逻辑的缺陷;SSRF 利用的是 URL 验证的不完整;认证绕过利用的是会话管理的漏洞。但如果你退一步看,它们有一个共同的根源:OpenClaw 暴露了太大的攻击面。
OpenClaw 有一个 Web 服务器,所以有 XSS 和认证绕过的攻击面。有一个文件管理 API,所以有路径穿越的攻击面。有一个可以发起外部请求的功能,所以有 SSRF 的攻击面。有 WebSocket 连接,所以有 WebSocket 劫持的攻击面。有日志系统,所以有日志注入的攻击面。有配置 API,所以有未授权配置修改的攻击面。
每一个功能都引入了对应的攻击面。功能越多,攻击面越大。这是一个简单的数学关系:攻击面随代码量和功能数线性增长,而安全保证需要的工程投入随攻击面指数增长。
OpenClaw 的代码量在数万行级别,功能覆盖 Web 界面、REST API、WebSocket、文件管理、配置管理、技能系统、插件市场——每一个都是一个需要独立保护的攻击面。要让所有这些攻击面同时没有漏洞,需要的安全工程投入远远超过一个开源项目通常拥有的资源。
NanoClaw 没有这些攻击面
逐一对照这九个 CVE 的攻击面:
路径穿越——NanoClaw 没有文件管理 API。文件访问通过容器挂载控制,agent 只能看到被明确挂载到容器中的目录。
SSRF——NanoClaw 不提供任何让外部用户触发内部请求的接口。Agent 在容器中的网络访问受容器网络策略约束。
认证绕过——NanoClaw 没有 Web 认证系统。没有登录页面,没有会话 cookie,没有 JWT token。
XSS——NanoClaw 没有 Web 界面。没有 HTML 渲染,没有用户输入被反射到页面上的可能。
信息泄露——NanoClaw 不暴露任何 HTTP 端点。没有错误页面可以泄露堆栈信息,没有 API 可以返回内部状态。
未授权配置修改——NanoClaw 没有配置 API。配置通过本地的 .env 文件管理,只有物理访问服务器的人才能修改。
WebSocket 劫持——NanoClaw 不提供 WebSocket 服务端。它作为 WebSocket 客户端连接到 WhatsApp,但不接受入站 WebSocket 连接。
日志注入——NanoClaw 的日志在容器外的编排层产生,agent 无法直接写入宿主的日志系统。
不安全的默认权限——NanoClaw 的容器默认以最小权限运行,不需要用户手动配置权限边界。
九个 CVE,NanoClaw 一个都不适用。不是因为 NanoClaw 的代码写得更好——而是因为 NanoClaw 根本不存在这些攻击面。你无法攻击一个不存在的 Web 服务器,无法绕过一个不存在的认证系统,无法穿越一个不存在的文件管理 API。
攻击面最小化
安全工程有两种基本策略。
第一种是加固:接受攻击面的存在,然后尽力保护每一个攻击面。这意味着每个 API 端点都需要认证和授权检查,每个用户输入都需要验证和转义,每个文件操作都需要路径规范化,每个网络请求都需要 URL 白名单。这是 OpenClaw 采用的策略——它有大量的安全代码来保护它的大量功能。
第二种是消除:不要创造不需要的攻击面。如果你不需要 Web 界面,就不要有 Web 服务器。如果你不需要文件管理 API,就不要实现文件管理 API。如果你不需要配置 API,就通过本地文件配置。
NanoClaw 采用的是第二种策略。它的攻击面小不是因为它的安全代码多,而是因为它的功能面小。功能越少,攻击面越少;攻击面越少,需要保护的地方越少;需要保护的地方越少,出错的概率越低。
四天九个 CVE 不是 OpenClaw 团队的失败——以他们的资源规模来看,安全工作已经做得不错了。这是架构选择的必然结果。当你选择构建一个功能丰富的平台时,你同时选择了承担一个巨大的攻击面。而攻击面的保护需要持续的、高质量的安全工程投入——这是大多数开源项目无法长期维持的。
NanoClaw 的选择是不同的:做更少的功能,拥有更小的攻击面,需要更少的安全工程。这不是偷懒——这是对自己资源现实的诚实评估。