概要

Go言語の開発チームは8月13日、セキュリティリリースとなる「Go 1.26.6」を公開した。今回のリリースでは、html/templateパッケージのクロスサイトスクリプティング(XSS)脆弱性や、cmd/goのモジュール検証を回避可能な脆弱性など、CVE番号が割り当てられた複数の深刻な問題が修正されている。あわせてnetnet/httpencoding/xmlcrypto/tlsといった標準ライブラリの脆弱性や、コンパイラ・ランタイムのバグも修正された。

セキュリティ修正の詳細

最も注目すべき修正の一つが、html/templateパッケージのtransition.gotJS()関数に存在したXSS脆弱性だ。トップレベルの{に続く/を、本来「正規表現リテラル」として扱うべき文脈で誤って「除算演算子」と解釈してしまうバグが原因で、<script>if(true){/{{.}}/g.test("x")}</script>のようなテンプレートに攻撃者が制御可能な値を埋め込むと、任意のJavaScriptが実行される恐れがあった。

モジュール管理まわりでは2件のCVEが修正されている。CVE-2026-56864は、悪意のあるGOSUMDBが透明性ログに記録されていない任意のモジュールコンテンツをクライアントに提供できてしまう問題で、cmd/gox/mod/sumdbが対象。CVE-2026-56865は、悪意のあるGOPROXYがsumdbタイルの検証をバイパスし、最大2つのタイルを偽造できてしまう問題で、x/mod/sumdb/tlogに関わる。いずれも、Goプロキシ経由でのモジュール取得時に透明性ログの検証をすり抜けて不正なコードが混入し得る点で深刻度が高い。このほか、encoding/asn1のUnmarshal処理で深くネストした構造を解析する際にスタック枯渇を招きかねない問題(CVE-2026-33818)も修正され、DoS攻撃のリスクを低減している。

標準ライブラリでは他にも、encoding/xml(*Decoder).DecodeElementが再帰深度のガードを迂回できてしまう問題、net/httpでサーバー側のUnencryptedHTTP2を有効化すると最初のヘッダ読み込みタイムアウトが無効化されてしまう問題、netおよびx/net/dns/dnsmessageで不正なSVCBレコードを解析した際にパニックが発生する問題が修正された。またcrypto/tlsでは、FIPS 140-3モードで拡張マスターシークレット(EMS)非対応の古い機器との互換性を確保するため、GODEBUG=fips140ems=0によって当該要件を選択的に無効化できるエスケープハッチが追加された。

コンパイラ・ランタイムの修正

セキュリティ修正に加え、コンパイラとランタイムのバグ修正も含まれる。cmd/compileのprove最適化パスが無効な間接呼び出しを生成してしまう不具合や、MIPS/MIPS64向けの乗算・除算命令でHI/LOレジスタからのスピルが破損する問題、MIPS64le向けのOffPtr命令で32ビットに収まらない(32ビットを超える)定数を扱う際に誤コンパイルが発生する問題が修正された。さらにランタイムでは、高いパニック発生負荷下でfpTracebackPartialExpandがSIGSEGVを引き起こす問題にも対応している。

アップデート方法

該当するセキュリティ問題の影響を受ける可能性があるユーザーは、速やかに1.26.6へのアップデートが推奨される。ソースからビルドしている場合はgit fetch --tags && git checkout go1.26.6で最新版に切り替えられるほか、公式サイトからバイナリ配布版をダウンロードすることも可能だ。特にモジュール検証に関わる2件のCVEについては、更新後にgo.sumgo.work.sumvendorディレクトリを削除してgo mod tidyを再実行し、依存関係を再検証することが望ましい。