本文へ移動
English version →
重大 9.1 急ぎ度: 早めに

@fastify/expressに認証をすり抜ける脆弱性、4.0.9で修正

Fastify上でExpressのミドルウェアを動かすプラグイン@fastify/expressに、パス単位で付けた認証やレート制限が素通りされる脆弱性が見つかりました。影響するのは4.0.5から4.0.8を使い、ignoreDuplicateSlashesを有効にしているアプリケーションです。4.0.9以上への更新と、設定の有無の確認を進めてください。

CVE-2026-112362 公開 生成 AI で作成
画像は生成 AI で作成したイメージです

急ぎ度: 早めに

CVSS v3は9.1で認証なしにネットワーク越しで悪用できる一方、修正版4.0.9があり、悪用には既定では無効のignoreDuplicateSlashesが必要なため、該当する環境は早めの更新が妥当です。

関係があるか

FastifyでExpress向けのミドルウェアを使い、管理画面やAPIの認証・認可・レート制限をパス単位のミドルウェアで実装している組織が対象です。ただし、FastifyのignoreDuplicateSlashesオプションを有効にしている場合に限ります。

製品影響を受ける版直った版
@fastify/express 4.0.5以上4.0.9未満(4.0.5から4.0.8) 4.0.9

確かめ方

  1. 1プロジェクトのルートでnpm ls @fastify/expressを実行し、4.0.5から4.0.8が入っていないか確認します。モノレポや複数サービスでは、サービスごとに実行してください。
  2. 2Fastifyの生成コードでignoreDuplicateSlashesを検索し、trueにしていないか確認します。既定は無効なので、記載がなければこの条件には当てはまりません。
  3. 3app.use('/admin', ...)のように、パスを指定して認証・認可・レート制限のミドルウェアを登録している箇所を洗い出します。該当すれば、素通りの影響を受けるルートの範囲が分かります。

何が起きたか

@fastify/expressの4.0.5から4.0.8に、パス単位で登録した認証・認可・レート制限のミドルウェアが飛ばされ、保護しているはずの管理用パスなどのハンドラーがそのまま実行される脆弱性があります。

このプラグインは、Fastifyのルーターと、Expressのミドルウェアを動かす層の2か所でURLを見ています。ignoreDuplicateSlashesを有効にすると、重複したスラッシュを1つにまとめる正規化が働きます。絶対形式の要求先では、この正規化がスキームの直後にある区切りまで巻き込みます。その結果、Fastifyのルーターは要求を保護対象のパスに振り分けるのに、Express側はそのパスへの要求と認識しません。パス単位のミドルウェアは動かず、ハンドラーだけが動きます。

CWE-436に分類される、2つの部品がURLを別々に解釈することで起きる脆弱性です。設定が当てはまる環境では、見送る理由は乏しいとみられます。

攻撃の流れ

  1. 1

    前提となる構成

    ignoreDuplicateSlashesを有効にしたFastifyで、パス単位のミドルウェアに認証などを任せている。

  2. 2

    特殊な要求先

    攻撃者が、絶対形式の要求先を使った要求をサーバーへ送る。

  3. 3

    解釈の食い違い

    正規化で区切りが潰れ、Fastifyは保護対象のパスと解決するが、Express層はそのパスと認識しない。

  4. 4

    ミドルウェア回避

    認証・認可・レート制限が実行されないまま、ハンドラーが動く。

公開されている情報をもとにした流れの例です。

どう悪用されるか

悪用に認証は要りません。ネットワーク越しに要求を送れる攻撃者であれば、利用者の操作も必要ありません。前提となるのは、ignoreDuplicateSlashesが有効になっていることだけです。

CVSSの評価では、機密性と完全性への影響が高く、可用性への影響はありません。管理用のパスが認証なしで呼ばれれば、本来は見えない情報の取得や、データや設定の書き換えにつながります。レート制限が飛ばされた場合は、回数制限をかけていた処理が無制限に呼ばれます。実際の被害の大きさは、素通りされたハンドラーが何をするかで決まります。

