速報

プレステージで最大約550万件の情報持ち出し|ロードサービスは代替運用で継続

CATEGORY

Fastifyのプロキシで公開パスの制限回避|関連2パッケージを更新して上流到達を確認

※本ページのリンクにはプロモーションが含まれています。

プロキシのパス制限を迂回する転送と許可・拒否される上流への経路を表す概念イラスト

この記事のポイント

脆弱性
CVE-2026-120213
CVE-2026-120214
CVE-2026-117518
深刻度

CRITICAL9.1

対象
@fastify/http-proxy 9.0.0以上11.6.6未満(CVE-2026-120213)、@fastify/http-proxy 11.6.0〜11.6.2(CVE-2026-120214)、@fastify/reply-from 12.8.1未満(CVE-2026-117518)
悪用状況
不明
推奨対応
http-proxyを11.6.6以降、reply-fromを12.8.1以降へ更新し、間接依存と再配備先の版を確認する。隔離環境で想定外パスへ到達しないことを上流ログと照合する。
公表日

目次

Fastifyでの一部だけを公開するを組んでいる場合、パスの書き換え設定をの根拠にしていないか確認してください。2026年11月2日、@fastify/http-proxyと@fastify/reply-fromで、想定した上流パスの境界を越える3件のが公表されました。http-proxyは11.6.6以降、reply-fromは12.8.1以降への更新を確認する必要があります。

最も評価が高い-2026-120213は、パラメーター付きのprefixとrewritePrefixを組み合わせた構成が対象です。別の問題を修正したhttp-proxy 11.6.3へ更新済みでも、この問題の修正先には届きません。依存の実際の版と、転送先で受け取るパスを両方確認することが今回の対応の中心になります。

本稿は同日確認した開発元の公式勧告に基づくニュースです。以下の棚卸し・検証・調査の手順は本サイトの提案で、独自の攻撃実験や実測結果ではありません。勧告で示された影響を、全Fastifyアプリの侵害や任意コード実行へ広げて解釈しないでください。

スポンサーリンク

公開用の末尾パスが消える問題

Fastify公式勧告 GHSA-h3vp-4jfr-v364によると、CVE-2026-120213では、URLデコード済みのルートパラメーターが再エンコードされずにrewritePrefixへ挿入されます。パラメーター内のスラッシュと、フラグメントやクエリーの区切りとして解釈される文字の組み合わせにより、追加の上流パスが入り、固定したはずの末尾部分が失われる仕組みです。

提供元は、ごとの公開アバターに限定する構成を例に、別の管理用パスへ転送される可能性を示しています。この経路は「..」を使う必要がありません。上位ディレクトリーを示す文字列だけを探す検査では、同じ種類の境界回避を見落とす理由になります。

影響版は@fastify/http-proxyの9.0.0以上11.6.6未満、修正版は11.6.6です。 v3.1は9.1、Criticalで、ネットワークからの攻撃、権限不要、利用者操作不要という評価です。この9.1はCVE-2026-120213の値であり、以下の2件へ共通のスコアとして当てはめるものではありません。

成立条件は、パラメーター付きprefixとrewritePrefixによって、上流の公開領域を限定していることです。上流側が別途認証・認可を行っているかで到達後の影響は変わります。勧告は上流次第でや回避につながると説明しており、プロキシが存在するだけで全管理APIを操作できるとは述べていません。

バックスラッシュの扱いが食い違う別経路

Fastify公式勧告 GHSA-hr26-gmr2-pwcvが扱うCVE-2026-120214は、http-proxyの11.6.0から11.6.2が対象で、11.6.3がです。文字として存在するバックスラッシュを先に正規化しても、パーセントデコードの後から現れるバックスラッシュには同じ処理が届かない点が問題になります。

この問題では、上流がデコード後のバックスラッシュをパス区切りとして解釈することが必要です。公式はWindows上で静的ファイルを配信するホストなどを例に挙げています。公開用の接頭辞を付けて転送したつもりでも、上流の解釈によってその外側の資源へ到達し得ます。評価はCVSS v3.1で5.9、Moderateです。

この2件をまとめる場合も、条件は混ぜないことが重要です。120214には上流の区切り解釈という追加条件がありますが、120213のパラメーター置換問題をWindows限定と説明することはできません。運用台帳では、それぞれのCVE、利用版、該当する設定、上流の動作を別の項目にします。

スポンサーリンク

reply-fromを直接使うアプリも更新対象

Fastify公式勧告 GHSA-vp2r-3vgv-32g9は、@fastify/reply-fromの12.8.0までにCVE-2026-117518があると説明しています。従来の検査はスラッシュによるドット区切りだけを見ていましたが、その後に使うWHATWG URLパーサーがバックスラッシュなどを正規化し、検査時とは違う転送パスを作る可能性があります。

