GHSA-w6p7-2fxx-4f44: Pocket ID: OIDC refresh token flow bypasses authorization revocation, account disabling, and group restrictions
OIDC Refresh Token Flow Bypasses Authorization Revocation, Account Disabling, and Group Restrictions
Summary
The createTokenFromRefreshToken function (oidc_service.go:451) validates the refresh token's cryptographic integrity but does not re-validate the user's current authorization state before issuing new tokens. This allows three bypasses:
1. Authorization revocation bypass: After a user revokes an OIDC client's authorization, the client can continue refreshing tokens indefinitely because RevokeAuthorizedClient does not delete associated refresh tokens, and the refresh flow does not check if the authorization record still exists.
2. Disabled user bypass: After an admin disables a user account, pre-existing refresh tokens continue to work because the OIDC token endpoint does not check user.Disabled. Session-based access is properly blocked by auth middleware, but the OIDC refresh path bypasses it entirely.
3. Group restriction bypass: After removing a user from an OIDC client's allowed user groups, the refresh token continues to work because createTokenFromRefreshToken does not call IsUserGroupAllowedToAuthorize.
Each refresh rotates the token with a fresh 30-day expiry, enabling perpetual access.
Target
- Repository: pocket-id/pocket-id
- Version: HEAD (626adbf), also affects v2.5.0 and all versions with refresh token support
Root Cause
createTokenFromRefreshToken (oidc_service.go:451-547) performs the following checks on a refresh request:
1. Verify the signed refresh token JWT (line 457) -- checked
2. Verify client credentials (line 467) -- checked
3. Look up stored refresh token by hash, expiry, user_id, client_id (line 478-495) -- checked
4. Verify refresh token belongs to the requesting client (line 498) -- checked
It does NOT check:
- Whether a UserAuthorizedOidcClient record still exists for the user-client pair -- MISSING
- Whether user.Disabled is false -- MISSING
- Whether IsUserGroupAllowedToAuthorize passes for group-restricted clients --
Details
Original advisory: https://github.com/advisories/GHSA-w6p7-2fxx-4f44
Exploitation outlook
EPSS (FIRST.org) estimates each CVE’s probability of exploitation in the next 30 days — here is the CSIRTS.com read on those numbers.
- Low exploitation riskCVE-2026-439830.25% 30-day exploitation probability — currently an unlikely target, but scores change as exploit code circulates. Riskier than 16% of all scored CVEs.
Referenced CVEs
| CVE | CSIRTS overview | External |
|---|---|---|
| CVE-2026-43983 | coverage & exploitation status | NVD · CVE.org |
More from GitHub Security Advisories
- mediumGHSA-jr6p-8pjj-mfx6: Capsule has an incomplete fix of CVE-2026-22872: TenantResource RawItems and Generators s…2026-07-31
- mediumGHSA-68cj-mvg9-rgm2: Capsule: CapsuleConfiguration NodeMetadata regex fields lack webhook validation, allowing…2026-07-31
- mediumGHSA-ff84-5f28-78qj: re2: Out-of-bounds heap read in `exec`/`test`/`match` via attacker-influenced `lastIndex`…2026-07-31
- mediumGHSA-6hxr-mr5r-9836: re2: Global `String.prototype.match` with an empty-matchable pattern never advances → inf…2026-07-31
- mediumGHSA-x83g-979r-f5fh: Sylius Mollie Plugin has unauthenticated IDOR that leaks order token and customer PII2026-07-31