HTTP/2 server memory exhaustion due to Trailer headers in net/http
What fixes it
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
When "Trailer" headers are sent by a client, the HTTP server internally uses the header values to populate the Request.Trailer map passed to the server handler. Because Request.Trailer is a map, each entry incurs memory overhead. For HTTP/2 servers, a malicious client can exploit this by sending a "Trailer" header that declares a large number of fields, causing the server to allocate a disproportionate amount of memory while bypassing Server.MaxHeaderValueCount and Server.MaxHeaderBytes limits. This exploit is not applicable for HTTP/1 servers, which do not support multiplexing a large number of requests over one TCP connection, and whose Server.MaxHeaderBytes are calculated differently.
Text from CVE List
Affected versions 3
- net/httpaffected: all versions before 1.26.9CVE List
- net/http/internal/http2affected: 1.27.0-0 before 1.27.2CVE List
- golang.org/x/net/http2affected: all versions before 0.60.0CVE List
References 6
- go.dev/cl/847185Referencevia CVE List
- go.dev/cl/847314Referencevia CVE List
- go.dev/issue/81857Referencevia CVE List
- groups.google.com/g/golang-announce/c/U2fTuyDJznIReferencevia CVE List
- groups.google.com/g/golang-announce/c/ZPwCyRUuGBsReferencevia CVE List
- pkg.go.dev/vuln/GO-2026-6603Referencevia CVE List