Go製フレームワークEchoのProxyミドルウェアに脆弱性、WebSocketの切り替えを断られた接続でルートの認証を回避されるおそれ。govulncheckで出ない間の確かめ方
CVE-2026-118264Go製のWebフレームワークEchoのProxyミドルウェアで、WebSocketへの切り替えを上流に断られた接続が中継されたまま残り、Echoのルートで行う認証・認可を回避されるおそれがある脆弱性(CVE-2026-118264)が、2026年10月23日にEchoから公表されました。修正版はv4の4.16.1とv5の5.4.1ですが、その後にProxyミドルウェアとクライアントのIPの扱いの修正が続いたため、上げる先はv4が4.16.3、v5が5.4.4です。11月1日時点で、Goの脆弱性データベースには未収録で、govulncheckでは検出されません。
2026-11-01更新:重点記事と同じ作りに書き直しました。上げる先(4.16.3・5.4.4)とIPExtractorの移行、govulncheckでまだ検出されない点を加えました。
- 対象は、EchoのProxyミドルウェアで上流へ転送するルートを外に開いている構成です。v4は4.16.0以前、v5は5.4.0以前が該当します。
- 深刻度はEchoの評価でCVSS 4.0の9.1(緊急)です。11月1日時点でKEVには載っておらず、攻撃のコード(PoC)の公開も確認できませんでした。
- 上げる先はv4が4.16.3(Go 1.26以上)、v5が5.4.4です。4.16.3はクライアントのIPの扱いが変わるため、プロキシの裏で動かす場合は先にIPExtractorを設定します。
01EchoのProxyミドルウェアで起きることと仕組み
EchoのProxyミドルウェアは、利用者がWebSocketへの切り替え(アップグレード)を求めると、上流のサーバーが受け入れたかを確かめる前に、接続をそのまま中継する方式(生のトンネル)に切り替えていました。上流が通常のHTTP応答を返して接続を保ったままにすると、その接続で続けて送られるHTTPリクエストは、Echoのルーターやルートごとのミドルウェアを通らずに、同じ上流へ直接届きます。[1]
このため、Echoのルートだけで行っている認証・認可を回避されるおそれがあります。Echoは、任意のホストへ中継できるわけではなく、上流自身の認証を回避するものでもないと説明しています。修正版では、アップグレードをGoの標準のリバースプロキシで扱い、上流が正しく受け入れたときだけ中継に切り替えます。断られたアップグレードは通常のHTTPリクエストのままです。[1]
断られたアップグレードの接続が中継されたまま残り、Echoのルートの認証を通らない
Echoのアドバイザリから、攻撃の入口と脆弱な処理を並べる。
EchoのProxyミドルウェア(v4 4.16.0以前、v5 5.4.0以前)
出典 Echo公式「GHSA-cxf3-9h37-7rr8」(2026-10-29更新)
02Echoの脆弱性の影響を受ける条件
Echoのアドバイザリは、悪用には次の3つがそろう必要があるとしています。Proxyミドルウェアを使っていないアプリは、この脆弱性の対象になりません。[1]
- 外部から届くルートに、Proxyミドルウェア(
middleware.Proxy・middleware.ProxyWithConfig)を置いている - 上流のサーバーが、アップグレードを断っても接続を閉じない
- 狙われる上流のリソースが独自の認可を持たず、Echoのルートでの確認に頼っている
影響を受ける版について、Echoはv4・v5の全系列で生のトンネルの実装があったとし、v4.15.0・v4.16.0・v5.0.0・v5.4.0で再現を確かめ、v4.0.0のソースにも同じ確認の抜けがあると書いています。[1]
03Echoの脆弱性の悪用の状況
11月1日に確かめた時点で、米CISAの悪用が確認された脆弱性の一覧(KEV、10月30日版)には載っていません。CVEの記録に米CISAが付けた評価(SSVC、10月30日)も、悪用は「なし」です。[3][4]
Echoのアドバイザリには再現を確かめた版の記載がありますが、攻撃のコード(PoC)は載っておらず、公開されたPoCも確認できませんでした。今後30日に悪用される見込みの推定(EPSS)は0.43%です(10月31日時点)。深刻度は、EchoとCVEの採番機関のGitHubの評価でCVSS 4.0の9.1(緊急)です。NVDは11月1日時点で分析中で、独自の値を付けていません。[1][5][6]
公表から1週間で修正が続き、11月1日時点で悪用もGoのデータベースへの収録も無い
アドバイザリ、CVEの記録、KEVなどから、日付のある出来事を並べる。
Echo GitHub・米CISAなど
2026年10月23日
10月24日
10月29日
10月30日
10月30日
10月31日
11月1日
出典 Echo公式「GHSA-cxf3-9h37-7rr8」(2026-10-29更新)、CVE Program「CVE-2026-118264」(2026-10-29)、米CISA「Known Exploited Vulnerabilities Catalog」(2026-10-30版)、Go公式「Go Vulnerability Database」(2026-11-01確認)
04Echoの対象の版と推奨する版
今回の脆弱性は4.16.1と5.4.1で直ります(どちらも10月23日公開)。ただ、4.16.1の時点ではv4に、クライアントが送ったIPのヘッダーを信頼してしまう2件(CVE-2026-118651、CVE-2026-118653)が残っていました。この2件はEchoのv4.16.3のリリースノートで修正済みとされています(GitHub Advisory Databaseの修正版の欄は、11月1日時点で空欄です)。v5は5.4.3で別の問題(GHSA-v97q-3xf5-rj74)が直り、5.4.4でProxyのX-Real-IPの扱いがさらに直されています。[2][7][8][9]
| モジュール | 影響を受ける版 | 今回の修正版 | 推奨する版 | 必要なGo |
|---|---|---|---|---|
github.com/labstack/echo/v4 | 4.0.0〜4.16.0 | 4.16.1 | 4.16.3(10月30日公開) | 1.26以上 |
github.com/labstack/echo/v5 | 5.0.0〜5.4.0 | 5.4.1 | 5.4.4(10月30日公開) | 1.25以上 |
推奨する版は、Echoのアドバイザリ・リリースノートと、Goのモジュールのプロキシ(proxy.golang.org)で公開済みの版から出しました(11月1日確認)。更新の前に、Echoのリリースノートで変更点を確かめてください。[2][7][10]
この件は4.16.1・5.4.1で直るが、上げる先は4.16.3・5.4.4
アドバイザリとリリースノートから、v4とv5を並べる。
出典 Echo公式「GHSA-cxf3-9h37-7rr8」(2026-10-29更新)、Echo公式「v4.16.3のリリースノート」(2026-10-30)、Echo公式「v5.4.3・v5.4.4のリリースノート」(2026-10-30)
05Echoの版を確かめて上げる手順
間接的な依存も含めて、v4・v5のどちらが何の版で入っているかを確認します。
ターミナルgo list -m all | grep labstack/echoProxyミドルウェアを使っている箇所を探します。見つからなければ、この脆弱性の対象ではありません(他の修正のために上げることは勧めます)。
ターミナルgrep -rn 'middleware.Proxy' --include='*.go' .v4を4.16.3に上げる場合は、Goの版が1.26以上かを確かめます。プロキシの裏で動かしているなら、先にIPExtractorを設定します。
ターミナルgo version grep -rn 'IPExtractor' --include='*.go' .推奨する版へ上げ、go.mod・go.sumを整えます(使っている系列の行を実行します)。
ターミナルgo get github.com/labstack/echo/v4@v4.16.3 go get github.com/labstack/echo/v5@v5.4.4 go mod tidyテストを通したあと、組み上がったバイナリに記録された版を確かめます。コンテナイメージの中のバイナリでも同じ確認をします。
ターミナルgo list -m github.com/labstack/echo/v4 github.com/labstack/echo/v5 go version -m ./app | grep labstack/echo
06すぐ上げられないときの回避策
074.16.3に上げる前のIPExtractorの設定
4.16.3では、Echo#IPExtractorを設定していない場合、Context.RealIP()がX-Forwarded-For・X-Real-IPを使わず、接続元のアドレスを返すように変わりました。Proxyミドルウェアが上流へ送るX-Real-IPも、この値で置き換えます。[7][10]
ロードバランサーなどの裏で動かしているアプリは、設定しないまま上げると、利用者全員がプロキシのアドレスに見えます。回数制限、IPによるアクセス制限、ログに影響するため、Echoは上げる前に、自社のプロキシだけを信頼するIPExtractor(ExtractIPFromXFFHeaderかExtractIPFromRealIPHeaderにTrustIPRangeを指定)を設定するよう求めています。プロキシを置かない場合はExtractIPDirect()を使います。v5は5.4.4でもこの移行は要りません。[7][9][10]
08govulncheckで出ない間の確かめ方
Goの脆弱性データベース(vuln.go.dev)には、11月1日時点でEchoのv4が3件(GO-2021-0051・GO-2022-1031・GO-2026-6293)、v5が2件(GO-2026-4502・GO-2026-6293)しか載っておらず、今回のCVE-2026-118264や同じ時期のEchoのアドバイザリは収録されていません。govulncheckやそれを使うCIの検査で何も出なくても、対象外とは判断できません。[11]
当面は、go list -mや、組み上がったバイナリに記録されたモジュールの版で、v4・v5の版を直接確かめます。Echo v4は、最新版に対して不具合の修正を2026年12月31日まで、セキュリティの修正を2027年12月31日まで行うとしています。新しく作るものにはv5を勧めています。[10]
脆弱性の公表・更新一覧で、Goの関連情報を調べることもできます。

