$ the-wire · showcase
CRYPTO/TLS PATCHES KEYUPDATE DOS, COMPILER FIXES TIME-TRAVELING PROOFS
By RepoJournal · Filed · About Go · Composed from the cited sources · methodology
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.
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