fix(security): align browser audit with plugin policy#97732
Conversation
|
Codex review: needs real behavior proof before merge. Reviewed July 6, 2026, 9:11 PM ET / 01:11 UTC. Summary PR surface: Source -379, Tests -275, Docs +17, Other +560. Total -77 across 61 files. Reproducibility: yes. source-level: PR head checks raw plugin policy, while current startup auto-enable appends Browser to restrictive allowlists when a root Review metrics: 1 noteworthy metric.
Stored data model Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Proof guidance:
Risk before merge
Maintainer options:
Copy recommended automerge instructionNext step before merge
Security Review findings
Review detailsBest possible solution: Compute Browser audit availability from the same auto-enabled/effective plugin configuration that Gateway startup uses, then keep separate tests for no Browser config, explicit Browser config, denylist, and explicit disabled cases. Do we have a high-confidence way to reproduce the issue? Yes, source-level: PR head checks raw plugin policy, while current startup auto-enable appends Browser to restrictive allowlists when a root Is this the best way to solve the issue? No. Reusing the base policy is the right direction, but applying it before plugin auto-enable skips the effective startup state; the safer fix is to reuse the effective plugin activation path or a small helper derived from it. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against 97777a70268a. Label changesLabel changes:
Label justifications:
Evidence reviewedPR surface: Source -379, Tests -275, Docs +17, Other +560. Total -77 across 61 files. View PR surface stats
Security concerns:
Acceptance criteria:
What I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
|
|
@clawsweeper re-review CI/check state has finished since the last review note. Author-side state:
|
|
🦞🧹 I asked ClawSweeper to review this item again. |
c98ea86 to
b26445c
Compare
Co-authored-by: Alba María Téllez Fernández <[email protected]>
Co-authored-by: Alba María Téllez Fernández <[email protected]>
421dbe9 to
a2ad2c8
Compare
|
Land-ready proof for
No runtime activation, Browser authorization, config, schema, protocol, or migration behavior changes. |
|
Merged via squash.
|
* fix(security): respect plugin policy in browser audit summary * fix(security): reuse browser plugin activation policy Co-authored-by: Alba María Téllez Fernández <[email protected]> * fix(security): keep browser config behind plugin policy Co-authored-by: Alba María Téllez Fernández <[email protected]> * chore(security): keep release notes in PR body --------- Co-authored-by: Peter Steinberger <[email protected]>
* fix(security): respect plugin policy in browser audit summary * fix(security): reuse browser plugin activation policy Co-authored-by: Alba María Téllez Fernández <[email protected]> * fix(security): keep browser config behind plugin policy Co-authored-by: Alba María Téllez Fernández <[email protected]> * chore(security): keep release notes in PR body --------- Co-authored-by: Peter Steinberger <[email protected]>
What Problem This Solves
openclaw security auditcould reportbrowser control: enabledand flag Browser exposure for small-model agents even when global plugin policy prevented the bundled Browser plugin from running. The summary treated omitted Browser config as enabled without applyingplugins.enabled,plugins.allow,plugins.deny, orplugins.entries.browser.enabled.Why This Change Was Made
The rewritten change uses the existing canonical manifest-owner base policy instead of duplicating plugin-policy rules in security code. Browser plugin ids are normalized case-insensitively, matching startup behavior, and one shared predicate now drives both:
summary.attack_surfaceBrowser-control reportingmodels.small_paramsBrowser-tool exposure reportingGlobal plugin policy remains authoritative. Explicit
browserconfig selects Browser behavior but does not bypass a restrictive plugin allowlist; operators who useplugins.allowmust includebrowserto expose Browser control.This does not change the per-agent trust boundary. The small-model check still evaluates each agent's sandbox and tool policy independently after global Browser availability is established.
User Impact
web=[browser]risk classification when Browser is globally unavailable.Browser/BROWSERpolicy entries are interpreted the same way as Gateway startup.Evidence
Final PR head:
a2ad2c8e12e2e5f95bc1dafaa689f1342c222596pnpm test src/security/audit-summary.test.ts src/security/audit-extra.sync.test.ts— 16/16 passed.run_3fb78ed75c91on fresh public-network leasecbx_58fe8eb9e642(brisk-krill,c7a.8xlarge) exercised the exact pre-rebase headc98ea86a471667056ad20e8c5e88462243376b59.src/security/**stable patch idd87df79373b19924dc57e146d0f084e0dbb3a9c9; later changes only rebased onto currentmainand removed the release-owned root changelog line required by native prepare policy.plugins.allow=["openai"]): audit reportedbrowser control: disabled, the small agent reportedweb=[off], Browser inventory was disabled, a real Gateway started, and anopenai/gpt-5.4agent returnedSECURITY_POLICY_OK.plugins.allow=["openai","browser"],browser.enabled=true): audit reportedbrowser control: enabled, the small agent reportedweb=[browser], a real Gateway and managed Chrome started, and anopenai/gpt-5.4agent used the Browser tool against the live page and returnedSECURITY_BROWSER_OK.origin/main: no accepted/actionable findings, confidence 0.86.a2ad2c8e12e2e5f95bc1dafaa689f1342c222596.Scope
This is an audit-reporting correction. It does not change plugin activation, Browser startup, Browser authorization, per-agent tool policy, or Gateway behavior.