安全机制全景(Security Profile)— OC0421_WithOfficialCC v2

OpenClaw v2026.4.21 · ATA Ontology v6.0 · SC 三维分析(v2 修订版)
修订:补充 SC 覆盖范围 × 激活机制 × 可禁用性三维矩阵;Layer 映射更新;ORP 完整提案
⚠️ ORP 提案:TRG-EVENT-HEARTBEAT(ORP-OC-01)· Perm-ACT-BYPASS-ALL(ORP-OC-02)· WorkspaceContextFile(ORP-OC-03)
✅ v2 修订修复 Issue 9:SC 三维分析(覆盖范围 × 激活机制 × 可配置性) 正式增补
SC 三维分析 v2 新增
维度 A × B × C:覆盖范围 × 激活机制 × 可禁用/绕过性
整体评级:WEAK(规则级 + 无模型级)
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
SC 覆盖范围热力图(Layer × SC机制)
覆盖存在严重空洞
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 ✗ 缺失
SC-GAP-01 · GuardRail 完全缺失(所有 Layer)
全系统无 LLM-based 意图检测层。所有 SC 机制均为规则级,无法识别语义注入指令。攻击者可通过任意自然语言文本绕过所有现有 SC 机制。
→ ORP-OC-01 提案:在 TRG-EVENT-HEARTBEAT 路径优先部署意图检测
SC-GAP-02 · 输出层检查缺失(L0 AgentCore / L2 Capabilities 输出路径)
模型生成的输出直接送达 Channel 发送器和工具执行器,无任何拦截机会。凭证外渗(AP-OC01/02)和多渠道广播(AP-OC05)无法在执行前阻止。
SC-GAP-03 · MCP ToolResult 信任验证缺失(L1)
MCP 服务器的 ToolResult 返回内容直接注入 LLM 上下文,无语义校验。AP-OC10 完整利用此缺口实现外部攻击者通过受信任 MCP 服务器绕过 allowFrom 过滤。
SC-GAP-04 · bypassPermissions 单点全绕过(L1 tool-policy)
单一配置标志 --permission-mode bypassPermissions 使 tool-policy-pipeline 完全失效,导致 exec/fs/message 工具均无需审批即可调用。ORP-OC-02 提案需将此模式纳入 Ontology 标准标签。
Dim-1 · 攻击面(Attack Surface)L3 Channel + L7 Environment
攻击面评估
CRITICAL
攻击面Layer严重程度源码证据
工作区文件系统(SOUL/USER/MEMORY/HEARTBEAT/BOOTSTRAP 等 8 文件直接注入系统提示词)L0 + L7.1CRITICALdist/system-prompt-BRx_74d7.js:CONTEXT_FILE_ORDER
20+ 渠道消息入口(DM / Email / Webhook / GroupChat / WebChat …每条消息体均流经 LLM 上下文)L2HIGHdist/message-hook-mappers-DZ_jp2sF.js:BodyForCommands
Gmail allowUnsafeExternalContent(邮件 HTML 全文无净化传递)L2HIGHdangerous-config-flags:hooks.gmail.allowUnsafeExternalContent
BOOTSTRAP.md 冷启动优先注入(系统提示词前缀,重启后立即执行)L0 + L6HIGHdist/bootstrap-prompt-4ZAPcOdz.js
HEARTBEAT 心跳调度(TRG-EVENT-HEARTBEAT,攻击者通过 HEARTBEAT.md 实现定时 C2)L4HIGHdist/heartbeat-wake-B8UNwbeh.js
MCP 服务器 ToolResult(外部 MCP 服务器可在返回值中注入指令,L1 内部但外部可控)L1HIGHdist/mcp-*.js:ToolResult
npm Plugin 包(恶意依赖通过 require() 获得完整 Node.js 执行权)L7HIGHpackage.json:dependencies
Webhook HTTP 入口(速率限制仅内存,重启清零)L2MEDdist/webhook-memory-guards-0h6_GER-.js:WEBHOOK_RATE_LIMIT_DEFAULTS
Dim-2 · 权限模型(Permission Model)L1 Config & Permissions
权限模型评估
CRITICAL(无 Docker 时 + bypassPermissions)
配置项值 / 风险说明影响 Layer风险
exec(无 Docker)security"full" — 宿主系统全权限命令执行L1 + L6CRITICAL
exec(无 Docker)ask"off" — 无任何执行确认L1 + L6CRITICAL
bypassPermissions mode--permission-mode bypassPermissions → 跳过全部 tool-policy(Perm-ACT-BYPASS-ALL,ORP-OC-02)L1 + L3CRITICAL
tools.fs.workspaceOnly=false文件系统工具可操作工作区外任意路径L1HIGH
tools.exec.applyPatch.workspaceOnly=falseapply_patch 可修改任意文件L1HIGH
hooks.allowRequestSessionKey=trueWebhook 可获取 session key → 会话劫持L2 + L5HIGH
browser.ssrfPolicy.dangerouslyAllowPrivateNetwork=truebrowser 工具可访问内网 → SSRF(AP-OC09)L1HIGH
gateway.controlUi.dangerouslyDisableDeviceAuth=true禁用 Control UI 鉴权 → 匿名 admin 访问L5HIGH

