Node.js ライブラリ xml-crypto の脆弱性 CVE-2025-29774/29775 が FIX:IoC も提供

Million-Download Node.js Library xml-crypto Hit by Critical Security Flaws (CVE-2025-29774, CVE-2025-29775)

2025/03/18 SecurityOnline — Node.js 向けの XML デジタル署名/暗号化ライブラリである xml-crypto に、2つの深刻な脆弱性が発見された。毎週 110万回以上ダウンロードを誇る、このライブラリの脆弱性を放置すると、XML 署名検証を利用するアプリケーションに広範な影響が生じる。

新たに発見された xml-crypto の脆弱性 CVE-2025-29774/CVE-2025-29775 は、どちらも CVSSv4:9.3 (深刻度 Critical) と評価されている。これらの脆弱性の悪用に成功した攻撃者は、署名付き XML 文書の検証に xml-crypto を用いるシステムにおいて、認証/承認のメカニズムを回避する可能性を手にする。

CVE-2025-29774

複数の SignedInfo 参照による XML 署名検証のバイパス

この脆弱性を悪用する攻撃者は、有効な署名付き XML メッセージを改ざんし、署名検証を回避する機会を得る。この脆弱性に関するアドバイザリには、「たとえば、有効なアカウントを持つ攻撃者に、重要な識別情報やアクセス制御属性の変更で悪用されると、特権の昇格/他のユーザーへの成りすましなどを許す可能性が生じる」と記されている。

この脆弱性の根本的な原因は、1つの署名内に、複数の SignedInfo ノードが存在することにある。このアドバイザリには、「本来、署名内に、SignedInfo ノードが複数含まれることはない。もし、複数の SignedInfo ノードが見つかった場合には、攻撃の兆候として捉えるべきかもしれない」と記されている。

CVE-2025-29775

DigestValue 内のコメントを利用した XML 署名検証のバイパス

上記の脆弱性 CVE-2025-29774 と同様に、この脆弱性 CVE-2025-29775 を悪用する攻撃者は、有効な署名付き XML メッセージを改ざんすることで、署名検証の回避が可能になる。この脆弱性の原因は、DigestValue 内のコメントの存在にある。アドバイザリでは、「DigestValue には、コメント含まれていないはずだが、もしも含まれている場合は、改ざんされている可能性がある」と説明されている。

影響を受けるバージョンとパッチ

これらの脆弱性の影響を受けるのは、xml-crypto のバージョン 6.0.0 以下の、すべてのバージョンである。ユーザーに強く推奨されるのは、バージョン  6.0.1 へと速やかにアップグレードすることだ。バージョン 2.x/3.x を使用しているユーザーには、関連するパッチ・バージョン (3.2.12.1.6) へのアップグレードが推奨される。

侵害の兆候

GitHub で公開されたアドバイザリには、これらの脆弱性の悪用を検知するための、侵害の兆候 (IoC:Indicators of Compromise)  が含まれている。XML ペイロードをログに記録する際には、これらの指標を確認することが重要である。もし、ペイロード内に暗号化された要素が含まれている場合は、復号化されたバージョンを分析する必要がある。これらのチェックは、特に、SAML Response などの XML ベースの認証/認可フローにおいて不可欠となる。

それぞれの脆弱性の IoC を以下に記す:
  • 脆弱性 CVE-2025-29774 の場合:Signature 内に、複数の SignedInfo ノードが存在すること。
  • 脆弱性 CVE-2025-29775 の場合:DigestValue 内に、コメントが含まれていること。

さらに、アドバイザリでは、これらの脆弱性の検出に有用な、コード・スニペットも提供されている。