本文へ移動
情シスのミカタ
トレンド約6分で読めます

Node.jsのパッケージ11個の脆弱性23件を図解 修正版と当たる条件

2026年10月23日〜25日に当編集部が記事にしたnpmのパッケージ11個、脆弱性23件を、パッケージごとの修正版と当たる条件で1枚にまとめました。版が対象でも、設定や使い方が違えば当たらない勧告があります。更新できないときの回避策も整理します。

公開 情シスのミカタ編集部AIにより執筆チェック済み
文字
Node.jsのパッケージ11個の脆弱性23件を図解 修正版と当たる条件

この記事のまとめ

  • 10月23日〜25日に、npmのパッケージ11個で脆弱性23件を取り上げました。Nuxtが4件、Nodemailerが4件、undici・fast-uri・DOMPurifyが3件ずつです。
  • 当たる条件は3つに分かれます。既定のままで当たるのはbody-parserなど、設定や書き方が条件なのはmulterやDOMPurifyなど、外から入る値が条件なのは@graphql-tools/utilsやfast-uriなどです。
  • 更新できないときの回避策が書かれた勧告もあります。まずロックファイルで実際の版を確認し、条件に当たるかを照らします。
こんな方に#30代#40代#50代実務

Node.jsで作ったWebアプリや社内ツールの依存関係には、自分で入れた覚えのないパッケージが何百も入っています。10月23日から25日の3日間だけで、npmのパッケージ11個、計23件の脆弱性を当編集部は記事にしました。数が多いので、全部を更新する前に、自社に当たるものを絞る必要があります。

この記事では、11個の修正版と当たる条件を1枚の表にし、条件の種類で3つに分けました。更新できないときの回避策も載せています。

図解。npmのパッケージ11個の脆弱性23件。件数はNuxt 4、Nodemailer 4、undici 3、fast-uri 3、DOMPurify 3、ほかの6個が1件ずつ。パッケージごとに起きること、当たる条件、修正版を並べた一覧。body-parser 1.20.9と2.4.0、multer 2.5.0、undici 6.29.1・7.30.1・8.12.2、fast-uri 2.4.8・3.1.9・4.2.3、serialize-javascript 7.1.3、DOMPurify 3.4.17、Fastify 5.12.6以降、Nuxt 4.6.2、@graphql-tools/utils 12.0.2、Happy DOM 21.0.4、Nodemailer 10.1.4のリリースを参照。
Node.jsのパッケージ11個の脆弱性23件と修正版(2026年10月25日までの掲載)作成: 編集部 / 出典: GitHub Advisory Databaseをもとに編集部が作成

11個の脆弱性と修正版

深刻度は、勧告に書かれているものだけを載せています。

パッケージ 起きること 当たる条件 修正版
body-parser 1回の要求でアプリが停止(High) 既定の設定。認証は不要 1.20.9・2.4.0
multer 1回の要求でプロセスが停止(High) fileFilterが非同期 2.5.0
undici 停止2件、fetch()の整合性検証の回避1件 EventSourceの利用など、件ごとに違う 6.29.1・7.30.1・8.12.2(検証の回避は7.30.1・8.12.2)
fast-uri 参照先や接続先の判定が変わる。XSSも normalize・parse・出力のどれを使うか 2.4.8・3.1.9・4.2.3
serialize-javascript XSS 関数のソースを攻撃者が操作できる 7.1.3
DOMPurify 無害化の後にスクリプトが残る(Critical・High・Low) SAFE_FOR_TEMPLATESやIN_PLACEなどの設定 3.4.17
Fastify ヘッダー名の検証を回避される propertyNamesのenumやconstに大文字 5.12.6以降
Nuxt 経路ルールの回避2件、XSS、スクリプト実行 大小文字を区別しない設定ほか、件ごとに違う 4.6.2(Nuxt 3に修正版なし)
@graphql-tools/utils プロトタイプ汚染(High) 上流のサーバーを攻撃者が操作できる 12.0.2
Happy DOM コード実行(High) JavaScriptの実行を有効にして外部のHTMLを読む 21.0.4
Nodemailer 宛先の誤読3件、DKIM署名で停止1件 宛先の検証や、DKIM署名を使う送信 各勧告が10.1.4のリリースを参照

Nuxtの4件は、経路ルールの回避が2件(大文字小文字とパーセント符号化)、サーバーアイランド内のuseHeadSafeのXSS、NuxtLinkからのスクリプト実行です。Nodemailerも4件で、undici・fast-uri・DOMPurifyが3件ずつ、ほかの6個が1件ずつです。Nodemailerは、DKIM署名の停止について、勧告の本文が未修正としている一方で参考リンクに10.0.10のリリースがあり、修正済みと断定できません。更新先は、勧告とリリースの内容を照らして決めます。Nuxt 3は2026年7月31日にサポートが終わっていて、経路ルールの回避に修正版は出ません。

当たる条件は3つに分かれる(編集部の整理)

同じ「脆弱性」でも、攻撃が成立する条件はパッケージごとに違います。条件の種類で分けると、先に見るパッケージが決まります。