たとえば公開用の上流パスへ利用者の入力を連結してreply.from()へ渡す構成や、その呼び出しの前にルートのガードを置いている構成が確認対象です。入口で正しい公開ルートに一致したという事実と、正規化後の転送先が許可範囲に収まることは同じ確認ではありません。

修正版12.8.1では、URLを構築する前に正規化し、単一・二重のドットへ解決される区間、制御文字、曖昧な空白を拒否する処理が説明されています。評価はCVSS v3.1で8.2、Highです。3件とも公式勧告の欄は更新を求めており、独自の文字列置換を修正の代替として扱わないでください。

二つのパッケージと設定を一緒に棚卸しする

http-proxyの公式READMEは、このプラグインがreply-from上に構築されていると説明しています。自分のpackage.jsonにreply-fromを書いていなくても、間接依存として導入される可能性があります。逆にreply-fromだけを使うアプリへ、http-proxyの設定条件をそのまま適用することもできません。

npm ls @fastify/http-proxy @fastify/reply-from
npm explain @fastify/reply-from

上記は管理のプロジェクトでを調べる例です。ローカル開発機だけで実行せず、本番を作ると同じ依存解決結果を確認します。複数版が表示されたら、それぞれを呼び出す親パッケージまで追います。別のパッケージ管理ツールを使う環境では、そのツールの依存ツリー確認方法へ読み替えてください。

設定では、prefix、rewritePrefix、reply.from()の引数を検索し、パラメーターやワイルドカードがどこで挿入されるかを整理します。http-proxyのREADMEはupstream内のパスが無視され、転送先のベースパスにはrewritePrefixを使うと説明しています。upstreamのURLに公開用パスを書いたから限定できている、という思い込みもこの機会に点検します。

棚卸し表には、外部に見せる入口、書き換え後に許可する上流パス、転送できるメソッド、認証を行う場所、上流での認可の有無を記録する方法を勧めます。GETの公開参照と、更新・削除を行う処理を同じ経路で扱っていないかを確認すると、到達可能性と実際の業務影響を分けて評価できます。

スポンサーリンク

更新は依存解決から再配備まで確認する

更新時はhttp-proxy 11.6.6以降とreply-from 12.8.1以降をそれぞれ確認します。依存範囲を書き換えただけでは、ロックファイルに古い版が残ったり、別の親パッケージから旧版が導入されたりする場合があります。採用する版を決めた後、クリーンなで依存ツリーを再確認してください。

公式READMEの現在のhttp-proxyはFastify 5.xを前提としています。古いFastify構成で、互換性を確認せず最新版へ置換する作業は避けます。旧系列に同じ修正があるか不明なら、保守可能な構成への移行と利用停止・公開範囲の見直しを担当者間で判断します。確認していない旧系列の安全な版番号を補ってはいけません。

コンテナを利用している場合は、修正した依存を含むイメージを再ビルドし、各レプリカへ配備したことを確認します。タグ名だけでなくダイジェスト、ビルド日時、配備先、依存確認の結果を残すと、古いや更新漏れを区別できます。再起動の成功と、修正版が実際に動いていることは別の判定項目です。

拒否応答だけでなく上流の到達記録を見る

更新後の検証は、権限を持つ隔離したで行います。実データや本物の管理APIを置く代わりに、公開用と非公開用のダミーを用意し、上流が受け取ったパスとメソッドを記録します。ここでの手順は検証計画の提案であり、本サイトが当該版で実施した試験結果ではありません。

通常の公開パス、通常のテナント識別子、存在しない識別子を基準にし、その後でパーセントエンコードした区切りやドット区間など、各勧告が扱う入力を試験項目に加えます。120213はドットなしの置換経路も対象なので、ドット区間の試験だけで完了にしないでください。期待する拒否と、公開機能が引き続き使えることを両方確認します。

入口の応答が400や403でも、先に上流へ転送されてからエラーになっていないか確認が必要です。逆に200が返っても、それだけで保護領域へ到達したとは判断できません。プロキシと上流の記録をリクエストIDで対応付け、到達先のパスを照合します。デコード前後の値を記録する場合は、資格情報や個人情報をログへ増やさないよう対象を絞ります。

過去の影響を調べる際は、外部公開期間、当時の設定、上流での認可、保存されているアクセス記録を組み合わせます。異常なエンコードや非公開パスへのアクセスは調査の手掛かりですが、単独で侵害成功の証拠にはなりません。今回読んだ公式勧告は実環境の悪用確認を示していないため、悪用状況は未確認として扱います。

対応完了の条件は、修正版への反映、依存ツリーの確認、想定外パスの非到達、通常機能の動作、過去の露出の評価です。URLの接頭辞を付けたことだけを認可の証拠にせず、上流自身にも必要な権限検査があるかを点検することを勧めます。文字の解釈が変わる境界を、設定と到達記録の両側から確認してください。

