概要
Happy DOM は ブラウザ 環境 を エミュレート する JavaScript ライブラリ で、テスト フレームワーク(Vitest, Jest 等)で 広く 使用 されて います。この 脆弱性 は Happy DOM の ECMAScriptModuleCompiler が ユーザー 入力 を サニタイズ せず に export 宣言 内 に 補間 する こと で、コード インジェクション が 発生 する 問題 です。
具体的 には、ECMAScriptModuleCompiler が ES モジュール の export 宣言 を 生成 する 際 に、外部 から の 入力 を 適切 に エスケープ せず に テンプレート に 埋め込みます。攻撃者 は バックティック テンプレート リテラル を 使用 する こと で、通常 の クォート フィルタ を バイパス し、任意 の JavaScript コード を 注入 できます。
この 脆弱性 は CWE-94(Improper Control of Generation of Code / Code Injection)に 分類 されます。Happy DOM が サーバー サイド で 使用 されて いる 場合、注入 された コード は Node.js 環境 で 実行 され、リモート コード 実行(RCE)に つながります。テスト 環境 で 使用 されて いる 場合 でも、悪意 ある テスト データ や 依存 パッケージ を 通じて 攻撃 が 可能 です。
影響 を 受ける バージョン は v15.10.0 から v20.8.7 まで です。CVSS スコア は 8.8 で High と 評価 されて います。修正 バージョン v20.8.8 が リリース されて います。Happy DOM を 使用 して いる プロジェクト は 速やかに アップデート を 実施 して ください。
Happy DOM は npm で 週 に 数百万 回 ダウンロード される 人気 パッケージ であり、特に Vitest の デフォルト DOM 実装 として 広く 採用 されて います。テスト 環境 は 本番 環境 と 比べて セキュリティ が 軽視 されがち ですが、CI/CD パイプライン で の コード 実行 は サプライ チェーン 攻撃 の 入口 と なり 得ます。テスト 環境 で あっても セキュリティ アップデート を 怠ら ない こと が 重要 です。バックティック に よる クォート フィルタ バイパス は JavaScript 特有 の 攻撃 手法 であり、テンプレート リテラル を 扱う コード で は 特に 注意 が 必要 です。package.json や lock ファイル で 依存 バージョン を 固定 して いる 場合 は、明示的 に アップデート を 実施 して ください。
CVSS ベクトル
| 項目 | 値 |
|---|---|
| CVSS スコア | 8.8(High) |
| 攻撃 元 区分 | ネットワーク |
| 攻撃 条件 の 複雑 さ | 低 |
| 必要 な 特権 レベル | 低 |
| ユーザー 関与 | 不要 |
| CWE | CWE-94(Improper Control of Generation of Code) |
影響 を 受ける ソフトウェア
| 製品 | ベンダー | 影響 バージョン |
|---|---|---|
| happy-dom | capricorn86 | v15.10.0 から v20.8.7 |
修正 バージョン と 回避策
- 修正 バージョン: v20.8.8
- 回避策: 信頼 できない HTML コンテンツ を Happy DOM で 処理 しない
- 回避策: Happy DOM を サンドボックス 化 された 環境 で 実行 する
- 推奨:
npm update happy-domで 最新 バージョン に アップデート する - 推奨: テスト 環境 で あっても 依存 パッケージ の セキュリティ アップデート を 適時 適用 する
- 推奨: npm audit や npx audit-ci を CI パイプライン に 組み込み 脆弱 な 依存 関係 を 自動 検出 する 仕組み を 導入 する
- 推奨: Happy DOM を 使用 する テスト で は 外部 から の 入力 データ を サニタイズ した 上 で 渡す こと を 推奨 する
関連 リンク
データソース: NVD (NIST) AI解説は Claude API により自動生成されています。正確性については原文をご確認ください。
