
PoC: Shiori JWT CheckToken non ricontrolla mai lo stato dell'account (CVE-2026-71206, Alto 8.2)
Prodotto: go-shiori/shiori
File: internal/domains/auth.go
CWE: CWE-613 — Scadenza della sessione insufficiente
CVSS 3.1: AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L — 8.2 (Alto)
CNA: Turan Security · Scheda CVE
La funzione CheckToken di Shiori (internal/domains/auth.go) valida solo la firma HMAC del JWT e restituisce l'oggetto claims.Account incorporato senza modifiche — non recupera mai l'account dal database a ogni richiesta. Non esiste alcun archivio di sessioni o meccanismo di revoca dei token in nessuna parte del codebase.
Una volta emesso un JWT, questo rimane pienamente valido per tutta la sua durata, indipendentemente da ciò che accade all'account in seguito. Se un amministratore elimina un utente, lo declassa, o la password dell'utente viene ruotata dopo una sospetta compromissione, qualsiasi JWT emesso per quell'account prima della modifica continua ad autenticare correttamente con i claims originali (ruolo, ID account, ecc.) incorporati nel token — non esiste alcuno stato lato server da invalidare.
POST /api/v1/auth/login).GET /api/bookmarks
Authorization: Bearer <original JWT>
CheckToken non controlla mai lo stato corrente del DB, solo la firma.CheckToken considera il payload del JWT come fonte di verità per lo stato dell'account, invece di trattarlo come una credenziale bearer da rivalidare contro il database (o da verificare contro una lista di revoca) a ogni utilizzo.
Recupera nuovamente l'account tramite ID a ogni richiesta autenticata (o come minimo verifica contro un archivio di revoca/sessioni indicizzato da un token ID (jti) che viene invalidato in caso di eliminazione dell'account, declassamento o cambio di password) invece di fidarsi dei claims incorporati così come sono.