Goの脆弱性対応では、Go本体(標準ライブラリとgoコマンド)と、go.modで入れるモジュールを分けて確かめます。標準ライブラリの修正はビルドに使ったGoの版で決まり、モジュールの修正はgo.modの版で決まります。ここでは、今確かめたい脆弱性、Goのサポート期限、govulncheckの使い方、本番で動いているバイナリの確かめ方をまとめます。
- Go本体は10月に2回の安全性の更新がありました。上げる先は1.27.3か1.26.10です。
- Go 1.25のサポートは1.27.0の公開で終わり、10月の修正は1.25向けに出ていません。
- 本番で動いているバイナリの版は、go version -mとgovulncheck -mode binaryで確かめます。
01今確かめたいGoの脆弱性
Go本体(標準ライブラリとgoコマンド)と、よく使われるモジュールのうち、2026年に公表され、悪用の確認(米CISAのKEV)、深刻度が緊急、または利用の多い部分に当たるものを選びました。11月1日に確認した内容です。
| 脆弱性・問題 | 主な対象・条件 | 修正・対応 | 詳細 |
|---|---|---|---|
| Go本体の10月8日付の更新 CVE-2026-78659ほか15件 | net/httpのHTTP/2サーバーでメモリ・CPUを使い切られる、落とされるおそれ。CONNECTの扱いで接続の中身がずれ、CONNECTを共有のTransportで中継するリバースプロキシ(httputil.ReverseProxyを含む)では、別の利用者の応答が混ざるおそれ。html/template、goコマンドのチェックサム確認の不備も含みます。 | 1.27.2・1.26.9で修正。上げるなら1.27.3・1.26.10 | Goの告知[2] |
| Go本体の10月19日付の更新 CVE-2026-111943 | crypto/x509。システムの信頼する証明書が更新されない一部の環境で、信頼されなくなった中間証明書を含む証明書チェーンを受け入れるおそれ。 | 1.27.3・1.26.10で、該当する中間証明書を含むチェーンをVerifyで退けます | Goの告知[3] |
| golang.org/x/net/http2 CVE-2026-78659ほか | 標準ライブラリのHTTP/2と同じ問題。x/net/http2を直接使うプログラムは、Go本体を上げるだけでは直りません。 | 0.60.0で修正(11月1日時点の最新は0.62.0) | Goの脆弱性データベース[4] |
| gRPC-Goの認可の回避 CVE-2026-33186 | grpc/authzなど、メソッドのパスで認可するインターセプターを使い、拒否のルールと既定の許可を組み合わせたサーバー。先頭の「/」を欠いたパスで拒否のルールをすり抜けられるおそれ。CVSS 3.1で9.1(GitHubの評価)。 | 1.79.3で修正(3月19日公表)。9月のメモリ枯渇などは1.83.1で修正。最新は1.85.0 | gRPC-Goの告知[5] |
| EchoのProxyミドルウェア CVE-2026-118264 | Proxyミドルウェアで上流へ転送するルートを外に開いている構成。Echoのルートで行う認証を回避されるおそれ。CVSS 4.0で9.1(Echoの評価)。 | v4は4.16.3、v5は5.4.4へ。11月1日時点でgovulncheckでは検出されません | 記事 |
| Trivyの改ざんされた配布物 CVE-2026-33634 | 3月19〜20日、22〜23日(UTC)の間に、Trivy v0.69.4、Docker Hubのv0.69.5・v0.69.6、trivy-actionの0.35.0より前のタグ、版を固定しないsetup-trivyを使ったCI。CIの秘密情報を盗まれるおそれ。KEVに3月26日付で掲載。 | Trivyが安全とする版(v0.69.2・v0.69.3、trivy-action v0.35.0、setup-trivy v0.2.6)以降へ。該当期間に動いたCIの秘密情報を入れ替え、tpcp-docsという名前のリポジトリが無いか確かめます | Trivyの告知[6] |
Go本体の10月の2件とgRPC-Goは、10月30日版のKEVに載っていません。Goの脆弱性データベースの記録には深刻度の欄が無く、Go本体の脆弱性にGoチームはCVSSの値を出していません。[4][7]
02Goのサポート期限と更新先
Goは、新しい系列が2つ出るまで1つの系列をサポートし、その間に安全性の修正を小さな版(1.26.1、1.26.2など)で出します。決まった終了日はなく、新しい系列が出た日に2つ前の系列のサポートが終わります。[1]
| 系列 | 初版の公開 | 11月1日時点の最新 | サポート |
|---|---|---|---|
| Go 1.27 | 2026年8月19日 | 1.27.3 | サポート中(1.29が出るまで) |
| Go 1.26 | 2026年2月10日 | 1.26.10 | サポート中(1.28が出るまで) |
| Go 1.25 | 2025年8月12日 | 1.25.14(8月19日) | 終了(1.27.0の公開で終了) |
| Go 1.24以前 | — | — | 終了 |
日付はgo.devのリリース履歴の記載です。Go 1.25向けには10月の更新が出ていないため、10月に直った脆弱性は1.25.14にも残ります。今上げる先は1.27.3か1.26.10です。1.26に上げる場合は、次の系列の1.28が出るとサポートが終わる点を見込んでおきます。[1]
03Goの依存関係の脆弱性を確かめる方法(govulncheck)
Goの公式の道具はgovulncheckです。Goの脆弱性データベース(vuln.go.dev)と照合し、ソースを解析する場合は、脆弱な関数を自分のコードが呼んでいるかまで調べます。[8][9]
go install golang.org/x/vuln/cmd/govulncheck@latest
# モジュールのディレクトリで、ソースを解析する
govulncheck ./...
# 呼び出しの経路をすべて表示する
govulncheck -show traces ./...
# ビルド済みのバイナリを解析する
govulncheck -mode binary ./bin/server結果のうち「Your code is affected」の欄は、脆弱な関数への呼び出しの経路があるものです。「Informational」の欄は、読み込んでいるパッケージに脆弱性はあるものの呼び出しの経路が無いもので、公式の手引きは対応が要らない場合があるとしています。脆弱性が見つかると終了コードが0以外になるため、CIでそのまま止められます(-jsonや-format sarifの出力では0のままです)。[8][9]
バイナリの解析では呼び出しの経路は出ません。到達しないコードも報告される場合があります。[8]
04Goの脆弱性の確認の進め方
- 依存の版をgo.modとgo.sumで確かめる:実際にビルドに使う版は、
go list -m allで一覧にできます。直接書いていないモジュール(間接の依存)も含みます。なぜ入っているかはgo mod why -mで調べます。 - 依存を上げて記録する:
go get golang.org/x/net@v0.62.0のように版を指定して上げ、go mod tidyでgo.modとgo.sumをそろえてから、govulncheckをもう一度実行します。 - 本番で動いているバイナリを確かめる:
go version -mは、バイナリを作ったGoの版と、組み込まれたモジュールの版を表示します。コンテナの場合は、docker cpでバイナリを取り出して確かめるか、govulncheck -mode binaryに渡します。[10]
go list -m all | grep golang.org/x/net
go mod why -m golang.org/x/net
# バイナリを作ったGoの版と、組み込まれたモジュール
go version -m ./bin/serverGoに特有の罠は3つあります。
- 標準ライブラリの修正は、新しいGoでビルドし直して配備するまで本番に入りません。Goはライブラリをバイナリに組み込むため、サーバーのGoを入れ替えても、動いているプログラムは古いままです。
- go.modの
goの行は、必要な最低の版です。ビルドに使われるGoは、CIで入れたGo(golang:1.26のイメージなど)と、toolchainの行・GOTOOLCHAINの設定で決まります。[11] - Goの脆弱性データベースへの収録は、提供元の公表より遅れる場合があります。EchoのCVE-2026-118264は、10月23日の公表から11月1日時点まで未収録でした。govulncheckの結果に加え、使っているフレームワークの告知も見ます。
05Goの解説記事
よくある質問
govulncheckで何も出なければ、対応は要りませんか?
Goの脆弱性データベースに収録された脆弱性については、そう判断できます。ただし収録は公表より遅れる場合があり、EchoのCVE-2026-118264は11月1日時点で未収録です。また、手元のソースを調べた結果と、本番で動いているバイナリが同じとは限りません。本番のバイナリは-mode binaryで確かめます。
go.modのgoの行を上げれば、標準ライブラリの修正は入りますか?
goの行は必要な最低の版で、標準ライブラリの修正は、実際にビルドに使ったGoの版で決まります。1.27.3や1.26.10でビルドし直して配備し、go version -mでバイナリの版を確かめてください。
Go 1.25.14は1.25系列の最新ですが、使い続けてよいですか?
Go 1.25は1.27.0の公開でサポートが終わり、10月の安全性の更新は1.27と1.26向けだけに出ています。HTTP/2のサーバーの問題やcrypto/x509の修正は1.25.14に入っていないため、1.26.10か1.27.3へ上げます。
出典・参考資料
- Go公式:Release History(リリース履歴とサポートの方針)2026-11-01確認 / サポートの方針、各系列の公開日と最新の版、1.25のサポート終了
- golang-announce:Go 1.27.2 and Go 1.26.9 security release2026-10-09(日本時間) / 10月の更新の15件の内容と修正版
- golang-announce:Go 1.27.3 and Go 1.26.10 security release2026-10-21(日本時間) / crypto/x509の修正(CVE-2026-111943)と修正版
- Goの脆弱性データベース:GO-2026-66032026-10-09公表(日本時間) / HTTP/2の問題が標準ライブラリとgolang.org/x/net/http2の両方に及ぶこと、x/netの修正版0.60.0、記録に深刻度の欄が無いこと
- gRPC-Go:GHSA-p77j-4mvh-x3m32026-03-19公表(日本時間) / 認可の回避の条件、修正版1.79.3、回避策、CVSS 9.1(GitHub)
- Trivy:GHSA-69fq-xp46-6x232026-03-25公表(日本時間) / 改ざんされた配布物と期間、安全な版、秘密情報の入れ替えとtpcp-docsの確認
- 米CISA:Known Exploited Vulnerabilities Catalog(JSON版 2026.10.30)2026-11-01確認 / TrivyのCVE-2026-33634の掲載(3月26日付)、Go本体とgRPC-Goの未掲載
- Go公式:govulncheck のドキュメント2026-11-01確認 / -mode binary・-show traces、終了コード、バイナリ解析の制約
- Go公式:Tutorial: Find and fix vulnerable dependencies with govulncheck2026-11-01確認 / 導入のコマンド、Your code is affectedとInformationalの違い
- Go公式:go version コマンドの説明(go help version)2026-11-01確認 / go version -mでビルドに使ったGoの版とモジュールの版を表示できること
- Go公式:Go Toolchains2026-11-01確認 / go.modのgoの行(必要な最低の版)とtoolchainの行、GOTOOLCHAINによる選び方
