Repository navigation
chore(deps): move Go to 1.27.4 for GO-2026-6859 - #2499
Merged
Merged
Conversation
Go 1.27.4 fixes GO-2026-6859 (CVE-2026-97054): an HTTP/1 server can crash when MaxBytesReader's limit is exceeded while its handler writes response headers. govulncheck reports it reachable, so the Security workflow fails on main. go.mod, every golang builder image (make check-go-version) and the docs that name the version move from 1.27.3 to 1.27.4. Refs defilantech#2498 Signed-off-by: Christopher Maher <chris@mahercode.io>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Moves Go from 1.27.3 to 1.27.4, the release that fixes GO-2026-6859 (CVE-2026-97054) in
net/http. Every Go builder image moves with it, asmake check-go-versionrequires.Why
The Security workflow has failed on main since #2490 (2026-11-11 05:35Z). govulncheck reports GO-2026-6859 as reachable from this code, and on main any reachable vulnerability fails the job. Pull requests still pass, because they fail only on vulnerabilities they add (#2381). The tracking issue job opened #2498 for it, and the first clean scan of main closes it.
The vulnerability: on an HTTP/1 server, when
MaxBytesReader's limit is exceeded,net/httpsetsConnection: closewithout synchronization. A handler that reads the request body while it writes response headers can crash the server. It affects Go before 1.26.11 and 1.27.0 through 1.27.3.Exposure today looks low:
MaxBytesReaderin the repo is the router proxy'shandleCompletion(internal/router/proxy.go:323). It reads the whole body withio.ReadAllbefore it writes any header, so it does not do the concurrent read and write the crash needs.net/httpis reachable from every binary.Released binaries take their Go version from
go.modthrough goreleaser. Merging this before the next release (#2474) means that release is built with 1.27.4.Refs #2498
How
1.27.3becomes1.27.4in every file that names it, 16 in all:go.mod. No other line changes.test/e2e/stubupstream/Dockerfileand.devcontainer/devcontainer.json.golang:1.27.4andgolang:1.27.4-alpineare both on Docker Hub (published 2026-11-10, amd64 and arm64).deployment/macos/README.md,docs/minikube-quickstart.md,docs/site/guides/macos-metal.md, and the example versions inscripts/check-go-version.shandscripts/gate.sh.Not changed:
scripts/testdata/govulncheck/. They pin their own versions.golang:1.26inapi/foreman/v1alpha1). They are defaults for gated repos, not builders of this one.Testing
govulncheck v1.9.0, the commit
security.ymlinstalls, withGOOS=linux GOARCH=amd64:The one vulnerability it lists as imported but not called matches what the failing main run lists.
make check-go-version: all 8 golang builder images match go.mod's go 1.27.4.Gates, under Go 1.27.4:
make testpasses, withinternal/controllerin 197 s.make lint-all: 0 issues on darwin and linux, with golangci-lint v2.15.0 built with Go 1.27.4.make test-scriptspasses.Checklist
make testpasses locallymake lintpasses locallygit commit -s) per DCOAssisted-by: Claude Code (Claude Opus 5.5) (traced the failing Security run to GO-2026-6859, made the version bump, checked the router proxy's MaxBytesReader use, and ran govulncheck on both toolchains plus the test and lint gates)
Assisted-by: qwen38-flash-next (unsloth/Qwen3.8-Flash-Next-GGUF UD-Q4_K_XL, generic (llmkube-gufo-rocm-gfx1151) runtime, self-hosted with LLMKube on AMD Strix Halo (Ryzen AI Max, Radeon iGPU); roles: read-only review. Confirmed no 1.27.3 pin was missed and the pinned fixtures and presets were rightly left alone; flagged that an earlier copy of this description called the 16 files the same set #2224 changed, which was wrong and is now corrected)