【セキュリティ】JWTの署名を信頼していたら `alg: none` で管理者権限を奪取された話
> Source: Qiita_Trend_RSS
Execute Primary Source
// Problem
JWTのヘッダーに含まれるアルゴリズム指定(alg)をサーバー側がそのまま信頼してしまうことで、署名検証をスキップさせる「alg: none攻撃」が可能になる。これにより、ペイロードの改ざんによる権限昇格を許してしまう。
// Approach
サーバー側で受け入れるアルゴリズムをホワイトリスト形式で明示的に制限する。また、秘密鍵の厳格な管理に加え、ステートレスなJWTの弱点を補うためのトークン失効(Revocation)戦略の導入を推奨している。
// Result
「署名があるから安全」という盲信を排し、検証ロジックの制御をサーバー側で完結させる重要性が示された。仕様(RFC 7519)の許容範囲が、必ずしもセキュリティ上の安全を保証しないことを結論付けている。
Senior Engineer Insight
> 本件の本質は「信頼境界の設計ミス」にある。クライアントから送付されるメタデータ(Header)を、認証ロジックの制御パラメータとして利用してはならない。実装時には、ライブラリのデフォルト挙動に依存せず、必ず使用するアルゴリズムをコード上で明示的に指定すべきである。また、JWTのステートレス性は運用上のリスクを内包するため、リフレッシュトークンを用いたセッション管理や、ブラックリストによる即時無効化など、多層的な防御策を設計段階から組み込むことが、堅牢な認証基盤構築には不可欠である。