今すぐやること

  1. 1

    影響を受けるか確認する

    @fastify/expressの版と、ignoreDuplicateSlashesの設定を確認します。両方に当てはまるサービスを優先して更新します。

    npm ls @fastify/express
  2. 2

    4.0.9以上に更新する

    package.jsonの指定を見直し、ロックファイルも更新して、修正版に更新します。ビルドとテストを通したうえでデプロイします。

  3. 3

    更新後の版を確認する

    デプロイ後の環境で、実際に4.0.9以上が入っているかを確認します。コンテナーを使う場合は、古いイメージが残っていないかも見てください。

    npm ls @fastify/express
  4. 4

    認証の置き場所を見直す

    認証・認可をパス単位のミドルウェアだけに頼っている箇所は、Fastifyのフック側でも検証するよう検討します。ルーターとミドルウェア層で解釈が食い違っても、1か所が守る形になります。

すぐ更新できないとき

すぐに更新できない場合は、認証をFastifyのpreHandlerのように、ルーターが要求を解決したあとに動くフックで強制します。もう1つの方法は、ignoreDuplicateSlashesを既定の状態に戻すことです。ただし、重複スラッシュを含むURLの扱いが変わるため、既存のルートへの影響を確認してから切り替えてください。

背景

@fastify/expressは、Fastifyの上でExpress用のミドルウェアをそのまま動かすプラグインです。Expressで作った認証やセッション管理、レート制限の部品を残したままFastifyへ移行するときによく使われます。パスを指定して登録するミドルウェアは、とくに管理画面の保護を担うことが多く、素通りされたときの影響が大きい部品です。

今回の脆弱性は、Fastifyのルーターとプラグイン内のExpress層が、同じURLを別々に解釈することで起きます。ルーティングと認証が別の部品で動くため、片方だけがURLを加工すると、保護されているはずのパスが保護されません。URLの正規化は、重複スラッシュの整理のように便利な設定ほど、こうした食い違いの入口になりやすい部分です。

よくある質問

Q.ignoreDuplicateSlashesを使っていなければ、更新しなくてよいですか。
A.この脆弱性の条件には当てはまらないため、直ちに悪用される状況ではありません。ただし、修正版の4.0.9が出ているので、次の定期更新で入れておくと、あとから設定を変えたときの事故を防げます。

まだ分かっていないこと

  • 実際の攻撃で悪用されているかどうかは、公表されていません。
  • Fastify本体やExpress本体、ほかのプラグインに同種の影響があるかは、告知に書かれていません。最新の状況は、GitHubのセキュリティアドバイザリGHSA-6h42-57hq-9746で確認してください。

この記事は、取得元の公開情報をもとに生成 AI で作成しています。誤りを含むことがあります。対応を決める前に、下の原文と参照先を確認してください。

影響パッケージ

種類パッケージ影響を受ける版直った版
@fastify/express @fastify/express
4.0.5 以上 4.0.9 未満
4.0.9
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。

@fastify/express is a Fastify plugin that runs Express middleware inside Fastify. In versions 4.0.5 through 4.0.8, when Fastify runs with the non-default ignoreDuplicateSlashes option enabled, the plugin matches path-scoped Express middleware against a URL whose duplicate-slash normalization has also collapsed the separator after an absolute-form request target's scheme, so Fastify's router resolves the request to the scoped path and runs the handler while the Express layer no longer sees that path. As a result, a request using an absolute-form target can reach a handler on a scoped route such as an admin path while the middleware for authentication, authorization, or rate limiting is skipped. An unauthenticated attacker needs only the non-default ignoreDuplicateSlashes option to be enabled. The issue is fixed in @fastify/express 4.0.9, and users should upgrade to 4.0.9 or later. As a workaround, enforce authentication in a Fastify hook such as preHandler that runs after the router resolves the request, or leave ignoreDuplicateSlashes at its default.

出典: CVE.org (CVE Program・cvelistV5) NVD

参照URL

当サイトでは、アクセス解析と広告の効果測定のために Cookie を使います。株式会社Game のサイト共通の設定です。 詳しく