Go 1.27.2 與 1.26.9 修補 15 個漏洞,net/http 的 CONNECT 與 HTTP/2 佔多數
oss-security(轉載 golang-announce)· 2026-10-08
Go 一次修掉 15 個安全問題,其中 net/http 就占 9 個,主軸是 HTTP/1 的 CONNECT 連線狀態處理錯誤,以及 HTTP/2 的資源耗盡。這不是只改 bug 的 patch release,任何對外提供 Go HTTP 服務或反向代理的人都該升級。
修補版本為 Go 1.27.2 與 Go 1.26.9,兩者都在 2026-10-08 發布,見 官方 release 頁。公告未列各 CVE 的受影響版本範圍,也未提及 golang.org/x/net,本文不推測。
漏洞機制:CONNECT 之後仍當成 HTTP
CVE-2026-94439(Go issue 81744):handler 對 HTTP/1 的 CONNECT 請求回 2xx 後若沒有 hijack,伺服器仍繼續把這條連線當 HTTP 解析。2xx 的 CONNECT 回應其實代表連線已變成隧道,位元組不該再被解讀為請求。
若前面有代理把後續位元組視為隧道資料、Go 卻當成新請求處理,就形成 request smuggling。修法是伺服器對 CONNECT 回應後一律關閉連線,不論狀態碼。
同類問題出現在用戶端與代理:CVE-2026-56866(issue 81740)是 HTTP/1 用戶端在 CONNECT 被拒後連線不同步,ReverseProxy 現在對 CONNECT 回 405。
| 修補前 | 修補後 | |
|---|---|---|
| 伺服器收到 CONNECT 並回 2xx | 繼續讀取並服務連線上的請求 | 回應後一律關閉連線 |
| ReverseProxy 收到 CONNECT | 可能造成連線不同步 | 回 405 |
HTTP/2 與資源耗盡
HTTP/2 方面有幾項,影響都是讓伺服器崩潰或耗盡資源:
CVE-2026-97032:HPACK 編碼器表大小的競態,造成伺服器崩潰。CVE-2026-78659:宣告大量Trailer欄位造成記憶體耗盡。CVE-2026-78669:反覆變更SETTINGS_INITIAL_WINDOW_SIZE造成過高 CPU。CVE-2026-78660:HTTP/2 transport 接受格式錯誤的 framing 標頭,經反向代理可走私回應。
另一項是 CVE-2026-78667:Range 標頭含大量範圍會吃光 CPU,現在加上 200 個範圍的上限,可用 GODEBUG httpservecontentmaxranges 調整。若你的服務靠大量範圍請求運作,升級後行為會改變。
影響範圍
其餘修補涵蓋 crypto/tls 的 ECH 外層擴充重複引用造成記憶體放大(CVE-2026-97031)、cmd/go 對 golang.org/fips140 與 golang.org/toolchain 的校驗繞過(CVE-2026-94444、CVE-2026-94447)、html/template 兩項、net/textproto 與 mime/multipart 的記憶體限制繞過,以及 Windows 上 os.Root.Mkdir 可經 junction 離開根目錄(CVE-2026-56857)。完整清單見 公告。
- 對外 Go HTTP 服務與反向代理:升級到
1.27.2或1.26.9,並重建二進位檔與容器映像,因為標準函式庫是靜態編進程式的。 - 在代理後面使用 CONNECT 的服務:確認升級後關閉連線的行為不會破壞既有隧道流程。
- CI 與 Windows 使用者:
cmd/go的校驗繞過牽涉惡意 module proxy,內部 proxy 的來源需要核對。
各漏洞的嚴重度分數與受影響版本,公告未說明。