]> Cypherpunks.ru repositories - gostls13.git/commit
net/http: only support "chunked" in inbound Transfer-Encoding headers
authorFilippo Valsorda <filippo@golang.org>
Fri, 1 May 2020 04:58:55 +0000 (00:58 -0400)
committerFilippo Valsorda <filippo@golang.org>
Wed, 6 May 2020 16:25:30 +0000 (16:25 +0000)
commitd5734d4f2dd1168dc3df94f2b9912299aea0c0ac
treea0421d9dadc9e5ba39d2d03c052de9236ecbb9dd
parent33249f46aae9a7ed951cd5691639a139aac3a990
net/http: only support "chunked" in inbound Transfer-Encoding headers

This is a security hardening measure against HTTP request smuggling.
Thank you to ZeddYu for reporting this issue.

We weren't parsing things correctly anyway, allowing "identity" to be
combined with "chunked", and ignoring any Transfer-Encoding header past
the first. This is a delicate security surface that already broke
before, just be strict and don't add complexity to support cases not
observed in the wild (nginx removed "identity" support [1] and multiple
TE header support [2]) and removed by RFC 7230 (see page 81).

It'd probably be good to also drop support for anything other than
"chunked" in outbound TE headers, as "identity" is not a thing anymore,
and we are probably off-spec for anything other than "chunked", but it
should not be a security concern, so leaving it for now. See #38867.

[1]: https://hg.nginx.org/nginx/rev/fe5976aae0e3
[2]: https://hg.nginx.org/nginx/rev/aca005d232ff

Change-Id: If17d0827f9c6167a0b19a158e2bc5844ec803288
Reviewed-on: https://go-review.googlesource.com/c/go/+/231418
Reviewed-by: Katie Hockman <katie@golang.org>
src/net/http/response_test.go
src/net/http/serve_test.go
src/net/http/transfer.go
src/net/http/transfer_test.go