jwt-security-review について
jwt-security-review は、JWT 認証をエンドツーエンドで点検するスキルです。認証コードを調べる開発者やセキュリティレビュー担当者向けで、アルゴリズム、鍵、クレーム、トークンのライフサイクルを確認し、影響箇所と対策をまとめます。
主な機能
- 01アルゴリズム固定と鍵種別の確認
- 02秘密情報の強度とローテーション評価
- 03クレームと権限フィールドの検証
- 04更新・失効・保存方法のレビュー
- 05攻撃テスト例と修正案の提示
活用シーン
- 01サーバー側の JWT 検証実装のレビュー
- 02トークンクレームの悪用可能性の確認
- 03リフレッシュトークンのローテーションと失効の評価
- 04問題の影響箇所と修正方法の記録
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ securityskills/ skills --skill jwt-security-reviewインストール後、Claude Code で/jwt-security-reviewを入力して読み込まれたか確認します。
詳細
JWT セキュリティレビュー
JWT ベースの認証をエンドツーエンドでレビューします。
レビュー項目
アルゴリズムの処理
- 想定するアルゴリズムをサーバー側で固定し、
alg: noneは必ず拒否します - RS256→HS256 の混同:サーバーが公開鍵を秘密鍵として HMAC を検証している場合、攻撃者がトークンを偽造できます。アルゴリズムごとに正しい鍵の種類で検証していることを確認します
- サーバーが攻撃者の制御可能な URL から鍵を取得する、
jku/x5uヘッダーのインジェクションに注意します kidのインジェクション:鍵の検索時におけるパストラバーサルや SQL/コマンドインジェクション
鍵とシークレットの強度
- HS256 のシークレット:エントロピーが 32 バイト以上で、ワードリストに含まれないもの(
jwt-toolsのクラックモードで確認) - 鍵をローテーションし、古い鍵は単に使わなくするのではなく失効させます
クレームの検証
expとnbfを必ず検証し、クロックスキューを制限しますissとaudを想定値と照合します- 想定外の追加特権クレーム(例:
admin: true)を持つトークンは拒否します。許可リストに照らして解析後に検証します - サーバー側で照会できる場合は、クライアントが制御する
role/uidクレームを信頼しません
トークンのライフサイクル
- リフレッシュトークン:再利用検知を伴うローテーションを行い、サーバー側ではハッシュ化して保存します
- ログアウト、パスワード変更、管理者による強制ログアウト時の失効手段を用意します
- アクセストークンの有効期間は短くします(15 分以下)。長期間有効なベアラートークンは使用しません
- XSS の攻撃対象領域がある場合、トークンを localStorage に保存しません。CSRF 対策を施した httpOnly Cookie を優先します
subは安定しており、曖昧さのない値にします(変更される可能性のあるメールアドレスではなく、ユーザー ID を使用します)
よくあるコードの問題
jwt.decode(token) // decode ≠ verify: signature never checked
jwt.verify(token, key) // no algorithms option pinned
jwt.verify(token, key, { algorithms: ['*'] })
テストケース
- 署名を削除し、
alg: noneトークンを送信します algを HS256 に変更し、公開鍵で署名します- 期限切れ/
expの欠落、誤ったiss/aud - 有効な署名を維持したままクレームを改ざんします(例:ロールを昇格させる)
- ローテーション済みのリフレッシュトークンを再利用します。ファミリー全体が無効化されることを確認します
出力
トークンのサンプル(機密情報を伏せたもの)、影響を受けるコードパス、問題ごとの修正方法を含む検出結果。
コメント
Markdown 対応