The Wire · Showcase
CRYPTO/TLS PATCHES KEYUPDATE DOS, COMPILER FIXES TIME-TRAVELING PROOFS
By RepoJournal · Filed · About Go
Go shipped a critical fix for a denial-of-service vulnerability in TLS handshake handling that allowed malicious clients to force infinite key derivation operations on servers.
The crypto/tls fix [1] stops counting handshake messages like KeyUpdate as state-advancing after the handshake completes, closing a window where attackers could trigger repeated expensive operations. In the compiler, a subtle bug in the prove pass [2] allowed proofs to be applied before their underlying values executed, leading to incorrect optimizations that have now been retabulated. Integer constant optimization [3] now shares static backing variables across all integer sizes up to 255, letting the linker eliminate redundant symbols in the read-only data segment. Separately, crypto/ecdsa [4] no longer panics when Sign receives an invalid crypto.Hash(0) argument. On the tooling front, gopls [5] now correctly adds missing fmt imports when the fill switch code action generates a default case with fmt.Sprintf, ensuring generated code compiles without manual fixes. The benchmarks suite [7] has been refreshed to latest versions with problematic ones disabled, and the module build version bumped to 1.26, though benchmarks-50 currently runs 387 benchmarks instead of its target. vscode-go [6] upgraded to TypeScript 5 and @types/node 16, fixing breaking changes from the version bump.
One email a day. Unsubscribe in one click.
Keep up with Go in about 3 minutes a day: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
One email a day. Unsubscribe in one click. Read a past issue →
Action items
- → Review and apply the crypto/tls KeyUpdate fix to any servers handling untrusted clients golang/go [immediate]
- → Update gopls if you use fill switch code actions to avoid missing import issues golang/tools [plan]
- → Re-run benchmark suites with the refreshed versions to validate against new baselines golang/benchmarks [plan]
References
- [1] crypto/tls: do not count handshake messages as state-advancing post-handshake golang/go
- [2] cmd/compile: fix time traveling proofs in prove golang/go
- [3] cmd/compile: generalize staticuint64s sharing to larger integer constant types golang/go
- [4] crypto/ecdsa: avoid panic when Sign is called with crypto.Hash(0) golang/go
- [5] gopls/internal/analysis/fillswitch: add missing fmt import golang/tools
- [6] extension/package.json: bump to typescript 5 & @types/node 16 golang/vscode-go
- [7] cmd/bent: refresh versions of all the bent benchmarks golang/benchmarks