図解。当たる条件は3つ。既定のままで当たる(body-parser、Nuxt)、設定や書き方が条件(multer、DOMPurify、Fastify、Happy DOM、serialize-javascript、Nodemailer)、外から入る値が条件(@graphql-tools/utils、fast-uri、Nodemailer、undici)。更新できないときの回避策7つと、版を調べる・条件を照らす・更新か回避策の確認の順。
当たる条件の3つの型と、更新できないときの回避策作成: 編集部 / 出典: GitHub Advisory Databaseをもとに編集部が整理

既定のままで当たるのは、body-parserです。経路の振り分けの前に本文を読むため、認証も当たる経路も要らず、既定の設定のアプリが対象になります。Expressの4.22.3と5.3.0は、指定の範囲に修正版が入るので、Expressを待たなくても依存を入れ直せば修正版が入ります。ただし、ロックファイルが古い版に固定されていると変わりません(body-parserの脆弱性 1回の要求でアプリが止まる恐れ)。

設定や書き方が条件なのは、multerなどです。multerのfileFilterは、中身を調べる、データベースに問い合わせるといった処理を待つ書き方が珍しくなく、その書き方がそのまま条件に当たります。同期の処理にすれば当たりません(multerの脆弱性 非同期のfileFilterで落ちる)。Happy DOMは、20.0.0から既定でJavaScriptの実行を無効にしており、設定で有効にしていなければ当たりません(Happy DOMの脆弱性 3月の修正の抜け道)。

外から入る値が条件なのは、上流のサーバーや入力のURI、宛先などを攻撃者が操作できる場合です。@graphql-tools/utilsは、上流のGraphQLサーバーが攻撃者の手に渡ったときに、プロトタイプ汚染が起きます。fast-uriは、入力のURIを許可の判定やキャッシュのキーに使っている場合に、判定がずれます。

なぜ版だけでは決められないのか

勧告の対象版は、パッケージのコードの範囲を示すものです。自社のアプリが、そのコードの危ない部分を通るかどうかは、設定と使い方で決まります。逆に、条件に当たらないからといって更新しなくてよいわけではありません。条件に当たる使い方を、後から追加する可能性があります(編集部の見立て)。

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

  • 影響する: Node.jsで社外に公開するWebアプリやAPIを動かしている会社です。body-parser、Nuxt、Fastifyは、版と設定の確認が要ります。
  • 影響する: ファイルのアップロードやメールの送信、URIの解釈をアプリで行っている会社です。multer、Nodemailer、fast-uriが入っていないかを確認します。
  • 影響する: 委託先が作ったNode.jsのアプリや、Node.jsで動く製品を使っている会社です。中のパッケージの版は、委託先や提供元に確認します。
  • 影響しない(発表の範囲では): Node.jsのアプリを動かしていない会社です。npmのパッケージをテストや開発のツールとしてだけ使う場合は、Happy DOMのように、外部のHTMLを読まなければ当たらないものがあります。

今日の確認の手順

  1. ロックファイルで版を見ます。 11個のパッケージ名で検索し、実際に入っている版を一覧にします。入れた覚えのないパッケージも対象です。
  2. 条件に照らします。 上の3つの型で、設定と使い方が当たるかを、開発担当に確認します。
  3. 更新日を決めます。 当たる場合は、修正版への更新日を決めます。ロックファイルが古い版に固定されているなら、固定を外す作業も含めます。
  4. 更新できないときは回避策を当てます。 body-parserはinflate: false、multerはfileFilterの同期化、Nuxtはrouter.options.sensitive: trueが、勧告に書かれた回避策です。
  5. 委託先に問い合わせます。 委託先のアプリは、11個のうち入っているものと、更新の予定を書面で出してもらいます。

「版が対象かどうか」と「条件に当たるかどうか」を分けて確認すると、更新の順番を決めやすくなります。

委託先に出してもらう情報の例

委託先や製品の提供元には、次の4点を書面で出してもらうと、自社で条件を照らせます。

版の一覧だけが返ってきたときは、2の設定の確認を重ねて依頼します。版が対象でも設定が条件に当たらなければ、更新の優先度を下げられます。逆に、設定が当たるのに更新日が決まらない場合は、回避策を先に当てます。

よくある質問

Q自社のアプリで、どのパッケージが入っているかはどう調べますか。

Aロックファイル(package-lock.jsonなど)で、実際に入っている版を確認します。Expressを使うアプリなら、自分で入れていなくてもbody-parserが入っています。委託先が作ったアプリは、依頼先に一覧を出してもらいます。

Q版が対象なら、必ず被害を受けますか。

A受けるとは限りません。たとえばmulterはfileFilterが非同期のときだけ、Happy DOMはJavaScriptの実行を有効にして外部のHTMLを読むときだけです。条件に当たるかを、設定と使い方で確認します。

Qロックファイルで版が固定されていると、どうなりますか。

A依存を入れ直しても、古い版のままです。body-parserはExpressの指定の範囲に修正版が入りますが、ロックファイルで古い版に固定されていると変わりません。

出典・参考

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

執筆

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

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

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

監修

佐々木 航株式会社Game

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

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

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

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