
Cloud Vulnerability DB
A community-led vulnerabilities database
In forward mode (plain HTTP, direct or through an HTTP or SOCKS upstream), proxy-chain de-chunked an inbound request body and wrote it to the upstream without framing. Node's HTTP client does not chunk outbound bodies on GET, HEAD, DELETE, or OPTIONS by default, and the proxy had already stripped the inbound Transfer-Encoding header as hop-by-hop, so the body reached the upstream with neither Content-Length nor Transfer-Encoding. An upstream server or upstream proxy parsed those bytes as a second request.
A proxy client sends a GET with Transfer-Encoding: chunked whose chunked body contains a complete second HTTP request. The proxy calls prepareRequestFunction for the outer request only, forwards it, and the smuggled request follows on the same upstream connection without ever being seen by the hook. Because the outbound connection comes from Node's shared keep-alive agent, the response to the smuggled request can be delivered to a different client of the same proxy.
The relevant code is the headers option of the outbound request in src/forward.ts and src/forward_socks.ts, built from validHeadersOnly(request.rawHeaders), which drops Transfer-Encoding.
Affected: all 2.x and 3.x releases before 3.0.2.
Fixed in 3.0.2 (#738): when the inbound request carried Transfer-Encoding, the outbound request is sent with transfer-encoding: chunked and any Content-Length removed, so the body stays framed as a body.
Run a proxy with a prepareRequestFunction that allows allowed.example and rejects internal.example, forwarding through an upstream HTTP proxy. Send on one connection:
GET http://allowed.example/ HTTP/1.1
Host: allowed.example
Transfer-Encoding: chunked
<chunk size in hex>
GET http://internal.example/secret HTTP/1.1
Host: internal.example
0The upstream receives two requests. The second one reaches internal.example even though prepareRequestFunction rejects that host, and the hook is called only once.
HTTP request smuggling (CWE-444). A proxy client can send requests that bypass the operator's prepareRequestFunction allow or deny logic, and can inject a response into another client's request on a shared upstream connection. Affects operators of proxy-chain servers that accept plain HTTP requests, and their clients.
Source: NVD
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."