30秒で判断
- 対応すべき人: ruby-jwt でHMAC系(HS256/HS384/HS512)のJWTを検証しており、鍵に空文字・nil が入り得る、または
key_finder:/ keyfinderブロックを使っている - 対応不要な人: ruby-jwt を利用していない、2.10.3 / 3.2.0 以降を使用している、RS256 など公開鍵系のみを利用している
- 確認コマンド:
bundle list | grep jwt(またはgem list jwt)でバージョンを確認
概要
ruby-jwt は RFC 7519(JSON Web Token)のRuby実装です。本脆弱性では、JWT.decode(token, '', true, algorithm: 'HS256') のように空文字を鍵として渡した場合、OpenSSLのHMACダイジェストが空鍵でも有効な値を返し、かつ空鍵を弾く事前条件が存在しないため、攻撃者が偽造したトークンが正当なものとして受理されます。
同じ経路は、keyfinderブロックや key_finder: 引数が未知の鍵に対して空文字・nil・nilを含む配列を返す場合にも到達します。HS256 / HS384 / HS512 の検証が JWT.decode および JWT::EncodedToken#verify_signature! を通じて影響を受けるため、実質的に認証バイパスにつながる可能性があります。
CVSSベクトル
| 項目 | 値 |
|---|---|
| CVSSスコア | 9.1(CRITICAL) |
| CWE | CWE-287(不適切な認証), CWE-326(不十分な暗号強度), CWE-1391(脆弱な認証情報の利用) |
| 攻撃の起点 | 空鍵条件下での偽造トークンの受理 |
影響を受けるソフトウェア
| 製品 | ベンダー | バージョン |
|---|---|---|
| ruby-jwt | jwt (RubyGems) | 2.10.3 より前 |
| ruby-jwt | jwt (RubyGems) | 3.2.0 より前(3系) |
修正バージョンと回避策
利用系統に応じて 2.10.3 または 3.2.0 以降へアップデートしてください。あわせて、鍵が空文字・nil にならないようアプリケーション側で事前検証を追加し、key_finder: が未知の鍵に対して空値を返さない実装になっているか確認することを推奨します。
関連リンク
データソース: NVD (NIST), GitHub Advisory Database AI解説は Claude API により自動生成されています。正確性については原文をご確認ください。
