Vulnerability DatabaseGHSA-fxhh-mj9j-w84f

GHSA-fxhh-mj9j-w84f: 
JavaScript vulnerability analysis and mitigation

Summary

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.

Details

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.

Proof of concept

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
0

The upstream receives two requests. The second one reaches internal.example even though prepareRequestFunction rejects that host, and the hook is called only once.

Impact

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

Related JavaScript vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

GHSA-fxhh-mj9j-w84fHIGH7.1
  • JavaScript logoJavaScript
  • proxy-chain
NoYesNov 11, 2026
GHSA-8hp6-7rhf-3g4fMEDIUM6.5
  • JavaScript logoJavaScript
  • proxy-chain
NoYesNov 11, 2026
GHSA-hqmv-qgp3-jx75MEDIUM5.9
  • JavaScript logoJavaScript
  • minimatch
NoYesNov 11, 2026
GHSA-c859-jr93-m5j4MEDIUM5.4
  • JavaScript logoJavaScript
  • minimatch
NoYesNov 11, 2026
GHSA-jx97-gwvc-pfxxLOWN/A
  • JavaScript logoJavaScript
  • matrix-js-sdk
NoYesNov 11, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Additional Wiz resources

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management