OpenClaw 攻击面分析
调研日期:2026-04-16 | 版本:2026.4.15-beta.1 | 仓库:github.com/openclaw/openclaw (358K+ stars)
1. 项目概述
OpenClaw 是一个大规模开源个人 AI 助手平台,采用 Gateway + Agent + Channel 架构,支持 25+ 消息平台集成(WhatsApp、Telegram、Slack、Discord、微信、QQ 等),使用 TypeScript 开发,支持本地部署或云端 VPS 运行。
核心架构组件:
| 组件 | 路径 | 功能 |
|---|---|---|
| Gateway | src/gateway/ | HTTP/WebSocket 控制面(端口 18789),处理认证、路由、API |
| Agent Runtime | src/agents/ | LLM 交互、工具调用、会话/上下文/记忆管理 |
| Channel 集成 | src/channels/ + extensions/ | 25+ 消息平台适配器和 Webhook 接收器 |
| Node Host | src/node-host/ | 命令执行沙箱(默认关闭) |
| Skills | skills/ + ClawHub | 可扩展能力模块(ClawHub 上 13,700+ 个) |
| MCP | src/mcp/ | Model Context Protocol 集成 |
| Memory | extensions/memory-* | LanceDB 向量存储代理记忆 |
| Proxy Capture | src/proxy-capture/ | MITM 代理流量捕获 |
2. 信任模型
OpenClaw 采用 单用户可信运营者 模型:
- 每个 Gateway 实例仅服务一个可信用户
- 经过认证的 Gateway 调用者被视为可信运营者
- AI 模型/Agent 不是可信主体(假设 Prompt Injection 是可能的)
- 安全边界依赖于:主机/配置信任、认证、工具策略、沙箱、执行审批
- 单独的 Prompt Injection 不被视为漏洞,除非跨越安全边界
3. 攻击面分析
3.1 网络攻击面 🔴
Gateway HTTP/WebSocket 服务器(端口 18789):
- REST API 和 WebSocket 端点暴露
- 共享 Token 或密码认证
- OpenAI 兼容 API 接口:
/v1/chat/completions、/v1/responses - 工具调用端点:
/tools/invoke - MCP HTTP 端点:
src/gateway/mcp-http.ts
Webhook 接收器:
- 每个 Channel 集成暴露独立的 Webhook 接收端点
- 多个 Webhook 存在 预认证解析漏洞(Feishu 在签名验证前解析请求体、Synology Chat 速率限制绕过、语音通话 Webhook 资源耗尽)
SSRF 风险:
web-fetch工具的assertPublicHostname不完整(CVE-2026-6011)- Channel 扩展配置的 base URL 未做 SSRF 防护(CVE-2026-28476)
Bridge Port(18790): 辅助通信端口,增加攻击面
3.2 Prompt Injection 攻击面 🔴🔴(最高风险)
| 威胁 ID | 威胁 | 评级 | 描述 |
|---|---|---|---|
| T-EXEC-001 | 直接 Prompt Injection | CRITICAL | 通过 25+ 消息渠道注入恶意指令操纵 Agent 行为 |
| T-EXEC-002 | 间接 Prompt Injection | HIGH | 嵌入在 URL、邮件、Webhook 内容中的恶意载荷 |
| T-EXEC-003 | 工具参数注入 | HIGH | 通过 Prompt Injection 操纵工具参数执行非预期命令 |
| T-EXEC-004 | 执行审批绕过 | HIGH | 命令混淆、别名利用、路径操纵绕过 exec 审批白名单 |
关键问题: 威胁模型承认"无命令清理"是残余风险。
3.3 Skills/插件攻击面 🔴🔴(最高风险)
这是最危险的攻击向量:
| 威胁 ID | 威胁 | 评级 | 描述 |
|---|---|---|---|
| T-EXEC-005 | 恶意 Skill 代码执行 | CRITICAL | Skills 默认以完整 Agent 权限运行,无沙箱。审核系统使用正则匹配,易被绕过 |
| T-PERSIST-001 | Skill 持久化 | CRITICAL | 恶意 Skills 设计上可在重启后持久存在 |
| T-EXFIL-003 | Skill 凭证窃取 | CRITICAL | Skills 可读取环境变量、配置文件、~/.openclaw/ 中的 API 密钥 |
| T-EVADE-004 | 分阶段载荷投递 | HIGH | Skills 可通过初始扫描后在运行时下载恶意载荷,"运行时获取不受监控" |
ClawHub 生态风险:
- 13,700+ 社区 Skills,安全审计发现约 373 个恶意 Skill
- awesome-openclaw-skills 从 13,729 个中过滤掉了 7,215 个(垃圾、重复、低质量、恶意)
3.4 认证与授权攻击面 🟠
| 威胁 ID | 威胁 | 评级 | 描述 |
|---|---|---|---|
| T-ACCESS-003 | Token 明文存储 | HIGH | Token 以明文存储在 ~/.openclaw/credentials/ |
| T-PERSIST-004 | Token 不过期 | HIGH | Token 默认不设过期时间 |
| T-ACCESS-001 | 配对码拦截 | MEDIUM | 设备配对有 30 秒宽限期可被利用 |
| T-ACCESS-002 | AllowFrom 欺骗 | MEDIUM | 发送者身份欺骗依赖 Channel 实现 |
| GHSA-r3v5 | 权限提升 | HIGH | device.pair.approve 可从 operator.pairing 提升到 operator.admin |
3.5 数据泄露攻击面 🟠
| 威胁 ID | 威胁 | 评级 | 描述 |
|---|---|---|---|
| T-EXFIL-001 | web_fetch 外传数据 | HIGH | Agent 可被指示 POST 敏感数据到外部 URL(外部 URL 设计上允许) |
| T-EXFIL-004 | 会话记录泄露 | HIGH | ~/.openclaw/sessions/ 中的会话记录可被 Skills 读取 |
| T-EXFIL-002 | 未授权消息发送 | MEDIUM | Agent 可被诱导向攻击者发送含敏感数据的消息 |
3.6 执行环境攻击面 🔴
- 沙箱默认关闭:
agents.defaults.sandbox.mode默认为off,命令直接在宿主机执行 - Exec 审批局限:审批绑定"精确请求上下文",但不覆盖所有解释器/运行时加载器/子命令/参数组合
- Node Host:
src/node-host/invoke-system-run.ts使用白名单机制,但存在命令清理缺口
3.7 拒绝服务攻击面 🟡
- 语音通话 Webhook 无认证资源耗尽(GHSA-36cp)
- Nostr 入站 DM 在认证前触发加密计算(GHSA-2j53)
- Feishu Webhook 在签名验证前解析请求体(GHSA-8f9r)
- 远程媒体错误响应触发无界内存分配(GHSA-hm63)
4. 已知漏洞(CVE/GHSA)
| ID | 严重性 | 摘要 |
|---|---|---|
| CVE-2026-6011 | Low | web-fetch.ts 中 assertPublicHostname SSRF(已修补) |
| CVE-2026-28476 | Medium | Channel 扩展 base URL SSRF(修补不完整) |
| GHSA-r3v5-2grc-429h | High | device.pair.approve RCE + 权限提升 |
| GHSA-9gvx-vj57-vqqx | Medium | Canvas 本地请求绕过认证 |
| GHSA-p6j4-wvmc-vx2h | Medium | Tlon cite 扩展在授权前执行 |
| GHSA-59xc-5v89-r7pr | Medium | Synology Chat Webhook 预认证速率限制绕过 |
| GHSA-hm63-vwj4-mj2q | Medium | 远程媒体无界内存分配 |
| GHSA-2j53-2c28-g9v2 | Medium | Nostr 未认证加密计算 |
| GHSA-8f9r-gr6r-x63q | Medium | Feishu Webhook 预认证解析 |
| GHSA-36cp-mh65-x882 | Medium | 语音 Webhook 未认证资源耗尽 |
5. 安全加固建议
5.1 部署加固
- 启用沙箱模式:将
agents.defaults.sandbox.mode设为docker或vm - 仅监听 localhost:如需外部访问,使用反向代理 + TLS
- 设置 Token 过期:配置 Token TTL,定期轮换
- 加密凭证存储:使用系统密钥链代替明文文件
- 网络隔离:将 OpenClaw 放入独立网络段,限制出站连接
5.2 Skills 安全
- 仅安装审计过的 Skills:使用 awesome-openclaw-skills 筛选列表
- 审查 Skill 源码:安装前检查是否有网络请求、文件系统访问、环境变量读取
- 监控运行时行为:记录 Skill 的网络和文件系统活动
- 禁止自动安装:需要人工审批每个 Skill 安装
5.3 运行时防护
- 配置严格的 exec 白名单:仅允许必要的命令
- 启用 TOTP 审批:关注 #67440 的进展
- 限制 web_fetch 目标:配置 URL 白名单,阻止内网访问
- 监控会话目录:保护
~/.openclaw/sessions/目录权限
5.4 Channel 安全
- 最小化 Channel 暴露:仅启用需要的 Channel 集成
- 使用强 Webhook Secret:为每个 Channel 配置唯一的高熵密钥
- 配置 AllowFrom:限制授权发送者列表
- 速率限制:在反向代理层面对所有 Webhook 端点设置速率限制
6. 参考资源
| 资源 | 链接 |
|---|---|
| 主仓库 | github.com/openclaw/openclaw |
| 安全策略 | github.com/openclaw/openclaw/blob/main/SECURITY.md |
| 威胁模型 | trust.openclaw.ai/trust/threatmodel |
| 事件响应计划 | github.com/openclaw/openclaw/blob/main/INCIDENT_RESPONSE.md |
| Skills 市场 | clawhub.ai |
| 安全联系 | security@openclaw.ai |
| DeepWiki 分析 | deepwiki.com/openclaw/openclaw |