-
-
Notifications
You must be signed in to change notification settings - Fork 80.7k
Gateway: authorize session mutations by operator scope, not client identity #110930
Copy link
Copy link
Closed
Closed
Copy link
Labels
P1High-priority user-facing bug, regression, or broken workflow.High-priority user-facing bug, regression, or broken workflow.bug:behaviorIncorrect behavior without a crashIncorrect behavior without a crashclawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.ClawSweeper found an open linked pull request for this issue.clawsweeper:needs-live-reproClawSweeper needs live local, crabbox, or manual validation to confirm this issue.ClawSweeper needs live local, crabbox, or manual validation to confirm this issue.clawsweeper:needs-security-reviewClawSweeper marked this issue as needing security-sensitive review.ClawSweeper marked this issue as needing security-sensitive review.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.impact:securitySecurity boundary, credential, authz, sandbox, or sensitive-data risk.Security boundary, credential, authz, sandbox, or sensitive-data risk.issue-rating: 🐚 platinum hermitGood issue quality with a plausible reproduction path needing some confirmation.Good issue quality with a plausible reproduction path needing some confirmation.maintainerMaintainer-authored PRMaintainer-authored PR
Description
Metadata
Metadata
Assignees
Labels
P1High-priority user-facing bug, regression, or broken workflow.High-priority user-facing bug, regression, or broken workflow.bug:behaviorIncorrect behavior without a crashIncorrect behavior without a crashclawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.ClawSweeper found an open linked pull request for this issue.clawsweeper:needs-live-reproClawSweeper needs live local, crabbox, or manual validation to confirm this issue.ClawSweeper needs live local, crabbox, or manual validation to confirm this issue.clawsweeper:needs-security-reviewClawSweeper marked this issue as needing security-sensitive review.ClawSweeper marked this issue as needing security-sensitive review.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.impact:securitySecurity boundary, credential, authz, sandbox, or sensitive-data risk.Security boundary, credential, authz, sandbox, or sensitive-data risk.issue-rating: 🐚 platinum hermitGood issue quality with a plausible reproduction path needing some confirmation.Good issue quality with a plausible reproduction path needing some confirmation.maintainerMaintainer-authored PRMaintainer-authored PR
Type
Fields
Priority
None yet
Problem
Gateway session mutation authorization has two independent gates:
operator scopes; then
or mode, regardless of those approved scopes.
The only identity exception is
openclaw-control-ui. That makes aclient-reported product label part of authorization and encourages third-party clients
to impersonate Control UI. PinchChat added a configurable client ID for this
workaround in
e8fe332.
Options
A. Authorize session mutations by negotiated scopes
Remove the WebChat identity guard. Keep the existing method policy:
operator.writefor lower-risk mutations such as organizational patch fields,checkpoint branch, and fork;
operator.adminfor destructive or high-risk mutations such as unrestricteddelete, compact, restore, rewind, branch switching, dispatch, and reclaim;
B. Keep the identity policy
Document a client ID/mode policy matrix and return a structured policy error.
This preserves the restriction but keeps authorization dependent on a
client-reported product identity.
Decision
Choose Option A. Negotiated scopes are the authorization contract. Client ID and
mode remain product/connection metadata, not a second session mutation ACL.
This does not change connection admission, device pairing, scope approval, or
gateway.controlUi.dangerouslyDisableDeviceAuth. No protocol or config surfacechanges.
Acceptance
using the Control UI client ID.
method scope registry.