XML-Crypto の脆弱性 CVE-2024-32962 が FIX:CVSS 値は 10.0

CVE-2024-32962 (CVSS 10): Critical Vulnerability in XML-Crypto Affects Millions

2024/05/01 SecurityOnline — XML ドキュメントの暗号セキュリティにおいて、広く使用されている不可欠なツール XML-Crypto npm パッケージに、深刻なセキュリティ上の欠陥が発見された。この脆弱性には CVE-2024-32962 が採番され、その深刻度は CVSS 値 10.0 と評価されている。この脆弱性は、電子署名の真正性を適切に検証しないという、同パッケージのデフォルト設定における基本機能の欠陥に起因しており、悪用に成功した攻撃者に対して、なりすまし署名を許してしまう。

脆弱性の概要

XML-Crypto は、XML ドキュメントに電子署名と暗号化を組み込むためのツールとして、開発者たちの間で高い人気を博し、毎週 100万件近くのダウンロードを達成している。その XML-Crypto に発見された脆弱性 CVE-2024-32962 は、XML 署名検証のパッケージの処理に起因するものだ。XML-Crypto のデフォルト設定では、W3C 勧告のセクション 3.2.2 “XML Signature Syntax and Processing“ で詳述されているように、署名者の認可を検証せずに、署名自体の有効性だけを検証している。

この問題の核心は、デジタル署名された XML ドキュメント内の証明書に対する、XML-Crypto の管理方法に起因する。この脆弱性に対して脆弱なバージョン 4.0.0〜6.0.0 未満では、署名付き XML 文書の <KeyInfo /> 要素で提供される、すべての証明書を信頼している。悪意の秘密鍵で XML ドキュメントに再署名する攻撃者が、対応する証明書を <KeyInfo /> 要素に添付することで、このデフォルト動作の悪用が可能になる。それにより、変更された XML が、XML-Crypto の検証チェックに渡される。

悪用の影響

この脆弱性の悪用に成功した攻撃者は、署名検証プロセスを詐称し、XML-Crypto のセキュリティに依存するシステムに、悪意のデータを持ち込むことを可能にする。それにより、データ漏洩や不正なデータ操作が発生し、多くのデジタル・トランザクションや通信システムが依存する、信頼メカニズムの崩壊などにいたる可能性が生じる。

解決策と緩和策

この問題は、XML-Crypto の最新バージョン 6.0.0 で修正されており、脆弱性の原因となるデフォルトの getCertFromKeyInfo 実装の暗黙の使用が無効化されている。直ちにアップグレードが不可能なユーザーに対しては、それ以前のバージョンのための回避策が、XML-Crypto の開発者たちから提供されている:

  1. 証明書の検証:getCertFromKeyInfo を介して抽出された証明書を、検証結果を受け入れる前に、信頼できる証明書のリストと手動で照合する。
  2. 設定の変更:XML-Crypto の getCertFromKeyInfo 関数を () => undefined に設定する。それにより、署名検証に明示的に設定された publicCert/privateKey を使用するようになり、欠陥のあるデフォルトのメカニズムを回避できる。
開発者および企業への推奨事項

機密データや貴重なデータを扱うアプリケーションにおいて、XML-Crypto を使用している開発者たちに推奨されるのは、この脆弱性に関連するリスクを軽減するために、バージョン 6.0.0 へのアップデートを優先的に実行することだ。あるいは、アップデートを適用できるようになるまで、提案されている回避策を実施することが、アプリケーションのセキュリティの完全性を維持するために重要となる。