]> Cypherpunks repositories - gostls13.git/commit
net/http: add httpcookiemaxnum GODEBUG option to limit number of cookies parsed
authorNicholas Husin <husin@google.com>
Tue, 30 Sep 2025 18:02:38 +0000 (14:02 -0400)
committerGopher Robot <gobot@golang.org>
Tue, 7 Oct 2025 18:23:20 +0000 (11:23 -0700)
commit9b9d02c5a015910ce57024788de2ff254c6cfca6
treedc1718bb8feed7ba30f8f3bf42a3875a6119d027
parent3fc4c79fdbb17b9b29ea9f8c29dd780df075d4c4
net/http: add httpcookiemaxnum GODEBUG option to limit number of cookies parsed

When handling HTTP headers, net/http does not currently limit the number
of cookies that can be parsed. The only limitation that exists is for
the size of the entire HTTP header, which is controlled by
MaxHeaderBytes (defaults to 1 MB).

Unfortunately, this allows a malicious actor to send HTTP headers which
contain a massive amount of small cookies, such that as much cookies as
possible can be fitted within the MaxHeaderBytes limitation. Internally,
this causes us to allocate a massive number of Cookie struct.

For example, a 1 MB HTTP header with cookies that repeats "a=;" will
cause an allocation of ~66 MB in the heap. This can serve as a way for
malicious actors to induce memory exhaustion.

To fix this, we will now limit the number of cookies we are willing to
parse to 3000 by default. This behavior can be changed by setting a new
GODEBUG option: GODEBUG=httpcookiemaxnum. httpcookiemaxnum can be set to
allow a higher or lower cookie limit. Setting it to 0 will also allow an
infinite number of cookies to be parsed.

Thanks to jub0bs for reporting this issue.

For #75672
Fixes CVE-2025-58186

Change-Id: Ied58b3bc8acf5d11c880f881f36ecbf1d5d52622
Reviewed-on: https://go-internal-review.googlesource.com/c/go/+/2720
Reviewed-by: Roland Shoemaker <bracewell@google.com>
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-on: https://go-review.googlesource.com/c/go/+/709855
Reviewed-by: Carlos Amedee <carlos@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Michael Pratt <mpratt@google.com>
doc/godebug.md
src/internal/godebugs/table.go
src/net/http/cookie.go
src/net/http/cookie_test.go
src/runtime/metrics/doc.go