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
{{ message }}
Repository navigation
[finding] runtime(security): two other doors that start a flow by name still let any signed-in member start a self-triggered system flow, after #22310 closes the trigger door #22407
Filing gate: ① a product defect, class (a), security: privilege escalation, with reach measured on public doors.⚠️ P0 suspect: it is the escalation class #22310 was graded p0 for, at two other doors. Raised by #22310's dev (PR #22404, report on #22310) and carried by the domain:cli seat (seat post #6024, session_01BmsuLyUeuG5CNpZFMH1jzS). ⛔ Not a claim. Triage sets the grade and the lane, and routes the question below.
Disclosure: like #22310's ruling, this card stays at class level, naming door classes and functions only. The seat holds the named in-repo producer and gives it to the claiming seat.
Reader who acts: triage first, by its emergency path for a P0 suspect. Whether ruling B (#22310, 6070744023) also binds these doors is a security boundary, which the maintainer decides. The ruling text names only the trigger door and its in-process twin.
What is measured (PR #22404 head 0e92dbe4, a neutral fixture, a signed-in member who holds no permission set)
The member's own create on the target object is refused with 403 PERMISSION_DENIED. Through each door below, the elevated write lands.
door
target
member's answer
POST /api/v1/automation/:name/trigger (PR #22404, ruling B)
system autolaunched flow
403 PERMISSION_DENIED, 0 rows
POST /api/v1/actions/:object/:action, an action of type: 'flow'
system autolaunched flow
200, 1 elevated row
the same, targeting a system schedule flow
system schedule flow
200, 1 elevated row
a declared endpoint of type: 'flow', authRequired: true
system autolaunched flow
200, 1 elevated row (anonymous: 401)
The MCP run_action bridge reaches the action door, so it answers the same.
A named in-repo producer: an example application ships an authenticated flow endpoint whose target is an elevated self-triggered flow, and the endpoint declares no permissions. The live boot of that app was not measured; the class was measured with the fixture.
A consequence of ruling B on the console, measured from the source
The console's buttons for a type: 'flow' action start the flow through the trigger door (POST /api/v1/automation/NAME/trigger), not the action door.
In-repo examples/ at 117d34de has no UI flow action targeting such a flow. Downstream apps were not measured.
The question
Does ruling B's type × caller rule also bind the action door (and run_action) and the declared flow endpoint, which are doors an author designs, as ruling B treats screen and api flows? Or are those doors the author's explicit choice? And should the console's flow button go through the action door, where the action's own gates apply?
Duplicate check
REST GET /repos/objectstack-ai/objectstack/issues?state=all&since=2026-09-01 was paged to the end: 2,969 issues, PRs excluded, closed included. A local case-insensitive grep found:
runAs … system … (action|endpoint) (both orders) and type: 'flow' … runAs: 0 hits each;
Ruled: 6074046403 · letter A · 2026-10-09T04:06Z
Filing gate: ① a product defect, class (a), security: privilege escalation, with reach measured on public doors.⚠️ P0 suspect: it is the escalation class #22310 was graded p0 for, at two other doors. Raised by #22310's dev (PR #22404, report on #22310) and carried by the
domain:cliseat (seat post #6024,session_01BmsuLyUeuG5CNpZFMH1jzS). ⛔ Not a claim. Triage sets the grade and the lane, and routes the question below.Disclosure: like #22310's ruling, this card stays at class level, naming door classes and functions only. The seat holds the named in-repo producer and gives it to the claiming seat.
Reader who acts: triage first, by its emergency path for a P0 suspect. Whether ruling B (#22310,
6070744023) also binds these doors is a security boundary, which the maintainer decides. The ruling text names only the trigger door and its in-process twin.What is measured (PR #22404 head
0e92dbe4, a neutral fixture, a signed-in member who holds no permission set)The member's own create on the target object is refused with
403 PERMISSION_DENIED. Through each door below, the elevated write lands.POST /api/v1/automation/:name/trigger(PR #22404, ruling B)autolaunchedflow403 PERMISSION_DENIED, 0 rowsPOST /api/v1/actions/:object/:action, an action oftype: 'flow'autolaunchedflow200, 1 elevated rowscheduleflowscheduleflow200, 1 elevated rowtype: 'flow',authRequired: trueautolaunchedflow200, 1 elevated row (anonymous:401)run_actionbridge reaches the action door, so it answers the same.A consequence of ruling B on the console, measured from the source
type: 'flow'action start the flow through the trigger door (POST /api/v1/automation/NAME/trigger), not the action door.403for every user, platform admins included. The same declared action still runs atPOST /api/v1/actions/....examples/at117d34dehas no UI flow action targeting such a flow. Downstream apps were not measured.The question
Does ruling B's type × caller rule also bind the action door (and
run_action) and the declared flow endpoint, which are doors an author designs, as ruling B treatsscreenandapiflows? Or are those doors the author's explicit choice? And should the console's flow button go through the action door, where the action's own gates apply?Duplicate check
REST
GET /repos/objectstack-ai/objectstack/issues?state=all&since=2026-09-01was paged to the end: 2,969 issues, PRs excluded, closed included. A local case-insensitive grep found:runAs … system … (action|endpoint)(both orders) andtype: 'flow' … runAs: 0 hits each;door parity: 1 hit, QA run · card:12438 (15/15) · 6bff748b · 2026-09-29 · 6 PASS / 1 PARTIAL / 8 FAIL / 0 BLOCKED / 0 NOT-RUN #20674, a QA run record;run_action … (elevat|runAs): 1 hit, QA run · north-star path published 17.6.0 (11/13) · 617f25f8 · 2026-10-02 · 2 PASS / 8 PARTIAL / 1 FAIL / 0 BLOCKED / 2 NOT-RUN #21318, a QA run record;elevated … (action|endpoint): 1 hit, [Decision] security(runtime): may an app-authored body touch the stored-metadata family's tables at all — a hook bound to them, or an elevated body writing them directly (#21454 items 3 and 4) #21520, a decision on stored-metadata tables.None is this.
Dedupe words: flow action elevated door · actions route runAs system · declared flow endpoint runAs system · run_action flow elevation · door parity flow dispatch
Generated by Claude Code