You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: SECURITY.md
+19Lines changed: 19 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -56,6 +56,7 @@ These are frequently reported but are typically closed with no code change:
56
56
- Authorized user-triggered local actions presented as privilege escalation. Example: an allowlisted/owner sender running `/export-session /absolute/path.html` to write on the host. In this trust model, authorized user actions are trusted host actions unless you demonstrate an auth/sandbox/boundary bypass.
57
57
- Reports that only show a malicious plugin executing privileged actions after a trusted operator installs/enables it.
58
58
- Reports that assume per-user multi-tenant authorization on a shared gateway host/config.
59
+
- Reports that only show quoted/replied/thread/forwarded supplemental context from non-allowlisted senders being visible to the model, without demonstrating an auth, policy, approval, or sandbox boundary bypass.
59
60
- Reports that treat the Gateway HTTP compatibility endpoints (`POST /v1/chat/completions`, `POST /v1/responses`) as if they implemented scoped operator auth (`operator.write` vs `operator.admin`). These endpoints authenticate the shared Gateway bearer secret/password and are documented full operator-access surfaces, not per-user/per-scope boundaries.
60
61
- Reports that assume `x-openclaw-scopes` can reduce or redefine shared-secret bearer auth on the OpenAI-compatible HTTP endpoints. For shared-secret auth (`gateway.auth.mode="token"` or `"password"`), those endpoints ignore narrower bearer-declared scopes and restore the full default operator scope set plus owner semantics.
61
62
- Reports that treat `POST /tools/invoke` under shared-secret bearer auth (`gateway.auth.mode="token"` or `"password"`) as a narrower per-request/per-scope authorization surface. That endpoint is designed as the same trusted-operator HTTP boundary: shared-secret bearer auth is full operator access there, narrower `x-openclaw-scopes` values do not reduce that path, and owner-only tool policy follows the shared-secret operator contract.
@@ -167,6 +168,24 @@ OpenClaw's security model is "personal assistant" (one trusted operator, potenti
167
168
- For company-shared setups, use a dedicated machine/VM/container and dedicated accounts; avoid mixing personal data on that runtime.
168
169
- If that host/browser profile is logged into personal accounts (for example Apple/Google/personal password manager), you have collapsed the boundary and increased personal-data exposure risk.
169
170
171
+
## Context Visibility and Allowlists
172
+
173
+
OpenClaw distinguishes:
174
+
175
+
-**Trigger authorization**: who can trigger the agent (`dmPolicy`, `groupPolicy`, allowlists, mention gates)
176
+
-**Context visibility**: what supplemental context is provided to the model (reply body, quoted text, thread history, forwarded metadata)
177
+
178
+
In current releases, allowlists primarily gate triggering and owner-style command access. They do not guarantee universal supplemental-context redaction across every channel/surface.
179
+
180
+
Current channel behavior is not fully uniform:
181
+
182
+
- some channels already filter parts of supplemental context by sender allowlist
183
+
- other channels still pass supplemental context as received
184
+
185
+
Reports that only show supplemental-context visibility differences are typically hardening/consistency findings unless they also demonstrate a documented boundary bypass (auth, policy, approvals, sandbox, or equivalent).
186
+
187
+
Hardening roadmap may add explicit visibility modes (for example `all`, `allowlist`, `allowlist_quote`) so operators can opt into stricter context filtering with predictable tradeoffs.
188
+
170
189
## Agent and Model Assumptions
171
190
172
191
- The model/agent is **not** a trusted principal. Assume prompt/content injection can manipulate behavior.
Copy file name to clipboardExpand all lines: docs/channels/groups.md
+22Lines changed: 22 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -36,6 +36,28 @@ requireMention? yes -> mentioned? no -> store for context only
36
36
otherwise -> reply
37
37
```
38
38
39
+
## Context visibility and allowlists
40
+
41
+
Two different controls are involved in group safety:
42
+
43
+
-**Trigger authorization**: who can trigger the agent (`groupPolicy`, `groups`, `groupAllowFrom`, channel-specific allowlists).
44
+
-**Context visibility**: what supplemental context is injected into the model (reply text, quotes, thread history, forwarded metadata).
45
+
46
+
By default, OpenClaw prioritizes normal chat behavior and keeps context mostly as received. This means allowlists primarily decide who can trigger actions, not a universal redaction boundary for every quoted or historical snippet.
47
+
48
+
Current behavior is channel-specific:
49
+
50
+
- Some channels already apply sender-based filtering for supplemental context in specific paths (for example Slack thread seeding, Matrix reply/thread lookups).
51
+
- Other channels still pass quote/reply/forward context through as received.
52
+
53
+
Hardening direction (planned):
54
+
55
+
-`contextVisibility: "all"` (default) keeps current as-received behavior.
56
+
-`contextVisibility: "allowlist"` filters supplemental context to allowlisted senders.
57
+
-`contextVisibility: "allowlist_quote"` is `allowlist` plus one explicit quote/reply exception.
58
+
59
+
Until this hardening model is implemented consistently across channels, expect differences by surface.
Copy file name to clipboardExpand all lines: docs/channels/matrix.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -590,6 +590,7 @@ Current behavior:
590
590
- The current trigger message is not included in `InboundHistory`; it stays in the main inbound body for that turn.
591
591
- Retries of the same Matrix event reuse the original history snapshot instead of drifting forward to newer room messages.
592
592
- Fetched room context (including reply and thread context lookups) is filtered by sender allowlists (`groupAllowFrom`), so non-allowlisted messages are excluded from agent context.
593
+
- This filtering is channel-level hardening behavior. Other channels may still expose supplemental context as received.
Copy file name to clipboardExpand all lines: docs/channels/msteams.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -302,6 +302,8 @@ The action is gated by `channels.msteams.actions.memberInfo` (default: enabled w
302
302
-`channels.msteams.historyLimit` controls how many recent channel/group messages are wrapped into the prompt.
303
303
- Falls back to `messages.groupChat.historyLimit`. Set `0` to disable (default 50).
304
304
- Fetched thread history is filtered by sender allowlists (`allowFrom` / `groupAllowFrom`), so thread context seeding only includes messages from allowed senders.
305
+
- Quoted attachment context (`ReplyTo*` derived from Teams reply HTML) is currently passed as received.
306
+
- In other words, allowlists gate who can trigger the agent; only specific supplemental context paths are filtered today.
305
307
- DM history can be limited with `channels.msteams.dmHistoryLimit` (user turns). Per-user overrides: `channels.msteams.dms["<user_id>"].historyLimit`.
Copy file name to clipboardExpand all lines: docs/channels/slack.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -354,6 +354,7 @@ Current Slack message actions include `send`, `upload-file`, `download-file`, `r
354
354
- Assistant thread status updates (for "is typing..." indicators in threads) use `assistant.threads.setStatus` and require bot scope `assistant:write`.
355
355
-`channel_id_changed` can migrate channel config keys when `configWrites` is enabled.
356
356
- Channel topic/purpose metadata is treated as untrusted context and can be injected into routing context.
357
+
- Thread starter and initial thread-history context seeding are filtered by configured sender allowlists when applicable.
357
358
- Block actions and modal interactions emit structured `Slack interaction: ...` system events with rich payload fields:
Copy file name to clipboardExpand all lines: docs/gateway/security/index.md
+23Lines changed: 23 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -169,6 +169,29 @@ If more than one person can DM your bot:
169
169
- Never combine shared DMs with broad tool access.
170
170
- This hardens cooperative/shared inboxes, but is not designed as hostile co-tenant isolation when users share host/config write access.
171
171
172
+
## Context visibility model
173
+
174
+
OpenClaw separates two concepts:
175
+
176
+
-**Trigger authorization**: who can trigger the agent (`dmPolicy`, `groupPolicy`, allowlists, mention gates).
177
+
-**Context visibility**: what supplemental context is injected into model input (reply body, quoted text, thread history, forwarded metadata).
178
+
179
+
In the current product, allowlists primarily gate triggers and command authorization. They are not a guaranteed universal redaction boundary for every supplemental context field on every channel.
180
+
181
+
Current behavior is channel-specific:
182
+
183
+
- Some channels already filter parts of supplemental context by sender allowlists.
184
+
- Other channels still pass supplemental context through as received.
185
+
186
+
Advisory triage guidance:
187
+
188
+
- Claims that only show "model can see quoted or historical text from non-allowlisted senders" are usually hardening and consistency findings, not auth or sandbox boundary bypasses by themselves.
189
+
- To be security-impacting, reports still need a demonstrated trust-boundary bypass (auth, policy, sandbox, approval, or another documented boundary).
190
+
191
+
Hardening direction:
192
+
193
+
- OpenClaw maintainers may introduce explicit context visibility modes such as `all`, `allowlist`, and `allowlist_quote` to make this behavior intentional and configurable across channels.
194
+
172
195
## What the audit checks (high level)
173
196
174
197
-**Inbound access** (DM policies, group policies, allowlists): can strangers trigger the bot?
0 commit comments