Node.js の脆弱性 CVE-2023-48238:トークン・アルゴリズム撹乱に繋がる可能性

CVE-2023-48238: A Critical Vulnerability in json-web-token for Node.js

2023/11/18 SecurityOnline — JSON Web Tokens (JWT) は、サイバー・セキュリティの領域において、安全な通信およびデータ交換のための不可欠なツールとなっている。しかし、このような広範に使われている技術にさえも、脆弱性が潜んでいる可能性がある。Node.js 用の人気の json-web-token ライブラリで、最近になって判明した問題が、この現実を浮き彫りにしている。


新たに発見された、この深刻な脆弱性 CVE-2023-48238 (CVSS:7.5) は、JWT アルゴリズムのかく乱攻撃を、攻撃者に対して許す可能性があるものだ。セキュリティ研究者の PinkDraconian により発見された、この脆弱性は、JWT 署名を検証するために使用されるアルゴリズムの、不適切なライブラリの処理に起因する。

問題の核心は “index.js” ファイルの 86行目にあり、そこでは署名を検証するためのアルゴリズムが JWT トークン自体からダイレクトに抽出されている。この段階では、トークンは未検証のままであり、信頼できない情報ソースとなる。Ezoic

被害者のアプリケーションが別のアルゴリズムを採用していたとしても、この脆弱性を悪用する攻撃者は、HS256 アルゴリズムを取り込んだ悪意の JWT トークンなどを作成できるようになる。被害者の公開 RSA キーで署名されると、この偽造トークンによりアプリケーションは欺かれ、攻撃者からの任意のペイロードを受け入れるようになる。

広く採用される json-web-token は、週ごとに 4,000 回以上もダウンロードされ、GitHub の と 2,700以上のリポジトリが、それに依存していることを考えると、この脆弱性の影響は極めて懸念すべきもとである。RS256 アルゴリズムを利用するアプリケーションは、この攻撃に対して特に脆弱である。

幸いなことに、CVE-2023-48238 の脆弱性を緩和するために、2つの効果的な解決策が存在する:

  1. デコード関数の署名を修正する:デコード関数内でアルゴリズムを明示的に設定することで、アプリケーションは JWT トークンに埋め込まれた、信頼できないアルゴリズムに対して、ライブラリが依存することを防げる。

  2. シークレット・キーを検証する: デコード関数内で、秘密鍵が公開鍵であるかどうかをチェックする。もしそうなら、適切な検証を確実にするために、明示的にキーを公開キーに設定する。

これらのソリューションの、いずれかを実装することで、開発者は JWT アルゴリズムの混乱攻撃からアプリケーションを効果的に保護し、データと通信の完全性を守ることができる。進化するサイバー・セキュリティの脅威との継続的な戦いにおいて、慎重なパッチ適用と積極的なセキュリティ対策は、引き続き極めて重要なものとなる。