Repository navigation
Description
Parent: #244
Epic: #15
Severity: High
Execution mode: HITL for the proof mechanism, then AFK implementation
What to build
Require a fresh proof of the Owner identity before security-sensitive user administration. A stolen but still-valid Owner access token can currently create another Owner or reset another user password, turning a short-lived token theft into durable account control.
Define one coherent recent-authentication mechanism, such as current-password confirmation that returns a short-lived, audience-limited step-up grant. Keep break-glass recovery out of this browser flow. Classify the sensitive operations explicitly rather than applying an accidental blanket prompt to ordinary farm administration.
#283 secures first provisioning only; it does not solve post-login token theft.
Acceptance criteria
- The threat model and selected proof mechanism are documented before implementation, including lifetime, replay behavior, browser storage, and failure handling.
- Creating an Owner and resetting another privileged user password require a valid, recent step-up grant in addition to the normal Owner access token.
- The grant is short-lived, bound to the current account and user, unusable as a normal access token, and invalidated by password/security-stamp changes and logout.
- A stolen access token without the step-up proof receives a non-enumerating denial and cannot establish a replacement Owner.
- The SPA prompts only when a sensitive operation needs proof, never stores the entered password, and clears proof state on logout.
- API integration tests cover missing, expired, replayed, wrong-account, and revoked proofs.
- SPA tests cover success, cancel, expiry, and server rejection.
- User-visible security behavior is reflected in the Help page and glossary if terminology changes.
Blocked by
A short owner decision on the proof mechanism. Implementation is otherwise independent.
Activity
feat(api,web): base provisioning via migration + secure first-run adm…
fix(api): compare step-up logout revocation at tick precision
fix(web): clear the step-up password via the single dialog-reset path (…
feat(api,web): base provisioning via migration + secure first-run adm…
feat(api,web): require step-up authentication for privileged user adm…
fix(api): compare step-up logout revocation at tick precision
fix(web): clear the step-up password via the single dialog-reset path (…
feat(api,web): base provisioning via migration + secure first-run adm…
docs(web): add step-up authentication to the in-app glossary (#308)
6 remaining items
fix(api): emit LoginFailed/AccountLockedOut from the step-up password…
fix(api): hold the bootstrap advisory lock across the reads, not just…
fix(api): recover the ambiguous commit on every auth-token save (#269)
feat(api): bounded retry-on-failure for transient DB connection loss (#…
spec: rework around a credential epoch after review
spec: design user disable/enable and email change (#356, #357) (#358)
feat(api): redact sensitive log content and emit stable security even…
fix(users): close two role-change races, ship the missing SPA UI (#355)
fix(users): close two role-change races, ship the missing SPA UI (#355)
feat(api): promote/demote a user's role (#475)
docs: name every multi-instance blocker, and correct the silence claim
docs: pin the one-serving-instance deploy invariant (#271) (#484)