Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L
PR:L reflects that a previously-issued owner JWT is required; AV:N and AC:L are appropriate for a straightforward token replay over HTTP with no special conditions.
Primary rating from Vendor (TuranSec).
CVSS VectorVendor: TuranSec
Lifecycle Timeline
5DescriptionCVE.org
Shiori's CheckToken function (internal/domains/auth.go) validates only the JWT's HMAC signature and returns the embedded claims.Account object unmodified, never re-fetching the account from the database. No session store or token-revocation mechanism exists in the codebase. Deleting an account or demoting it from owner to a regular role has no effect on tokens already issued to that account - a deleted or demoted owner's token continues authenticating with its original owner-level privileges until natural expiry, which can be up to 30 days with 'remember me' enabled.
AnalysisAI
Privilege persistence in Shiori, the self-hosted bookmarks manager (go-shiori/shiori), allows a deleted or demoted owner to continue authenticating with full owner-level privileges for up to 30 days after account revocation. The root cause is that CheckToken in internal/domains/auth.go validates only the JWT HMAC signature and trusts the embedded claims without re-querying the database, and no token revocation or session store mechanism exists anywhere in the codebase. An attacker who previously held an owner-level account - such as a terminated employee - retains full read/write access to all bookmarks and administrative functions until the token's natural expiry. No active exploitation confirmed (no CISA KEV listing); no public exploit code identified at time of analysis.
Technical ContextAI
Shiori is a self-hosted, Go-based bookmarks manager (CPE: cpe:2.3:a:go-shiori:shiori:*:*:*:*:*:*:*:*). It uses JSON Web Tokens (JWT) for session management. The flaw maps to CWE-613 (Insufficient Session Expiration): the CheckToken function in internal/domains/auth.go validates the HMAC signature to confirm the token is cryptographically authentic but immediately returns the embedded claims.Account object as authoritative - without querying the database to confirm the account still exists or retains its current role. Because there is no server-side session store and no token blocklist or revocation endpoint, the server has no mechanism to invalidate an issued token before its TTL expires. With 'remember me' enabled, this TTL extends to 30 days. The trust boundary violation is that the JWT claim is treated as the ground truth for identity and role, while the database - the actual source of truth for account state - is never consulted post-issuance.
RemediationAI
No vendor-released patch has been identified at time of analysis - no fixed version appears in the available references or EUVD-2026-53203 data. Administrators should monitor https://github.com/go-shiori/shiori for a remediation release that introduces server-side token revocation (e.g., a token blocklist or session store) or enforces database re-validation on each authenticated request in CheckToken. As a compensating control, disabling the 'remember me' feature reduces maximum token lifetime and narrows the exploitation window, though this does not eliminate the flaw. Restricting Shiori access to trusted internal networks or VPN-only reduces exposure in the event a former user retains a token. For deployments with sensitive bookmarks, consider rotating the JWT signing secret (HMAC key) when revoking an owner account - this invalidates all previously issued tokens system-wide but also forces all current users to re-authenticate. Note that the signing-key rotation approach is a blunt instrument with operational impact. A true fix requires implementing server-side session tracking or per-request database role verification in the application code.
Vertical privilege escalation in Shiori (go-shiori), the self-hosted Go bookmark manager, lets any authenticated low-pri
Server-Side Request Forgery in Shiori's bookmark download function allows any authenticated user to force the server to
A lack of rate limiting in the login page of shiori v1.7.4 and below allows attackers to bypass authentication via a bru
Same weakness CWE-613 – Insufficient Session Expiration
View allSame technique Information Disclosure
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-53203
GHSA-m8xp-ww9g-3j6j