出典・一次情報

本記事は以下の公開情報をもとに作成しています。最新の状況は各リンク先で確認してください。

この記事を書いた人

Ryohei

Webエンジニア / アプリ開発者 / 技術ブログ運営者

福岡のWeb制作会社に勤務するWebエンジニアです。10年以上にわたりWeb制作・開発に携わり、ヒアリングや進行管理から、コーディング、CMSの構築、システム開発、サーバーの構築・保守・運用まで、Webサイト制作の工程を幅広く担当しています。Webサイトは、これまでに100以上の構築・保守を手がけてきました。

個人でもWebサイトの制作・改修やWebアプリの開発・運用を行い、AIを活用した開発にも取り組んでいます。近年はWebセキュリティにも注力しています。

2015年から技術メディア「Into the Program」を運営し、実務や開発で得た知識をもとに、プログラミングの実装方法やWebサイトの運用・セキュリティ情報を発信しています。

主な分野
Webサイト構築・保守・運用 / HTML/CSS / JavaScript / PHP / WordPress / サーバー構築・保守・運用 / アプリ開発 / セキュリティ対策
資格・試験合格
情報セキュリティマネジメント試験
基本情報技術者試験
AWS認定ソリューションアーキテクト アソシエイト
PHP8技術者認定ウィザード
メディア運営
2015年〜

記事の作成・更新について

セキュリティ記事は、ベンダーの公式アドバイザリやCVE・JVNなどの一次情報を参照し、出典と情報確認日を記載します。実環境での検証を行った場合は、その環境と確認範囲を明示します。重要な追加情報や誤りを把握した場合は、内容を確認して追記・訂正します。

あわせて確認したい対策・解説

ほかの脆弱性

関連する記事

おすすめの書籍

キーワードから探す

スポンサーリンク

エンドポイント

APIでリクエストを送る先のURL。また、ネットワークにつながるパソコンやスマートフォンなどの端末のことも指す。

詳しく見る

検証環境

本番環境に反映する前に、変更や更新が問題なく動くかを試すための環境。本番と同じ構成にできるほど確認の精度が上がる。

詳しく見る

キャッシュ

一度取得したデータを一時的に保存しておき、次に使うときに再利用して処理を速くする仕組み。

詳しく見る

ビルド

ソースコードなどから、実際に動かしたり配布したりできる形の成果物を作る作業。

詳しく見る

HTTP

ブラウザとWebサーバーがやりとりするための決まりごと(プロトコル)。暗号化したものはHTTPSと呼ぶ。

詳しく見る

ロックファイル

パッケージマネージャーが、実際に入れた依存パッケージのバージョンを記録するファイル。package-lock.jsonなど。

詳しく見る

依存関係

プログラムが動くために必要な、ほかのライブラリやパッケージとの関係。また、その必要な部品そのもの。

詳しく見る

npm

JavaScript(Node.js)のパッケージを公開・入手・管理するための仕組みとツール。世界最大級のパッケージの公開場所でもある。

詳しく見る

回避策

修正版をすぐに適用できない場合に、脆弱性を悪用される条件をなくすための一時的な対処。機能の無効化や設定の変更など。

詳しく見る

パッチ

ソフトウェアの不具合や脆弱性を修正するための更新プログラム。適用することで既知の問題を解消する。

詳しく見る

認可

認証で確認した利用者に、どの情報や機能へのアクセスを許すかを決める仕組み。

詳しく見る

SSRF

サーバーに攻撃者が指定した宛先へリクエストを送らせ、本来は外から届かない内部のシステムにアクセスする攻撃。

詳しく見る

CVSS

脆弱性の深刻度を0.0〜10.0の数値で評価する共通の基準。数値が大きいほど深刻度が高い。

詳しく見る

テナント

クラウドやSaaSで、利用する組織ごとに分けられた区画。一つの仕組みを複数の組織で共有する形をマルチテナントと呼ぶ。

詳しく見る

パッケージ

ソフトウェアを配布・インストールしやすいように、プログラムと必要な情報をひとまとめにしたもの。npmやComposerなどで管理する。

詳しく見る

CVE

公開された脆弱性に付けられる世界共通の識別番号。「CVE-2026-12345」のように年と連番で表す。

詳しく見る

脆弱性

ソフトウェアや設定の不備のうち、攻撃者に悪用されると情報漏えいや不正操作などにつながる弱点。

詳しく見る

アクセス制御

誰が、どの情報や機能に、どこまでアクセスできるかを決めて制限する仕組み。

詳しく見る

プロキシ

通信の間に立ち、利用者の代わりにリクエストを送ったり受け取ったりする中継の仕組みやサーバー。

詳しく見る

API

ソフトウェアやサービスの機能を、ほかのプログラムから決まった方法で呼び出して使えるようにした窓口。

詳しく見る