本文へ移動
情シスのミカタ
ニュース約4分で読めます

Happy DOMにコード実行の欠陥 3月の修正の抜け道 21.0.4へ

JavaScriptでブラウザの画面を真似る部品Happy DOMに、外から渡したHTMLの中のモジュールの書き方から、Node.jsの側でコードを実行される脆弱性CVE-2026-115895(High、CVSS 8.8)が見つかりました。3月に直した脆弱性の、別の抜け道です。17.0.0から21.0.3までが対象で、21.0.4で直っています。

公開 情シスのミカタ編集部AIにより執筆チェック済み
文字
Happy DOMにコード実行の欠陥 3月の修正の抜け道 21.0.4へ

この記事のまとめ

  • Happy DOMは、JavaScriptでブラウザの画面(DOM)を真似る部品で、Vitestなどの試験の道具や、サーバーの側でHTMLを描く仕組みで使われます。
  • 外から渡したHTMLのモジュールのimportの書き方を確かめずに組み立てていたため、Node.jsの側でコードを実行される恐れがありました。3月に直したCVE-2026-33943の別の抜け道です。
  • 条件は、JavaScriptの実行を有効にし(enableJavaScriptEvaluation: true)、攻撃者が用意したHTMLを読み込むことです。20.0.0からJavaScriptの実行は既定で無効です。
  • 修正は21.0.4だけで、20系の修正版はありません。外のHTMLを扱う仕組みで使っていれば、21.0.4へ上げます。
こんな方に#20代#30代#40代実務

開発の現場で、ブラウザを開かずに画面の試験をするとき、Happy DOMという部品がよく使われます。JavaScriptでブラウザの画面(DOM)を真似るもので、Vitestなどの試験の道具で「ブラウザの代わり」として選べるほか、サーバーの側でHTMLを描いたり、Webのページの中身を取り出したりする仕組みにも組み込まれます。

このHappy DOMに、外から渡したHTMLの中の書き方から、Node.jsの側でコードを実行される脆弱性CVE-2026-115895が見つかりました。GitHubの勧告のデータベースは2026年10月24日(日本時間)に載せ、深刻度をHigh(CVSS 8.8)としています。17.0.0から21.0.3までが対象で、10月20日に出た21.0.4で直っています。

GitHubの勧告のデータベースのページ。題はHappy DOM: Incomplete fix for CVE-2026-33943: unsanitized import alias leads to host code execution。深刻度はHigh、GitHubの確認済み。パッケージはnpmのhappy-domで、影響する版は17.0.0以上21.0.3以下、直った版は21.0.4。深刻度の値は8.8。
GitHubの勧告。17.0.0〜21.0.3が対象で、21.0.4で修正出典: GitHub Advisory Database「GHSA-834v-8h66-3h79」(引用)

何が見つかったか

項目 内容
CVE CVE-2026-115895(GHSA-834v-8h66-3h79)
深刻度 High(CVSS 3.1で8.8)
中身 モジュール(ESM)を読み替える部分が、importの別名(as のあとの名前)を確かめずに、組み立てるJavaScriptに入れていた。本来は誤りになる書き方が、実行できる形に変わり、Node.jsの側の機能に届く
前の件との関係 2026年3月のCVE-2026-33943(exportの名前の扱い)の修正が不完全だった。exportの側は直したが、importの側が残っていた
対象 17.0.0以上21.0.3以下(GitHubの勧告のデータベース)
直った版 21.0.4(2026年10月20日)

報告者は、公開されているnpmのパッケージで、ホストのファイルを作るところまで確かめたとしています。

危ないのは「外のHTMLでJavaScriptを動かす」使い方

GitHubの勧告のPreconditions(前提の条件)の節。JavaScriptの実行をenableJavaScriptEvaluation: trueで有効にしていること、攻撃者が用意したHTMLやモジュールのソースをHappy DOMが処理すること、外から渡されたHTMLを動かすSSR、プレビュー、スクレイピング、試験のサービスが影響を受けうること、の3点。
勧告の前提の条件。JavaScriptの実行を有効にし、外のHTMLを読む出典: GitHub Advisory Database「GHSA-834v-8h66-3h79」(引用)

勧告が挙げる条件は次の2つです。

  • JavaScriptの実行を有効にしている(enableJavaScriptEvaluation: true)
  • 攻撃者が用意したHTMLやモジュールを、Happy DOMで読み込む

勧告は、外から渡されたHTMLを動かす、サーバーの側の描画(SSR)、プレビュー、Webのページの取り込み(スクレイピング)、試験のサービスが影響を受けうるとしています。

