Agent 实体全景 — OC0421_WithOfficialCC v2

OpenClaw v2026.4.21 · ATA Ontology v6.0 L0-L7 架构层映射(v2 修订版)
修订:使用 Ontology v6.0 L0-L7 标准对象名称;补充 MockAgent 资产清单;Source 路径精细化到具体函数/模块
⚠️ 非标准本体论对象:TRG-EVENT-HEARTBEAT(ORP-OC-01)· Perm-ACT-BYPASS-ALL(ORP-OC-02)· WorkspaceContextFile(ORP-OC-03) — 完整 ORP 提案见页底
MockAgent 真实世界资产清单(OC0421_MockUser)
本地文件系统资产
Sensitive-CREDENTIAL: ~/.ssh/id_rsa(SSH 私钥)
Sensitive-CREDENTIAL: ~/.openclaw/config.json(含 TELEGRAM_BOT_TOKEN / OPENAI_API_KEY / ANTHROPIC_API_KEY)
Sensitive-CREDENTIAL: ~/.aws/credentials(AWS IAM 访问密钥)
Sensitive-DATA: ~/Documents/(~20GB 个人文档、合同、财务记录)
通讯渠道资产
Sensitive-PII: Gmail 账户(联系人 500+,历史邮件 5000+ 封含个人/商业机密)
Sensitive-PII: Telegram 账户(联系人 200+,群组 10 个)
Sensitive-PII: WhatsApp 账户(联系人 300+,群组 20 个,含商业客户)
Sensitive-PII: Slack 工作区(团队成员 50+,商业项目讨论)
L0 · AgentCore
Agent 核心对象(WHO)
Ontology v6.0: AgentCore — persona · model · guard_rail · prompt_template
属性Ontology v6.0 映射证据
agent_idAgentCore.idOC0421_WithOfficialCC
agent_typeAgentCore.typePersonal AI GatewayREADME.md
modelAgentCore.modelClaude / GPT-4o(可插拔)package.json
channel_countAgentCore.channels20+(统一控制平面)README.md
guard_railGuardRailNone — SC-GAP-01全代码库未见
rules_checkerRulesCheckerallowFrom + tool-policy + hooks-policy + sanitize见 Layer 3
self_evolveSelfEvolveNone(exec/write 工具间接实现)dist/pi-tools-BYoC5bpq.js
L2 · Capabilities
能力空间(POWERS)
Ontology v6.0: tool_space · skill_space · long_term_memory · extended_assets
1.1 工作区上下文文件 WorkspaceContextFile(ORP-OC-03) — 直接注入 AgentProfile.system_prompt
文件Ontology v6.0 映射注入函数注入顺序攻击意义
SOUL.md AgentProfile.persona_definition buildProjectContextSection order=20 覆写 → Agent 人格永久篡改(AP-OC06)
MEMORY.md LongTermMemory.summary_buffer buildMemoryPromptSection order=70 最高优先级 覆写 → 最高优先级跨会话感染(AP-OC07/10)
HEARTBEAT.md AgentProfile.dynamic_context TRG-EVENT-HEARTBEAT buildHeartbeatSection(动态) 每次心跳强制重读 C2 持久化 → 无用户在线要求(AP-OC01)
USER.md AgentProfile.user_context buildProjectContextSection order=40 覆写 → 用户信息篡改
AGENTS.md AgentProfile.subagent_registry buildProjectContextSection order=10 覆写 → 子代理行为篡改
BOOTSTRAP.md AgentProfile.bootstrap_prefix buildBootstrapSection 首次运行 覆写 → 初始化阶段控制
CONTEXT_FILE_ORDER: AGENTS(10)→SOUL(20)→IDENTITY(30)→USER(40)→TOOLS(50)→BOOTSTRAP(60)→MEMORY(70)
sanitizeForPromptLiteral: 仅过滤控制字符,不防语义注入 → SC-GAP-02
1.2 ToolSpace(工具空间)
工具Ontology v6.0 映射危险等级默认约束证据
execToolSpace.code_executorCRITICAL无 Docker → security="full", ask="off"dist/exec-defaults-F2zQAtOd.js
writeToolSpace.file_writerHIGHworkspaceOnly 默认 true(可配为 false)dist/pi-tools-BYoC5bpq.js
apply_patchToolSpace.file_patcherHIGH同上dist/pi-tools-BYoC5bpq.js
messageToolSpace.channel_messengerHIGH无跨渠道隔离dist/system-prompt-BRx_74d7.js
subagentsToolSpace.subagent_delegatorHIGH继承父 Agent 权限dist/system-prompt-BRx_74d7.js
readToolSpace.file_readerMEDworkspaceOnly 默认 truedist/pi-tools-BYoC5bpq.js
1.3 记忆系统
类型Ontology v6.0 对象实现证据
短期记忆ShortTermMemory会话内 LLM context window
长期记忆LongTermMemoryPlugin-based(registerMemoryCapability);可写 MEMORY.md(order=70)dist/memory-state-KSM4P5jG.js
情节记忆EpisodicMemory不存在
L3 · Channel
控制平面入口(CONTROL PLANE)
Ontology v6.0: DMChannel · WebhookChannel · EmailHookChannel — 20+ 渠道 · allowFrom 漏洞
渠道Ontology 映射鉴权机制关键缺陷证据
WhatsApp DM/GroupChannel.instant_messengermergeDmAllowFromSourcesallowWhenEmpty=true 全放行dist/allow-from-ClF_LMu8.js
Telegram DM/GroupChannel.instant_messengerisSenderIdAllowed同上dist/allow-from-ClF_LMu8.js
Slack / DiscordChannel.team_messengergroupAllowFrom同上dist/allow-from-ClF_LMu8.js
GmailChannel.emailallowUnsafeExternalContent邮件全文注入,无净化dist/dangerous-config-flags-lTz7t-pV.js
WebhookChannel.webhook_receiverrate limiter(内存)allowRequestSessionKey=true → session key 泄露dist/webhook-memory-guards-0h6_GER-.js
WebChatChannel.web_ui设备鉴权(可禁用)dangerouslyDisableDeviceAuthdist/dangerous-config-flags-lTz7t-pV.js
// dist/allow-from-ClF_LMu8.js
function isSenderIdAllowed(allow, senderId, allowWhenEmpty) {'{'} if (!allow.hasEntries) return allowWhenEmpty; // 空配置=全放行
if (allow.hasWildcard) return true; // "*" 允许所有人
return allow.entries.includes(senderId);
{'}'}
L4 · SecurityChecker
安全拦截层(GUARD)
Ontology v6.0: security_checker · Hook-A(输入)· Hook-B(工具返回)— 三维分析:覆盖范围 × 激活率 × 可配置性
SC 组件类型覆盖范围默认启用绕过/禁用方式状态
GuardRail(模型级) GuardRail 不存在 SC-GAP-01
allowFrom RulesChecker DM + Group 渠道入口 需配置(空=全放行) allowWhenEmpty=true SC-GAP-03
sanitizeForPromptLiteral RulesChecker 工作区文件 → system prompt 默认启用 仅过滤控制字符,语义注入无效 SC-GAP-02
tool-policy-pipeline RulesChecker 所有工具调用 默认启用 --permission-mode bypassPermissions Perm-ACT-BYPASS-ALL 可全绕过
hooks-policy RulesChecker agent ID 白名单 需配置 通配符 "*" 全放行 配置即绕过
webhook rate limiter RulesChecker Webhook 入口 120/min 仅内存,重启清零 持久性弱
L6 · Gateway/Dispatcher
调度与触发入口(ENTRY & SCHEDULING)
Ontology v6.0: gateway · cron_jobs · heartbeat · lifecycle_hooks · file_watch
触发机制Ontology 映射攻击意义证据
心跳轮询(定时) TRG-EVENT-HEARTBEAT(ORP-OC-01) DYNAMIC_CONTEXT_FILE_BASENAMES 强制重读 HEARTBEAT.md → C2 持久化(AP-OC01) dist/heartbeat-wake-B8UNwbeh.js
用户消息(直接) Trigger.user_message 标准 DM/Group 消息触发(AP-OC02/03/06/09) dist/message-hook-mappers-DZ_jp2sF.js
Webhook(HTTP POST) Trigger.webhook(T-AUTO=1.5) T-AUTO 无需用户在线;allowRequestSessionKey → session key 泄露(AP-OC05) dist/monitor.webhook-DikDNsr1.js
Cron 调度 Trigger.schedule schedule.kind={at/every/cron} → croner 库 dist/schedule-CfI3h5dr.js
Bootstrap 模式 Trigger.bootstrap BOOTSTRAP.md 存在 → 首次运行特殊前缀 dist/bootstrap-prompt-4ZAPcOdz.js
L1 · Config & Permissions
配置与权限管理(RULES)
Ontology v6.0: config.json · permission_mode · tool_policy_rules · dangerous_patterns · sc_config
配置项危险含义对应 AP证据
hooks.gmail.allowUnsafeExternalContent=trueGmail 邮件全文注入,无净化AP-OC04dist/dangerous-config-flags-lTz7t-pV.js
hooks.allowRequestSessionKey=trueWebhook 响应包含 session keyAP-OC05dist/dangerous-config-flags-lTz7t-pV.js
browser.ssrfPolicy.dangerouslyAllowPrivateNetwork=true允许访问私有网络 SSRFAP-OC09dist/dangerous-config-flags-lTz7t-pV.js
tools.fs.workspaceOnly=false文件系统工具可操作工作区外AP-OC03dist/dangerous-config-flags-lTz7t-pV.js
Plugin 供应链(npm)registerMemoryCapability 无签名验证 → LongTermMemory 投毒AP-OC07dist/pi-tools-BYoC5bpq.js
MCP 服务器接入MCPToolResult 未经 sanitize → ToolResult 注入AP-OC10dist/pi-tools-BYoC5bpq.js
L7.1 · ExecutionEnv
执行环境(WORLD · 本地沙箱)
Ontology v6.0: L7.1 ExecutionEnv — Docker/VM/bare-metal · bypassPermissions · resolveExecDefaults
属性有 Docker无 DockerbypassPermissions 激活后
exec security security="deny" security="full" 同 full,pipeline 清空
exec ask ask="confirm" ask="off"(无确认) ask="off"(永久)
tool-policy-pipeline 有效 有效 整体跳过
// dist/exec-defaults-F2zQAtOd.js: resolveExecDefaults()
// 无 Docker → security defaults to "full", ask = "off"
// dist/cli-shared-BybrVDQR.js
CLAUDE_BYPASS_PERMISSIONS_MODE = "bypassPermissions" // 跳过所有 tool-policy 检查
L7.4 · SupplyChain
供应链(WORLD · v2026.4.21 修复项)
Ontology v6.0: L7.4 SupplyChain — NpmRegistry · MCPMarket · SkillHub · 已修复项 vs 未修复残留
修复项状态意义
enforceOwnerForCommands 绕过(#69774)v2026.4.21 已修
gateway websocket broadcast scope-gatingv2026.4.21 已修WebSocket 广播横向传播面关闭
MINIMAX_API_HOST 工作区 env 注入已修
OPENCLAW_* 密钥阻断已修
message 工具多渠道无隔离未修复(v2 残留)AP-OC02 仍有效
allowWhenEmpty 开放默认值未修复(v2 残留)AP-OC01/02/03/06/09 前提
bypassPermissions 模式设计有意(调试用)AP-OC08 核心向量
ORP 提案(Ontology Reference Proposal)— 完整声明
ORP-OC-01
TRG-EVENT-HEARTBEAT — 心跳触发器
提议将 OpenClaw 心跳唤醒机制作为独立触发类型。区别于 TRG-RULE-SCHEDULE(用户配置的 cron),心跳触发是 Agent 系统内置的背景唤醒,且 DYNAMIC_CONTEXT_FILE_BASENAMES 强制重读动态指令文件(不走缓存)。攻击者写入 HEARTBEAT.md 后,每次心跳周期自动执行恶意指令,无需用户在线。归属:TAG_SYSTEM v1.8 → TRG- 触发机制族。
ORP-OC-02
Perm-ACT-BYPASS-ALL — 全权限绕过
提议将 bypassPermissions 模式作为独立权限标签,区别于单条规则绕过的 Perm-ACT-BYPASS。激活方式:--permission-mode bypassPermissions。效果:tool-policy-pipeline 整体跳过,所有工具调用无需确认。AP-OC08 利用此机制实现链式权限提升(chained on AP-OC03,修正后 RiskScore 10.0)。归属:TAG_SYSTEM v1.8 → Perm- 权限族。
ORP-OC-03
WorkspaceContextFile — 工作区上下文文件
提议将"可写文件直接注入系统提示词"的路径作为 AgentProfile 的子类型对象。每个 WorkspaceContextFile 都是潜在 PoisoningEntry 目标(如果攻击者能写入)。8 个实例:SOUL.md / USER.md / MEMORY.md / HEARTBEAT.md / AGENTS.md / TOOLS.md / IDENTITY.md / BOOTSTRAP.md。归属:Ontology v6.0 L0(AgentCore)子类型 → AgentProfile 子类型。