| SC 机制 | 类型 | 维度A · 覆盖范围(哪些攻击面/层被覆盖) | 维度B · 激活机制(何时触发) | 维度C · 可禁用性 / 绕过方式 | 源码证据 |
|---|---|---|---|---|---|
|
sanitizeForPromptLiteral
RulesChecker
|
PARTIAL |
L0 AgentCore — 系统提示词构建阶段
工作区文件注入
Channel 消息体
工具返回值 ✗
MCP ToolResult ✗
仅过滤控制字符(CR/LF/NUL/Bidi/ZWJ)
|
系统提示词构建时
每次会话启动 + 工作区文件读入时触发
|
绕过:注入语义指令(Markdown/自然语言)不被过滤
绕过:工具返回值路径不经此函数
不可配置禁用(硬编码)
|
dist/system-prompt-BRx_74d7.js :sanitizeForPromptLiteral |
|
wrapUntrustedPromptDataBlock
RulesChecker
|
LIMITED |
L3 Channel → L0 AgentCore 边界
部分渠道消息
工作区文件 ✗
Webhook body ✗
Email body(unsafe开启时)✗
仅对 BodyForCommands 中特定字段生效
|
消息格式化时
消息送入 LLM 上下文前构建阶段
|
绕过:LLM 可被诱导忽略 <untrusted-text> 边界标签
绕过:工作区文件注入路径不经此包裹
不可配置禁用(硬编码),但覆盖范围不完整
|
dist/system-prompt-BRx_74d7.js :wrapUntrustedPromptDataBlock dist/message-hook-mappers-DZ_jp2sF.js :BodyForCommands |
|
tool-policy-pipeline
RulesChecker
|
BYPASSABLE |
L2 Capabilities — 工具调用层
exec 工具
fs 工具
message 工具
browser 工具
覆盖所有已注册工具的调用决策
|
工具调用决策时
每次 LLM 发起 tool_use 请求时触发
|
⚠️ 全绕过:
--permission-mode bypassPermissions绕过:通配符 allowlist(
tools.*.allow: ["*"])绕过:exec.security="full" + exec.ask="off"
可配置禁用:bypassPermissions 模式完全跳过此层
|
dist/tool-policy-pipeline-CIlYYZSa.js dist/exec-defaults-F2zQAtOd.js dist/cli-shared-BybrVDQR.js :dangerous-config-flags |
|
allowFrom 渠道鉴权
RulesChecker
|
WEAK-DEFAULT |
L3 Channel — 渠道输入层
已配置渠道
未配置渠道(空=全通过)
Webhook(IP allowlist 独立)
仅校验发件人 ID,不校验消息语义内容
|
消息接收时(前置过滤)
Channel 消息进入处理管道前
|
⚠️ 默认允许全部:
allowWhenEmpty=true(未配置 = 任意发件人通过)绕过:
hasWildcard=true(通配符匹配)绕过:社工攻击者获得受信任账号发消息
可配置:allowFrom=[] 等价于禁用过滤
|
dist/allow-from-ClF_LMu8.js :isSenderIdAllowed :allowWhenEmpty :hasWildcard |
|
Webhook 速率限制
RulesChecker
|
VOLATILE |
L3 Channel — Webhook 入口
Webhook channel
DM(无速率限制)
Email(无速率限制)
其他 Channel(无速率限制)
|
Webhook 请求到达时
每次 HTTP POST 到 /webhook 时检查内存计数器
|
⚠️ 重启清零:仅内存存储,进程重启后计数器归零
绕过:低速攻击(默认 120/min 阈值,分钟级注入仍可执行)
可配置:
hooks.webhook.rateLimit.maxRequests 可调高至无限 |
dist/webhook-memory-guards-0h6_GER-.js :WEBHOOK_RATE_LIMIT_DEFAULTS maxRequests:120, windowMs:60000 |
|
GuardRail(模型级)
不存在
|
MISSING |
L0 ✗
L2 ✗
L3 ✗
所有层均无 LLM-based 语义检测。注入指令可完整到达 Model
|
N/A — 不存在 |
SC-GAP-01:全局 GuardRail 缺失
补救:ORP-OC-01 建议在 TRG-EVENT-HEARTBEAT 路径上优先部署意图检测层
|
全代码库未见 LLM-based 意图检测模块 |
|
输出层检查
不存在
|
MISSING |
向外渠道输出 ✗
文件写出 ✗
exec 输出 ✗
模型输出直接送达 Channel / 工具执行器,无拦截
|
N/A — 不存在 |
SC-GAP-02:无输出过滤,凭证外渗和社会工程学广播无法拦截
|
全代码库未见 输出过滤管道 |
|
MCP ToolResult 信任验证
不存在
|
MISSING |
L2 MCP 调用返回值 ✗
MCP 服务器返回的 ToolResult 内容直接注入 LLM 上下文,无验证
|
N/A — 不存在 |
SC-GAP-03:恶意 MCP 服务器可在 ToolResult 中嵌入提示词注入(AP-OC10 利用此缺口)
|
dist/mcp-*.js ToolResult直传LLM context |
| Layer | sanitize | wrapUntrusted | tool-policy | allowFrom | Rate Limit | GuardRail | Output Check | MCP Trust |
|---|---|---|---|---|---|---|---|---|
| L0 AgentCore | ✓ 部分 | — | — | — | — | ✗ 缺失 | ✗ 缺失 | — |
| L1 InternalEnv | — | — | ✓ 可绕过 | — | — | ✗ 缺失 | ✗ 缺失 | ✗ 缺失 |
| L2 ExternalEnv | ✓ 部分 | ✓ 有限 | — | ✓ 弱默认 | ✓ Webhook | ✗ 缺失 | ✗ 缺失 | — |
| L3 SC Layer | — | — | — | — | — | ✗ 实际不存在 | — | — |
| L4 Hook/EventIter | — | — | ✓ 可绕过 | — | — | ✗ 缺失 | ✗ 缺失 | — |
| L5 Gateway | — | — | — | ✓ 路由控制 | — | ✗ 缺失 | — | — |
| L6 Docker | — | — | — | — | — | — | ✓ 隔离执行 | — |
| L7.4 SupplyChain | — | — | — | — | — | ✗ 缺失 | — | — |
--permission-mode bypassPermissions 使 tool-policy-pipeline 完全失效,导致 exec/fs/message 工具均无需审批即可调用。ORP-OC-02 提案需将此模式纳入 Ontology 标准标签。| 攻击面 | Layer | 严重程度 | 源码证据 |
|---|---|---|---|
| 工作区文件系统(SOUL/USER/MEMORY/HEARTBEAT/BOOTSTRAP 等 8 文件直接注入系统提示词) | L0 + L7.1 | CRITICAL | dist/system-prompt-BRx_74d7.js:CONTEXT_FILE_ORDER |
| 20+ 渠道消息入口(DM / Email / Webhook / GroupChat / WebChat …每条消息体均流经 LLM 上下文) | L2 | HIGH | dist/message-hook-mappers-DZ_jp2sF.js:BodyForCommands |
| Gmail allowUnsafeExternalContent(邮件 HTML 全文无净化传递) | L2 | HIGH | dangerous-config-flags:hooks.gmail.allowUnsafeExternalContent |
| BOOTSTRAP.md 冷启动优先注入(系统提示词前缀,重启后立即执行) | L0 + L6 | HIGH | dist/bootstrap-prompt-4ZAPcOdz.js |
| HEARTBEAT 心跳调度(TRG-EVENT-HEARTBEAT,攻击者通过 HEARTBEAT.md 实现定时 C2) | L4 | HIGH | dist/heartbeat-wake-B8UNwbeh.js |
| MCP 服务器 ToolResult(外部 MCP 服务器可在返回值中注入指令,L1 内部但外部可控) | L1 | HIGH | dist/mcp-*.js:ToolResult |
| npm Plugin 包(恶意依赖通过 require() 获得完整 Node.js 执行权) | L7 | HIGH | package.json:dependencies |
| Webhook HTTP 入口(速率限制仅内存,重启清零) | L2 | MED | dist/webhook-memory-guards-0h6_GER-.js:WEBHOOK_RATE_LIMIT_DEFAULTS |
| 配置项 | 值 / 风险说明 | 影响 Layer | 风险 |
|---|---|---|---|
| exec(无 Docker)security | "full" — 宿主系统全权限命令执行 | L1 + L6 | CRITICAL |
| exec(无 Docker)ask | "off" — 无任何执行确认 | L1 + L6 | CRITICAL |
| bypassPermissions mode | --permission-mode bypassPermissions → 跳过全部 tool-policy(Perm-ACT-BYPASS-ALL,ORP-OC-02) | L1 + L3 | CRITICAL |
| tools.fs.workspaceOnly=false | 文件系统工具可操作工作区外任意路径 | L1 | HIGH |
| tools.exec.applyPatch.workspaceOnly=false | apply_patch 可修改任意文件 | L1 | HIGH |
| hooks.allowRequestSessionKey=true | Webhook 可获取 session key → 会话劫持 | L2 + L5 | HIGH |
| browser.ssrfPolicy.dangerouslyAllowPrivateNetwork=true | browser 工具可访问内网 → SSRF(AP-OC09) | L1 | HIGH |
| gateway.controlUi.dangerouslyDisableDeviceAuth=true | 禁用 Control UI 鉴权 → 匿名 admin 访问 | L5 | HIGH |
证据路径:dist/dangerous-config-flags-lTz7t-pV.js:collectEnabledInsecureOrDangerousFlags · dist/exec-defaults-F2zQAtOd.js · dist/cli-shared-BybrVDQR.js
| 检查器 | 类型 | 覆盖 | 绕过难度 | 可禁用 |
|---|---|---|---|---|
sanitizeForPromptLiteral | RulesChecker | 控制字符过滤(非语义) | 易 | 否 |
wrapUntrustedPromptDataBlock | RulesChecker | 部分渠道消息边界标注 | 中 | 否(覆盖不全) |
tool-policy-pipeline | RulesChecker | 工具调用 allowlist/denylist | 易(bypassPermissions) | 是 |
allowFrom | RulesChecker | 发件人 ID 白名单 | 易(空配置=全通过) | 是 |
Webhook 速率限制 | RulesChecker | Webhook 请求频率 | 易(低速/重启) | 是 |
| GuardRail(LLM-based) | 完全缺失 | — | — | N/A |
| 输出层检查 | 完全缺失 | — | — | N/A |
| MCP 返回值信任验证 | 完全缺失 | — | — | N/A |
| 危害类型 | Harm 标签 | 具体目标资产 | 相关 AP |
|---|---|---|---|
| Sensitive-CREDENTIAL 外渗 | Harm-CRED |
~/.openclaw/config.json(TELEGRAM_BOT_TOKEN / OPENAI_API_KEY)~/.ssh/id_rsa(SSH 私钥)~/.aws/credentials(AWS IAM 密钥) |
AP-OC01, AP-OC02, AP-OC06 |
| Sensitive-PII 外渗 / 社工广播 | Harm-PII |
Gmail(5000+ 邮件含商业机密) Telegram 联系人 200+ WhatsApp 商业客户 300+ |
AP-OC05, AP-OC03 |
| 宿主系统控制 | Harm-RCE |
宿主 OS(exec full+no-ask → curl | bash / rm -rf) |
AP-OC04, AP-OC07, AP-OC08 |
| 持久 C2 / Availability | Harm-AVAIL |
Agent 服务持续性;heartbeat C2 → 无人值守持久后门 | AP-OC03, AP-OC06 |
| 第三方信任滥用 | Harm-3RDPARTY |
以用户身份向 Gmail 联系人发送钓鱼邮件;Slack 工作区 50+ 成员被社工 | AP-OC05 |
| 内网 SSRF | Harm-SSRF |
内网 metadata endpoint(AWS 169.254.169.254)→ IAM Token 获取 | AP-OC09 |
| 修复项 | 影响 Layer | 状态 | 残余风险 |
|---|---|---|---|
| enforceOwnerForCommands 绕过 (#69774) | L1/L5 | ✅ 已修复 | 无(已完整修复) |
| MINIMAX_API_HOST 工作区 env 注入 | L7 | ✅ 已修复 | 无(已完整修复) |
| OPENCLAW_* 密钥被不受信任 .env 植入 | L7 | ✅ 已修复 | 无(已完整修复) |
| gateway 工具配置变异(沙箱/plugin trust/TLS/SSRF policy) | L5/L6 | ✅ 已修复(保护范围扩展) | AP-OC09 仍可通过 dangerouslyAllow 标志启用 |
| WebSocket broadcast scope-gating(INN-07) | L2 | ✅ 已修复 | 无(v2026.4.21 新增) |
| SSRF guard QQBot 直传 URL | L1/L2 | ✅ 已修复 | browser.ssrfPolicy.dangerouslyAllowPrivateNetwork 仍可手动开启 |