Happy DOMは、2025年10月の20.0.0から、JavaScriptの実行を既定で無効にしています。そのとき、仮想の環境から抜け出してプロセスの機能に届く別の脆弱性が報告されていたためです。設定でわざわざ有効にしていなければ、今回の条件には当てはまりません。

20系に修正版は無い。21系へ

直った版は21.0.4だけで、20系の修正版は出ていません。21系は、10月に入ってから次の変更や修正が続いています。

版 日付 主な中身
21.0.0 10月11日 CSSとiframeの読み込みを既定で止める(SSRFを防ぐため)。破壊的な変更
21.0.2 10月15日 サーバーの側の描画の部品の、SSRFの脆弱性を修正
21.0.3 10月15日 転送のときに認証のヘッダーを渡してしまう脆弱性を修正
21.0.4 10月20日 今回のESMの読み替えのコードの差し込みを修正。data:のiframeから親の画面に触れられる問題も修正

20系から上げると、CSSやiframeの読み込みが止まるため、それに頼る試験や描画は設定の見直しが要ります。

影響する会社・しない会社

  • 影響する: Happy DOMで、外から受け取ったHTMLを、JavaScriptの実行を有効にして読み込む仕組みを動かしている会社。たとえば、利用者が書いたHTMLのプレビューや、外のページを取り込んで描く仕組みです
  • 確かめる: 開発の部門で、Vitestなどの試験の環境にHappy DOMを使っている会社。自社の試験のコードだけなら条件に当てはまりにくいものの、外から取ったHTMLを試験で読む使い方があるかを確かめます
  • 影響しない: Happy DOMを使っていない会社。16系以前を使う場合も、今回の対象の範囲には入っていません(ただし、ほかの脆弱性のため更新を考えます)

情シスが今日やること

  1. 使っている場所を洗い出します。 開発の部門に、package.jsonやロックファイルにhappy-domが入っている仕組みの一覧を頼みます。試験だけの依存(devDependencies)か、本番で動く仕組みに入っているかを分けて記録します。
  2. JavaScriptの実行の設定を確かめます。 enableJavaScriptEvaluationをtrueにしている箇所が無いかを探します。外のHTMLを扱う仕組みで有効にしていれば、最優先で21.0.4へ上げます。
  3. 21系への上げ方を決めます。 20系から上げると、CSSとiframeの読み込みが既定で止まります。試験や描画が変わらないかを、開発の部門と確かめてから入れます。
  4. 外のHTMLを動かす仕組みを分けます。 利用者のHTMLを描くような仕組みは、もし破られても社内の秘密に届かないよう、権限の小さい実行の環境(コンテナなど)に分けておきます(当社の見立て)。

よくある質問

QVitestの試験で使っているだけでも危ないですか。

A勧告の条件は、JavaScriptの実行を有効にし、攻撃者が用意したHTMLやモジュールを読み込むことです。自社の試験のコードだけを動かしているなら、条件に当てはまりにくいと考えられます(当社の見立て)。ただし、外から取ってきたHTMLを試験で読み込む使い方なら、当てはまります。

Q20系を使っています。修正版はありますか。

AGitHubの勧告のデータベースでは、直った版は21.0.4だけです。20系の修正版は出ていません。21.0.0で、CSSとiframeの読み込みを既定で止める変更も入っているため、上げたあとの動作を確かめます。

出典・参考

チェック済み。この記事は監修者によってチェックされました。(2026年10月25日)

執筆

情シスのミカタ編集部AIにより執筆

書いた AI: AI記者(解説)

法令・官公庁の発表・企業の公式発表などの一次情報を調べて、情シス向けの解説・比較・テンプレの記事を書きます。数字と日付は出典と照らして確かめ、記事の最後に出典を載せています。使っているAI: Anthropic Claude。

監修

佐々木 航株式会社Game

代表取締役。工学部出身で、21歳で起業してからシステム会社の経営一筋で8期目。アプリの受託開発から始め、いまはAIを使ったシステムソリューションを手がけています。150社以上の企業とのプロジェクトで培った開発と情報システムの現場の経験と声を形にし、激動の時代を乗り越えたいと考えています。

メモ: 掲載時に自動で(しばらくの間)

記事は AI が一次情報を調べて書き、機械の検査を通してから公開しています。人が見ているもの・見ていないものはAI の使い方に書いています。まちがいに気づいたら訂正・ご指摘からお知らせください。直したら、記事の最後に何を直したかを書きます。

役に立ったら、いいねと共有をお願いします