证据路径:dist/dangerous-config-flags-lTz7t-pV.js:collectEnabledInsecureOrDangerousFlags · dist/exec-defaults-F2zQAtOd.js · dist/cli-shared-BybrVDQR.js

Dim-3 · GuardRail 状态L4 SecurityChecker
安全检查器完整性
WEAK — 规则级 · 无模型级 · 输出层缺失
检查器类型覆盖绕过难度可禁用
sanitizeForPromptLiteralRulesChecker控制字符过滤(非语义)
wrapUntrustedPromptDataBlockRulesChecker部分渠道消息边界标注否(覆盖不全)
tool-policy-pipelineRulesChecker工具调用 allowlist/denylist易(bypassPermissions)
allowFromRulesChecker发件人 ID 白名单易(空配置=全通过)
Webhook 速率限制RulesCheckerWebhook 请求频率易(低速/重启)
GuardRail(LLM-based)完全缺失N/A
输出层检查完全缺失N/A
MCP 返回值信任验证完全缺失N/A
Dim-4 · 持久化能力L0 + L6 Gateway + L7 Environment
持久化向量评估
HIGH — 多路径跨会话持久
MEMORY.md 写入(Plugin LongTermMemory)
跨会话持久
WorkspaceContextFile.memory → 每次对话读入
SOUL.md / USER.md 篡改(AgentProfile 污染)
跨会话持久
AgentProfile.persona_definition 被替换
HEARTBEAT.md C2 指令注入(TRG-EVENT-HEARTBEAT)
周期性触发
心跳每次重读文件,ORP-OC-01
Cron 任务创建(croner 定时调度)
无限持续
L4 SecurityChecker Hook-B / L5 ContextPipeline
BOOTSTRAP.md 植入(冷启动优先前缀)
跨重启持久
dist/bootstrap-prompt-4ZAPcOdz.js,冷启动时优先注入
config.json 危险标志植入(bypassPermissions/full+no-ask)
永久权限提升
AP-OC08(RS=10.0,chained)核心危害路径,ORP-OC-02
恶意 npm Plugin 植入(supply chain)
持久执行
AP-OC07,L7.4 SupplyChain,Node.js 级权限
Dim-5 · 扩展危害能力映射到 MockAgent 真实资产
危害能力矩阵(v2:Harm 追踪到真实资产)
CRITICAL
危害类型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
v2026.4.21 安全修复(已缓解项)
修复项影响 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 直传 URLL1/L2✅ 已修复browser.ssrfPolicy.dangerouslyAllowPrivateNetwork 仍可手动开启
ORP 修订提案(OpenClaw 专属 Ontology 扩展)
ORP-OC-01
新增本体论标签:TRG-EVENT-HEARTBEAT
心跳唤醒触发器属于独立触发类型,与 TRG-EVENT-CRON(外部时钟)不同。心跳文件读取路径(L6 Gateway → L0 AgentCore)需在威胁模型中作为独立 PoisoningEntry 向量建模。建议在 Ontology TriggerType 枚举中新增 HEARTBEAT 值。
ORP-OC-02
新增权限标签:Perm-ACT-BYPASS-ALL
bypassPermissions 模式在当前 Ontology 中无对应标签。该模式将 L4 SecurityChecker 整层失效,需在权限标签体系中明确表示为"单一标志导致全 SC 失效"。建议新增 Perm-ACT-BYPASS-ALL 标签族并在 RiskScore 计算中增加惩罚因子。
ORP-OC-03
新增实体类型:WorkspaceContextFile
工作区上下文文件(SOUL/USER/MEMORY/HEARTBEAT/BOOTSTRAP 等)在 Ontology v6.0 中无对应实体类型(已提案为 L0 AgentCore 子类型)。这类文件的威胁特征(自动注入系统提示词 + 无语义过滤 + 跨会话持久 + 攻击者可通过工具写入)需要独立实体建模。建议新增 WorkspaceContextFile 类,属性含 injection_order / semantic_filter_applied / persistence_scope。