Require fresh authorization and audit Human Gate decisions #1421

Closed
opened 2026-08-26 06:01:06 +00:00 by timmy · 0 comments
Owner

Evidence

Human Gate Release/Hold decisions can authorize a release-candidate override, but POST /api/v1/human-gates/{gate_id}/decision currently accepts an ordinary authenticated session and does not emit a central security event. Existing merge, consequential review, issue-close, deletion, and rollback flows require a one-time fresh-authorization grant. No open/closed issue title or recent commit covers authorization or central auditing for Human Gate decisions.

User impact

A stolen unlocked dashboard session can no longer release or hold a candidate without re-authentication. Every completed decision becomes visible in Security Activity without recording private reason text.

Acceptance tests

  • Operator mode rejects a Human Gate decision without a valid X-Step-Up-Grant using action decide_human_gate and target equal to the gate ID.
  • The normal browser boundary completes passkey/recovery authorization and retries the exact decision request.
  • A valid grant is single-use and permits the decision.
  • A successful Release or Hold records one completed encrypted security event tied to the gate ID.
  • If the security journal cannot reserve the event, the decision fails closed and the gate remains pending.
  • If the gate decision fails validation/conflict, its pending audit reservation is discarded.
  • Focused tests and the full suite pass.
## Evidence Human Gate Release/Hold decisions can authorize a release-candidate override, but `POST /api/v1/human-gates/{gate_id}/decision` currently accepts an ordinary authenticated session and does not emit a central security event. Existing merge, consequential review, issue-close, deletion, and rollback flows require a one-time fresh-authorization grant. No open/closed issue title or recent commit covers authorization or central auditing for Human Gate decisions. ## User impact A stolen unlocked dashboard session can no longer release or hold a candidate without re-authentication. Every completed decision becomes visible in Security Activity without recording private reason text. ## Acceptance tests - Operator mode rejects a Human Gate decision without a valid `X-Step-Up-Grant` using action `decide_human_gate` and target equal to the gate ID. - The normal browser boundary completes passkey/recovery authorization and retries the exact decision request. - A valid grant is single-use and permits the decision. - A successful Release or Hold records one completed encrypted security event tied to the gate ID. - If the security journal cannot reserve the event, the decision fails closed and the gate remains pending. - If the gate decision fails validation/conflict, its pending audit reservation is discarded. - Focused tests and the full suite pass.
timmy self-assigned this 2026-08-26 06:01:07 +00:00
timmy closed this issue 2026-08-26 06:22:51 +00:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: stackchain/stackchain-dashboard#1421
No description provided.