
2025年3月、Node.js環境で広く利用されているXML署名ライブラリ「xml-crypto」において、認証・認可のバイパスを引き起こす重大な脆弱性が2件公開されました。
CVE-2025-29774 と CVE-2025-29775 の両方の脆弱性は、CVSSv4 スコアが 9.3と危険度の高い脆弱性となります。影響を受けるシステムは多岐にわたり、特にSAML認証などXML署名を用いるサービスは早急な対処が求められます。
脆弱性の対象バージョン
xml-crypto バージョン6.0.0以下すべて
パッチ適用バージョン
-
v6系:v6.0.1
-
v3系:v3.2.1
-
v2系:v2.1.6
※バージョンアップする事で2つの脆弱性に対応します。
脆弱性の概要
xml-crypto は、Node.js 用の XML デジタル署名および暗号化ライブラリです。攻撃者は、6.0.1、3.2.1、および 2.1.6 より前のバージョンの脆弱性を悪用して、署名済み XML ドキュメントの検証に xml-crypto を使用するシステムの認証または承認メカニズムをバイパスできる可能性があります。この脆弱性により、攻撃者は署名済みの有効な XML メッセージを、署名検証チェックを通過する方法で変更できます。
CVE-2025-29774は複数のSignedInfo
ノードを含む署名により、署名検証処理が不正にバイパスされる脆弱性で、CVE-2025-29775はDigestValue
内にコメントが含まれている場合に、署名検証が正しく行われない脆弱性となります。
侵害の兆候
公式によると 脆弱性CVE-2025-29774 が悪用されている指標は、署名内に複数の SignedInfo ノードが存在することとされます。
CVE-2025-29775 の場合、指標には、DigestValue 内のコメントが含まれている事となります。
<Signature> <SomeNode> <SignedInfo> <Reference URI="somefakereference"> <DigestValue>forgeddigestvalue</DigestValue> </Reference> </SignedInfo> </SomeNode> <SignedInfo> <Reference URI="realsignedreference"> <DigestValue>realdigestvalue</DigestValue> </Reference> </SignedInfo> </SignedInfo> </Signature>
侵害調査のためのテストコード
decryptedDocument = ... // yours to implement // This check is per-Signature node, not per-document const signedInfoNodes = xpath.select(".//*[local-name(.)='SignedInfo']", signatureNode); if (signedInfoNodes.length === 0) { // Not necessarily a compromise, but invalid. Should contain exactly one SignedInfo node // Yours to implement } if (signedInfoNodes.length > 1) { // Compromise detected, yours to implement }