開発の現場で、ブラウザを開かずに画面の試験をするとき、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の勧告。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を動かす」使い方
勧告の前提の条件。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の読み込みが止まるため、それに頼る試験や描画は設定の見直しが要ります。