Opus finding
verifyTokenDetailed leaks expiry status before authenticating the payload bytes — but expiry check happens after HMAC verify so timing/info disclosure is bounded; however expired tokens with mismatched payload still report 'expired' incorrectly only if HMAC matches — which is fine. Real issue: expiry is read from the signed payload, but installationId/owner/repo type checks happen after exp check via parsed JSON — order is OK. (No finding here.)
lowmaintainabilitylow
- apps/web/lib/optin-token.ts:74-99
Self-check note that ended up not being a finding; on re-read, HMAC is verified before any payload field is trusted, so the exp branch is safe. Withdrawing.
Recommendation
No action.