よくある質問
WebSocketを使っていなければ、対象外ですか?
アプリがWebSocketを使っていなくても、Proxyミドルウェアのルートがあれば、攻撃者がアップグレードを求めることはできます。対象かどうかは、Proxyミドルウェアを使っているか、上流が断った後に接続を閉じるか、上流のリソースが独自に認可しているかで判断します。[1]
上流がアップグレードに101以外を返せば防げますか?
防げません。Echoのアドバイザリは、101以外の応答を返すだけでは問題の中継を防げないとしています。上げられないときは、Proxyのルートに届く前にアップグレード要求を断るか、上流で認可します。[1]
govulncheckで警告が出ません。対応済みと考えてよいですか?
11月1日時点で、この脆弱性はGoの脆弱性データベースに収録されていないため、govulncheckでは出ません。go list -m all | grep labstack/echoで版を確かめてください。[11]
出典・参考資料
- Echo公式:GHSA-cxf3-9h37-7rr82026-10-23公表・10-29更新(日本時間) / 仕組み、悪用の3つの条件、影響を受ける版と再現した版、修正版4.16.1・5.4.1、修正の内容、回避策、CVSS 4.0 9.1
- GitHub Advisory Database:GHSA-cxf3-9h37-7rr82026-10-24収録(日本時間) / 収録日、影響範囲と修正版、原公表日との区別
- 米CISA:Known Exploited Vulnerabilities Catalog(JSON版 2026.10.30)2026-11-01確認 / KEVに載っていないこと
- CVE Program:CVE-2026-118264の記録2026-10-29公開(日本時間) / 採番機関(GitHub)、CVEの公開日、CISAのSSVC(Exploitation: none、10月30日)
- FIRST:EPSS(CVE-2026-118264)2026-10-31 / 今後30日に悪用される見込みの推定 0.43%
- NVD:CVE-2026-1182642026-11-01確認 / 分析中で、GitHubの評価だけが載っていること
- Echo公式:v4.16.3のリリースノート2026-10-30 / CVE-2026-118651・CVE-2026-118653の修正、IPExtractorの移行、Go 1.26以上
- GitHub Advisory Database:GHSA-99jh-6h7p-pp36・GHSA-246p-cpwv-v3jq2026-10-29更新(日本時間) / v4の影響範囲が4.16.2までで、修正版の欄が空欄であること(GHSA-246p-cpwv-v3jqも同じ)
- Echo公式:v5.4.3・v5.4.4のリリースノート2026-10-30 / 5.4.3でのGHSA-v97q-3xf5-rj74の修正、5.4.4のX-Real-IPの修正、v5は移行不要
- Echo公式:README(v4.16.3)2026-10-30 / IPExtractorの移行の例、v4の修正の提供期間、Go 1.26以上。版の公開日はproxy.golang.orgで確認
- Go公式:Go Vulnerability Database(モジュールの索引)2026-11-01確認 / labstack/echo/v4・v5の収録がGO-2021-0051・GO-2022-1031・GO-2026-6293・GO-2026-4502だけであること
- 修正のコミット:github.com/labstack/echo/commit/1855061e572ae9dab727c811d8382f266bfbaaecGitHub Advisoryの参考リンク / 修正の内容・経緯
- 修正のコミット:github.com/labstack/echo/commit/3fb0ba7e17645bb65611e2a08875d0a2f65c421fGitHub Advisoryの参考リンク / 修正の内容・経緯
- リリースノート:github.com/labstack/echo/releases/tag/v4.16.1GitHub Advisoryの参考リンク / 修正の内容・経緯
- リリースノート:github.com/labstack/echo/releases/tag/v5.4.1GitHub Advisoryの参考リンク / 修正の内容・経緯
あわせて読みたい記事
PHPのWindows版のBrotliの脆弱性、8.5.12-1などへの入れ替えとcURL・Guzzleの確かめ方(CVE-2026-111497)
PHPのWindows版に同梱のBrotliの脆弱性CVE-2026-111497は、米CISAが悪用を確認しています。10月21日の版も対象のままである理由、GuzzleやWordPressで自動展開が有効になる条件、8.5.12-1などへの入れ替えと確かめ方を説明します。
Brotliの脆弱性の確認方法、PythonとNode.jsで対象かを確かめて直す(CVE-2026-111497、コード実行のおそれ)
圧縮形式Brotliの展開処理の脆弱性CVE-2026-111497(HTTP2Shell)は、米CISAが悪用を確認しています。Pythonのbrotli・brotlicffi、Node.jsの同梱版などで、自分の版と構成が対象かを確かめる方法と修正版を、言語ごとに説明します。
Starletteの脆弱性BadHost、Hostヘッダーでパスによる認証の確認を回避されるおそれ。FastAPIを上げても古い版が残る場合の確かめ方
Starletteの脆弱性CVE-2026-48710(BadHost)は、細工したHostヘッダーでrequest.url.pathを偽り、パスで判定するアクセスの確認を回避されるおそれがあります。9月2日にKEVに追加されました。FastAPI・vLLM・LiteLLMの下で古いStarletteが残る例と、間接依存の確かめ方を説明します。