
npmのbody-parser・multer・undici・happy-domにHighの脆弱性。npm lsとnpm auditで確かめる
npm の4つのパッケージ、body-parser・multer・undici・happy-dom に、脆弱性の勧告が出た。
GitHub Advisory Database での公開は 10/24(日本時間)。
4つのパッケージそれぞれに、重大度 High が1件ある。
Express を使っているなら、package.json に書いていなくても、Express の中に body-parser が入っている。
自分のプロジェクトに入っているかどうかは、`npm ls` と `npm audit` の2つで確かめられる。
この記事は、2026-10-25 12:47(日本時間)に取得した勧告6件のデータと、同じ日に使い捨てのプロジェクトで出た `npm ls`・`npm audit` の実出力をもとにしている。
勧告は後から書き換わることがあるので、出典を開き直してほしい。
何が起きたか
GitHub の公開時刻は 2026-10-23 20:53〜22:14(UTC)で、日本時間では 10/24 05:53〜07:14 になる。
GitHub Advisory Database の公式の勧告によると、影響を受ける版と修正版は次のとおりだ。

body-parser
勧告: GHSA-27r3-jxmh-p828(CVE-2026-111181)、High 7.5
影響を受ける版: `< 1.20.9`、`>= 2.0.0, < 2.4.0`
修正版: 1.20.9 / 2.4.0
multer
勧告: GHSA-q7qp-rjg7-q26m(CVE-2026-113872)、High 7.5
影響を受ける版: `>= 2.0.0, < 2.5.0`
修正版: 2.5.0
undici(同じ日に3件)
GHSA-xjj6-f33q-929c(CVE-2026-109869)、High 7.5。影響を受ける版: `>= 6.23.0, < 6.29.1`、`>= 7.18.0, < 7.30.1`、`>= 8.0.0, < 8.12.2`
GHSA-4qv8-2p9j-2685(CVE-2026-109924)、Medium 5.9。影響を受ける版: `>= 6.5.0, < 6.29.1`、`>= 7.0.0, < 7.30.1`、`>= 8.0.0, < 8.12.2`
GHSA-f72v-6w45-q472(CVE-2026-109841)、Medium 5.9。影響を受ける版: `>= 7.15.0, < 7.30.1`、`>= 8.0.0, < 8.12.2`
修正版: 6.29.1 / 7.30.1 / 8.12.2(3件とも、系列ごとの修正版の番号は同じ)
happy-dom
勧告: GHSA-834v-8h66-3h79(CVE-2026-115895)、High 8.8
影響を受ける版: `>= 17.0.0, <= 21.0.3`
修正版: 21.0.4
happy-dom の範囲は、勧告の本文とデータで食い違っている。
本文の "Suggested affected range" は `>= 17.0.0, <= 20.14.5` で、修正版は "No patched version is currently available." となっている。
この記事では、勧告のデータと npm audit の表示に合わせて、範囲を 17.0.0〜21.0.3、修正版を 21.0.4 とした。
自分に関係あるか
npm でこれらのパッケージを入れている人が対象だ。勧告の「Impact」などに書いてある条件を、短くまとめる。
攻撃に使う入力の例や、勧告の本文にある PoC は書かない。
body-parser
既定の設定のまま当たる。
`Content-Encoding`(gzip など)付きの、圧縮されたリクエストを処理するところで起き、捕まえられない例外でプロセスが終わる。
勧告によると、解析はルーティングより前に走るので、認証もルートの一致も要らない。
圧縮されたリクエストを受ける必要がないなら、勧告は回避策として `inflate: false` を挙げている。
multer
非同期の fileFilter を使っているときだけ当たる。
勧告によると、1つのリクエストでプロセスが終わりうる。
同期の fileFilter なら当たらない。回避策は、fileFilter を同期にすることだ。
undici
High の件: `fetch()` の相手のサーバーが悪意を持っていると、1つの応答でプロセスが落ちる。アプリが `fetch()` の reject を catch していても落ちる。回避策は「None」と書いてある
Medium の1件目(4qv8): `EventSource` で信頼できない相手とつなぎ続けると、メモリを使い切ってプロセスが終わりうる
Medium の2件目(f72v): Subresource Integrity(SRI)の検査で、アルゴリズム名が小文字でないと検査が飛ばされる。7.15.0 で入った不具合で、7.14.0 以前は当たらない
happy-dom
`enableJavaScriptEvaluation: true` にしていて、外から渡された HTML やモジュールのソースを処理するときに当たる。
勧告は、SSR、プレビュー、スクレイピング、テストのサービスで、外から渡された HTML を評価する場合を挙げている。
自分で書いた固定の HTML だけをテストで使う場合については、勧告に書いていない。
なので、ここでも「当たらない」とは書かない。
やること
まず npm ls を打つ
プロジェクトのフォルダで、次の1行を打つ。
npm ls body-parser multer undici happy-domnpm の公式ドキュメントによると、`npm ls` は入っているパッケージの版を木の形で出す。
名前を付けると、ほかのパッケージの中に入ったものも、道筋つきで出る。
Express 4.21.2 だけを入れたプロジェクトでは、`express@4.21.2` の下に `body-parser@1.20.3` が出た(2026-10-25 12:48 日本時間の実出力)。
この 1.20.3 は、修正版の 1.20.9 より小さい。
次に npm audit を打つ
npm auditnpm の公式ドキュメントによると、`npm audit` はプロジェクトの依存をレジストリに送り、知られている脆弱性の報告を受け取る。
ここで1つ、気をつけたいことがある。
npm audit は、パッケージごとに1行にまとめて重大度を出す。
undici だけを入れたプロジェクトでは、`Severity: high` の1行の下に勧告が3件並び、まとめの行も「1 high severity vulnerability」だけだった。

