Modern Frontend CVEs

対象CVE: CVE-2026-83613

[緊急警報] `@xmldom/xmldom`における深刻なDoS脆弱性 (GHSA-8344-3jmq-59r6)

`@xmldom/xmldom`ライブラリに存在する高深刻度の脆弱性により、特定のXML入力を処理する際にCPUが極端に消費され、サービス停止(DoS)につながる可能性があります。速やかなアップデートが必須です。

はじめに

`xmldom`は、WebブラウザのDOM APIに準拠したXMLパーサーとして、JavaScript環境で広く利用されています。フロントエンドエンジニアの皆さんも、直接的に使用することは稀かもしれませんが、ビルドツール、サーバーサイドレンダリング (SSR) のバックエンド、あるいはElectronなどのデスクトップアプリケーション内で間接的に利用されているケースがあります。今回、この`xmldom`ライブラリに、サービス拒否(DoS)につながる高深刻度な脆弱性が発見されました。

脆弱性の基本情報

<ul><li><strong>ID</strong>: GHSA-8344-3jmq-59r6</li><li><strong>CVE</strong>: CVE-2026-83613</li><li><strong>深刻度</strong>: High</li><li><strong>影響を受けるライブラリ</strong>: `xmldom` (バージョン 0.1.0 から 0.6.0), `@xmldom/xmldom` (バージョン 0.8.x および 0.9.x)</li></ul>

何が問題なのか? (脆弱性の概要と仕組み)

この脆弱性の根本的な原因は、`xmldom`がXML文書をパースする際の属性処理ロジックにあります。DOMの仕様では、XML要素は同じ名前の属性を複数持つことができません。`xmldom`は新しい属性を追加する際に、このルールを強制するために、既に存在するすべての属性を線形にスキャンして重複をチェックしています。

例えば、`M`個の属性を持つXML要素をパースする場合、この重複チェックの処理コストは属性の数の二乗(O(M²))に比例して増加します。属性の数が10倍になれば、処理時間は100倍になる計算です。これにより、属性の数が増えれば増えるほど、処理にかかる時間が急激に長くなってしまいます。

どのような影響があるのか? (リスクと影響範囲)

この脆弱性は、以下のような深刻な影響をもたらします。

<ol><li><strong>サービス拒否 (Denial of Service - DoS) 攻撃の可能性</strong>:<br>攻撃者は、わずか約340KB程度のXMLファイル(例えば、1つの要素に数万個の属性を持つ、完全に整形式なXML文書)を送りつけるだけで、サーバーの単一スレッドのCPUを数秒間占有できます。複数のリクエストが同時に処理されれば、サーバーのCPUが飽和し、システム全体のパフォーマンス低下やサービス停止に追い込まれる可能性があります。</li><li><strong>検知の困難性</strong>:<br>この攻撃は、不正なXMLや特殊なパースオプションを必要とせず、標準的なXML文書として扱われるため、警告やエラーも発生しません。このため、通常のログ監視などでは異常を検知しづらく、攻撃を受けていることに気づくのが遅れる可能性があります。</li><li><strong>フロントエンドエンジニアへの影響</strong>:<br><ul><li><strong>Node.jsバックエンド (BFF, SSR)</strong>: Node.jsで実装されたBFF (Backend For Frontend) やSSR環境で外部からXML/HTMLを受け取って処理している場合、直接的な攻撃対象となる可能性があります。</li><li><strong>ビルドツール・CI/CD</strong>: ビルドプロセスやCI/CDパイプラインでXMLファイルを処理する際に、悪意のあるXMLが混入した場合、ビルドが異常に遅延したり、リソースを消費したりする可能性があります。</li><li><strong>Electronアプリケーション</strong>: Electronで開発されたデスクトップアプリケーションが外部からのXML入力を`xmldom`で処理している場合、アプリケーションのフリーズやクラッシュにつながる可能性があります。</li></ul></li></ol>

あなたのプロジェクトは安全ですか? (影響を受ける条件)

以下の条件に当てはまる場合、この脆弱性の影響を受ける可能性があります。

<ul><li>あなたのプロジェクトが`xmldom`または`@xmldom/xmldom`ライブラリを直接的または間接的に使用している。<br>特に、`package.json`の`dependencies`や`devDependencies`を確認してください。</li><li>外部からの信頼できないXML/HTML入力を、上記ライブラリでパースして処理している。</li></ul>

<strong>影響を受ける具体的なバージョン:</strong>

<ul><li>`xmldom`: 0.1.0 から 0.6.0</li><li>`@xmldom/xmldom`: 0.8.x および 0.9.x</li></ul>

今すぐ行うべき対策

この脆弱性は、属性の重複チェックロジックが効率的なアルゴリズム(O(M))に改善されたことで修正されています。具体的には、名前をキーとするインデックスを使用することで、属性の数が増えても処理時間が線形にしか増加しないように変更されました。

<strong>速やかに、修正済みの最新バージョンにアップデートしてください。</strong>

<ul><li>`xmldom`を使用している場合は、`@xmldom/xmldom`への移行も検討しつつ、利用可能な最新バージョンへの更新を推奨します。</li><li>`@xmldom/xmldom`を使用している場合は、最新の安定版へのアップデートを行ってください。</li></ul>

```bash # 例: npmの場合 npm update @xmldom/xmldom # 例: yarnの場合 yarn upgrade @xmldom/xmldom ```

この修正は、属性の順序や重複解決の既存の挙動を維持しつつ適用されているため、既存のアプリケーションコードに大きな影響を与えることなく適用可能です。

まとめ

`@xmldom/xmldom`ライブラリのO(M²)パフォーマンス問題に起因するDoS脆弱性(GHSA-8344-3jmq-59r6 / CVE-2026-83613)は、外部からの悪意あるXMLによってシステムを停止させる可能性がある深刻な問題です。フロントエンドエンジニアの皆さんも、間接的な利用経路を含め、ご自身のプロジェクトでの利用状況を確認し、速やかに最新バージョンへアップデートすることを強く推奨します。セキュリティは常に最新の状態を保つことが重要です。

← ブログ一覧に戻る