-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Labels
security:highHigh severity security issueHigh severity security issue
Description
Summary
Refresh tokens are not bound to the client that originally received them.
Evidence
- Session storage lacks
client_idbinding for refresh token ownership. packages/api/src/controllers/user/token.tsrefresh flow accepts suppliedclient_idwithout enforcing original issuing client match.
Security Impact
A stolen refresh token issued to one client can be replayed by another valid client, enabling cross-client token swapping.
Required Fix
- Persist issuing
client_idwith session/refresh token records. - On refresh, require authenticated client to match stored client identity.
- Reject mismatched client refresh attempts.
Acceptance Criteria
- Refresh token records include issuing
client_id. - Refresh succeeds only for original client.
- Tests validate mismatch rejection paths.
Source
Security Review dated 2026-02-15, Finding 4 (High).
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
security:highHigh severity security issueHigh severity security issue