
製品: go-shiori/shiori
ファイル: internal/domains/auth.go
CWE: CWE-613 — 不十分なセッション有効期限
CVSS 3.1: AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L — 8.2 (高)
CNA: Turan Security · CVE レコード
Shiori の CheckToken 関数(internal/domains/auth.go)は、JWT の HMAC
署名のみを検証し、埋め込まれた claims.Account オブジェクトをそのまま返します —
リクエストのたびにデータベースからアカウントを再取得することはありません。コードベースのどこにも、
セッションストアやトークン失効メカニズムは存在しません。
一度発行された JWT は、その後のアカウントへの影響にかかわらず、 有効期間中ずっと完全に有効なままです。管理者がユーザーを削除したり、ユーザーを降格させたり、侵害が疑われた後にユーザーの パスワードが変更された場合でも、その変更前に発行された JWT は、 トークンに埋め込まれた元の claims(ロール、アカウント ID など)によって 認証に成功し続けます — これを無効化するサーバー側の状態は存在しません。
POST /api/v1/auth/login 経由)。GET /api/bookmarks
Authorization: Bearer <original JWT>
CheckToken は現在の DB 状態をチェックせず、署名のみを検証するためです。CheckToken は、JWT ペイロードを、使用のたびにデータベースに対して再検証(または失効リストとの照合)すべきベアラ資格情報としてではなく、アカウント状態の真実の情報源として信頼しています。
埋め込まれた claims をそのまま信頼するのではなく、認証されたすべてのリクエストで ID によりアカウントを再取得してください(または最低限、アカウントの削除、降格、パスワード変更時に無効化されるトークン ID(jti)をキーとする失効/セッションストアとの照合を行ってください)。