1件ごとの重大度は、`npm audit --json` の出力を jq で取り出すと見える。high は xjj6 の1件で、4qv8 と f72v の2件は moderate(Medium の npm での表記)だった。
high が1つに見えても、undici の中には3件入っている。
直接入れているパッケージは、修正版の番号に上げる
`npm ls` で直接の依存として出たものは、修正版の番号を指定して上げる。元の記事のプロジェクトでは、こう上げて、最後の `npm audit` が `found 0 vulnerabilities` になった(実出力の抜粋)。
$ npm install multer@2.5.0 undici@7.30.1
$ npm install -D happy-dom@21.0.4
$ npm audit
found 0 vulnerabilitiesundici は系列ごとに修正版が違う。6.x なら 6.29.1、7.x なら 7.30.1、8.x なら 8.12.2 以上にする。
Express の中の body-parser は、Express を上げる
Express 4.21.2 は、body-parser を `1.20.3` に固定している。
固定されているなら、Express を上げないと body-parser は変わらない。
Express 4.21.2 のプロジェクトで 4.22.3 に上げると、body-parser は 1.20.9 になり、`npm audit` は `found 0 vulnerabilities` になった(実出力)。
Express 5.3.0 を新しく入れたプロジェクトでは、body-parser は 2.4.0 で入った。
Express の指定に幅があっても、package-lock.json が古い番号を持っていれば、その番号のまま入る。
その場合は `npm update body-parser` で、指定の範囲の中で新しい版に上がる。
元の記事では、Express 4.22.1 のプロジェクトで 1.20.3 から 1.20.9 に上がった。
上げたら
もう一度 `npm ls` と `npm audit` を打つ。lockfile が変わったら、その変更もコミットに入れる。
`npm audit --omit=dev` にすると、devDependencies(テスト用の happy-dom など)が外れて見える。
ただ、外して見えなくなっただけで、当たらないことにはならない。
happy-dom をテストで使っているなら、上の条件を見て決める。
攻撃の状況
取得した勧告6件の本文に、実際に攻撃に使われたという記載はない。
まとめ
body-parser・multer・undici・happy-dom に、それぞれ High の勧告が出た。undici は同じ日に3件
`npm ls` で入っている番号を見る。Express の中の body-parser も出る
`npm audit` の high が1つでも、undici の中には3件入っている
修正版の番号を指定して上げる。Express の中の body-parser は、Express を上げる
出典
GitHub Advisory Database(body-parser): https://github.com/advisories/GHSA-27r3-jxmh-p828
GitHub Advisory Database(multer): https://github.com/advisories/GHSA-q7qp-rjg7-q26m
GitHub Advisory Database(undici、High): https://github.com/advisories/GHSA-xjj6-f33q-929c
GitHub Advisory Database(undici、Medium): https://github.com/advisories/GHSA-4qv8-2p9j-2685 / https://github.com/advisories/GHSA-f72v-6w45-q472
GitHub Advisory Database(happy-dom): https://github.com/advisories/GHSA-834v-8h66-3h79
npm Docs「npm ls」: https://docs.npmjs.com/cli/v11/commands/npm-ls
npm Docs「npm audit」: https://docs.npmjs.com/cli/v11/commands/npm-audit
npm Docs「npm update」: https://docs.npmjs.com/cli/v11/commands/npm-update