Repository navigation
fix: bump golang.org/x/net and Go to 1.26.9 to address GO-2026-6612 - #433
Conversation
GO-2026-6612 (Critical): the HTTP/2 server can refund connection-level flow control twice for the same data, letting a client bypass MaxReceiveBufferPerConnection. The bug exists in both golang.org/x/net and the HTTP/2 implementation bundled in net/http. - golang.org/x/net: v0.57.0 -> v0.60.0 - Go: 1.26.4 -> 1.26.9 - golang.org/x/crypto/mod/sync/sys/term/text/tools: bumped transitively Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Why this is safe to merge1. Only dependency versions change. The diff touches 2. The Go bump is a patch release (1.26.4 → 1.26.9). Go patch releases only contain security and bug fixes. They don't change the language or break APIs, and we're staying on the 1.26 line we already moved to in #423. 3. The 4. Our own exposure to this CVE is low. GO-2026-6612 is in the HTTP/2 server. The CLI is an HTTP client: there's no 5. Verification
Not covered: CI doesn't run the Rollback: if anything comes up, reverting this single commit fully restores the previous versions. |
Update: integration and e2e tests passFollowing up on the "Not covered" note above: I ran both token-gated suites locally on this branch (Go 1.26.9,
All verification is now done: CI, CodeQL, |
Summary
Fixes GO-2026-6612 (Critical): the HTTP/2 server can refund connection-level flow control twice for the same data, once when a client resets a stream and again when the handler reads the buffered data. A malicious client can use this to bypass
MaxReceiveBufferPerConnection.The bug exists in two places, so both are bumped:
golang.org/x/netnet/httpbundles its own HTTP/2 code)Other
golang.org/x/*modules (crypto, mod, sync, sys, term, text, tools) were bumped transitively bygo mod tidy. CI picks up Go 1.26.9 automatically throughgo-version-file: src/go.mod.Adds a
Securitychangie entry.Testing
govulncheck ./...: 0 vulnerabilities (previously reported GO-2026-6612)go build ./...passescommonunit tests passcmd/e2etests need a live OpsLevel API token. Locally they fail with401 Unauthorizedboth before and after this change, so CI is the real check here.🤖 Generated with Claude Code