本文へスキップ
ecdsa.com

alg none(保護されていない JWS)

署名部が空の、署名されていないトークンを表す JWS のアルゴリズム値 none(RFC 7518 §3.6)で、保護されていないコンテンツを明示的に想定している場合を除き、検証者は決して受け入れてはいけません。
別表記alg nonenone algorithmunsecured JWTunsigned JWT

ヘッダーが "alg": "none" で、2 つ目のドットの後に何もないトークンは、有効な「保護されていない JWS(unsecured JWS)」です。2015年3月、Tim McLean は、よく使われている複数の JWT ライブラリがこれを他のアルゴリズムと同列に扱っていることを示しました。そのため攻撃者は署名を取り除いて none を設定するだけで、任意のクレームを受け入れさせることができました。この攻撃は RFC 8725 §2.1 で説明されています。

最近のライブラリは、呼び出し側が明示的に許可しない限り none を拒否します。明示的なアルゴリズムの許可リスト(たとえば ES256 のみ)を使えば、仕組み上これも除外されます。注意すべきなのは、自前のチェックでの大文字小文字の違い(None、NONE)、「verify」ではなく「decode」関数を呼び出す検証処理、署名部が空のときに検証を省略するミドルウェアです。

規格と参考文献

すべての用語