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.1/2.1.6) へのアップグレードが推奨される。
侵害の兆候
GitHub で公開されたアドバイザリには、これらの脆弱性の悪用を検知するための、侵害の兆候 (IoC:Indicators of Compromise) が含まれている。XML ペイロードをログに記録する際には、これらの指標を確認することが重要である。もし、ペイロード内に暗号化された要素が含まれている場合は、復号化されたバージョンを分析する必要がある。これらのチェックは、特に、SAML Response などの XML ベースの認証/認可フローにおいて不可欠となる。
それぞれの脆弱性の IoC を以下に記す:
- 脆弱性 CVE-2025-29774 の場合:Signature 内に、複数の SignedInfo ノードが存在すること。
- 脆弱性 CVE-2025-29775 の場合:DigestValue 内に、コメントが含まれていること。
さらに、アドバイザリでは、これらの脆弱性の検出に有用な、コード・スニペットも提供されている。
Node.js における重要コンポーネントである xml-crypto に、深刻な脆弱性です。最新バージョンへのアップデートと、侵害指標の確認が必須となります。ご利用のチームは、ご注意ください。よろしければ、Node.js で検索も、ご利用ください。
You must be logged in to post a comment.