CVE-2024-6827
High · 7.5CVSS
7.5
EPSS
0.8%
Published
Mar 20, 2025
CISA due date
—
Cloudanix analysis
A web server parsing mistake can let an attacker sneak hidden requests through a proxy, potentially exposing data or disrupting an application.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- Low
- Impact
- Data Exposure
- Component
- Web Framework
- Class
- Improper Input Validation
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The flaw is an HTTP request smuggling weakness caused by improper validation of the Transfer-Encoding header. A vulnerable Gunicorn 21.2.0 backend can fall back to Content-Length parsing when it receives malformed or non-standard Transfer-Encoding values, creating a TE.CL parser disagreement between a front-end proxy/load balancer and the backend application server. If an upstream component interprets the request using Transfer-Encoding while Gunicorn interprets it using Content-Length, attacker-controlled bytes can be left in the connection and processed as the start of a subsequent request. This can enable desynchronization effects such as request queue poisoning, response mix-up, cache poisoning, access-control bypass, session confusion, SSRF against backend routes, reflected or stored XSS through poisoned responses, denial of service, and unintended access to data or application functions. The supplied package metadata indicates the affected downstream product github.com/NVIDIA/nvidia-container-toolkit (Go), fixed in version 1.16.2.
Why it matters to the business
Successful exploitation can cause web applications or APIs behind proxies to process attacker-supplied requests as if they came from other users or trusted infrastructure. In business terms, this can lead to unauthorized data exposure, account/session manipulation, corrupted cached content, service disruption, and abuse of internal-only functionality. The CVSS score of 7.5 reflects high confidentiality impact with network-based, unauthenticated exploitation conditions. Although it is not listed in CISA KEV, has no reported ransomware association, and has low EPSS at 0.00738, request smuggling bugs are often highly environment-dependent and can become severe where Gunicorn sits behind reverse proxies, CDNs, API gateways, or load balancers with differing HTTP parsing behavior. Organizations using affected downstream packages should upgrade promptly, particularly for internet-facing services.
How an attack unfolds
An attacker first identifies an HTTP service that routes traffic through a front-end component such as a reverse proxy, CDN, WAF, API gateway, or load balancer to a vulnerable Gunicorn 21.2.0 backend. The attacker then sends crafted HTTP/1.1 requests containing malformed or ambiguous Transfer-Encoding headers together with a Content-Length header. The front-end and backend disagree about where the request body ends: the front-end honors or interprets Transfer-Encoding, while Gunicorn rejects or mishandles the invalid value and falls back to Content-Length. This desynchronizes the shared backend connection. The attacker embeds a second partial HTTP request in the request body so that Gunicorn processes it as a separate request, often prepended to the next legitimate user request on the same connection. Depending on routing, authentication, caching, and application behavior, the attacker can poison caches, capture or influence responses, trigger backend-only endpoints, manipulate sessions, bypass front-end security controls, or cause instability by corrupting the HTTP request stream.
How to fix it
Upgrade affected components to fixed versions. For the provided affected product, upgrade github.com/NVIDIA/nvidia-container-toolkit to version 1.16.2 or later. Where Gunicorn is used directly, ensure Gunicorn is upgraded to a release that strictly validates Transfer-Encoding according to RFC requirements and does not fall back unsafely to Content-Length on malformed values. After upgrading, restart all affected services and recycle long-lived proxy/backend connections. As compensating controls, configure front-end proxies, CDNs, WAFs, and load balancers to reject requests containing both Transfer-Encoding and Content-Length, reject malformed or duplicate Transfer-Encoding headers, normalize HTTP/1.1 requests before forwarding, disable backend connection reuse if necessary, and prefer HTTP/2 or HTTP/3 at the edge only when translation to backend HTTP/1.1 is safely normalized. Ensure all proxy layers use consistent request parsing rules, strip hop-by-hop headers where appropriate, and block ambiguous header names with whitespace, casing tricks, comma-separated encodings, or non-standard values.
How to confirm the fix worked
Confirm the deployed package or container image includes github.com/NVIDIA/nvidia-container-toolkit version 1.16.2 or later, or an equivalent fixed Gunicorn dependency. Inventory runtime services to determine whether Gunicorn 21.2.0 is present in Python environments, container images, build manifests, SBOMs, or lockfiles. Validate that internet-facing and internal reverse-proxy paths reject ambiguous HTTP/1.1 requests containing both Transfer-Encoding and Content-Length, malformed Transfer-Encoding values, duplicate Transfer-Encoding headers, or Transfer-Encoding values other than an accepted canonical form such as chunked. Use a controlled request-smuggling test in a non-production-safe manner or a trusted scanner to verify that crafted TE.CL probes receive deterministic rejection at the edge and do not reach the backend. Review access logs before and after mitigation to confirm such requests produce 400-level rejection responses at the front-end rather than inconsistent backend behavior. Restart proxies and application workers after patching to clear persistent desynchronized connections.
Typical attack path
- Find an internet-facing or internally reachable HTTP service using Gunicorn 21.2.0 or an affected downstream component behind a proxy, CDN, WAF, API gateway, or load balancer.
- Confirm HTTP/1.1 keep-alive behavior and connection reuse between the front-end component and the Gunicorn backend.
- Send probe requests containing both Transfer-Encoding and Content-Length headers, including malformed Transfer-Encoding values, to test for front-end/back-end parsing differences.
- Measure timing differences, response mismatches, unexpected 400/5xx responses, duplicate responses, or reflected marker strings that indicate request desynchronization.
- Craft a TE.CL payload where the apparent body contains a second HTTP request intended for Gunicorn to process after the first request is completed.
- Use the smuggled request to target sensitive routes, poison cache keys, alter the next user's request context, bypass proxy-layer controls, or trigger internal application behavior.
- Repeat exploitation to exfiltrate data through response queue poisoning, manipulate sessions, perform business logic abuse, or degrade service availability.
How to detect it
To determine whether exploitation was attempted or successful, review logs from all HTTP layers: CDN, WAF, reverse proxy, load balancer, Kubernetes ingress, API gateway, Gunicorn access/error logs, application logs, and cache logs. Look for requests containing both Transfer-Encoding and Content-Length, malformed Transfer-Encoding values, duplicate Transfer-Encoding headers, unusual casing or whitespace around Transfer-Encoding, and request bodies that appear to contain a second HTTP request line such as GET / or POST /. Investigate clusters of 400, 408, 421, 502, 503, or 504 responses around such requests, especially where the front-end reports one request but the backend logs an additional unexpected request on the same connection. Search for mismatched request counts between proxy and backend logs, unexpected authenticated actions immediately following suspicious unauthenticated requests from the same connection path, anomalous cache entries, user complaints about seeing another user's content, unexplained session changes, and backend requests to internal-only paths that should be blocked at the edge. In forensic review, correlate connection identifiers, upstream request IDs, X-Forwarded-For chains, timing gaps, and keep-alive reuse patterns to identify desynchronization. Because no named threat actor or KEV activity is provided, treat detections as opportunistic probing unless correlated with successful business-logic abuse or data exposure.
- Transfer-Encoding: chunked
- Transfer-Encoding: identity
- Transfer-Encoding: gzip
- Transfer-Encoding: cow
- Transfer-Encoding: chunked, identity
- Transfer-Encoding : chunked
- Transfer-Encoding: chunked
- Transfer-Encoding: chunked\r\nContent-Length:
- Content-Length: 0\r\nTransfer-Encoding:
- Transfer-Encoding: xchunked
- Transfer-Encoding: chunked;
- Transfer-Encoding: chunked\r\nTransfer-Encoding:
- 0\r\n\r\nGET /
- 0\r\n\r\nPOST /
- GET / HTTP/1.1\r\nHost:
- POST / HTTP/1.1\r\nHost:
- Invalid HTTP request received
- Invalid HTTP version
- Bad request syntax
- upstream sent too much data
- upstream prematurely closed connection
- client sent invalid header line
- client sent invalid chunked body
- 400 Bad Request
- 502 Bad Gateway
- 503 Service Unavailable
What your security team should do
- Prioritize upgrade of affected NVIDIA container toolkit deployments to version 1.16.2 or later and update any direct Gunicorn 21.2.0 usage to a fixed release.
- Inventory all services where Gunicorn is deployed behind reverse proxies, CDNs, WAFs, API gateways, Kubernetes ingress controllers, or load balancers, because exploitability depends on parser differences across layers.
- Add or verify edge-layer rules that block requests with both Transfer-Encoding and Content-Length, malformed Transfer-Encoding values, duplicate Transfer-Encoding headers, or suspicious whitespace/obfuscation in HTTP headers.
- Run controlled request-smuggling validation against representative proxy-to-backend paths after patching to confirm ambiguous requests are rejected before reaching Gunicorn.
- Search historical web, proxy, WAF, CDN, ingress, and application logs for TE.CL probing patterns, unexpected response desynchronization, cache poisoning symptoms, and anomalous 400/502/503 spikes.
- Monitor for exploitation attempts even though this CVE is not currently in CISA KEV, has no known ransomware association, and has low EPSS, because request smuggling is commonly probed opportunistically on exposed web infrastructure.
- Include this issue in SBOM and container image scanning policies, especially for downstream dependencies and packaged products that may bundle Gunicorn behavior indirectly.
The record
Gunicorn version 21.2.0 does not properly validate the value of the 'Transfer-Encoding' header as specified in the RFC standards, which leads to the default fallback method of 'Content-Length,' making it vulnerable to TE.CL request smuggling. This vulnerability can lead to cache poisoning, data exposure, session manipulation, SSRF, XSS, DoS, data integrity compromise, security bypass, information leakage, and business logic abuse.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| PyPI | gunicorn | 0 | 22.0.0 |
| PyPI | gunicorn | 0 | 23.0.0 |
| Chainguard | emissary | 0 | 3.9.1-r14 |
| Chainguard | emissary-apiext | 0 | 3.9.1-r14 |
| Chainguard | emissary-oci-entrypoint | 0 | 3.9.1-r14 |
| Chainguard | py3.10-ambassador | 0 | 3.9.1-r14 |
| Chainguard | py3.11-ambassador | 0 | 3.9.1-r14 |
| Chainguard | py3.12-ambassador | 0 | 3.9.1-r14 |
| Chainguard | py3.13-ambassador | 0 | 3.9.1-r14 |
| Chainguard | superset | 0 | 4.1.1-r8 |
| Chainguard | superset-ci | 0 | 4.1.1-r8 |
| Chainguard | superset-entrypoint | 0 | 4.1.1-r8 |
| Chainguard | superset-iamguarded-compat | 0 | 4.1.1-r8 |
| Debian:11 | gunicorn | 0 | No fix |
| Debian:12 | gunicorn | 0 | No fix |
| Debian:13 | gunicorn | 0 | 23.0.0-1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS | python-gunicorn | 0 | 20.1.0-150400.12.9.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS | python-gunicorn | 0 | 20.1.0-150400.12.9.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS | python-gunicorn | 0 | 20.1.0-150400.12.9.1 |
| SUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS | python-gunicorn | 0 | 20.1.0-150400.12.9.1 |
| SUSE:Linux Enterprise Module for Public Cloud 15 SP3 | python-gunicorn | 0 | 19.7.1-150000.3.10.1 |
| SUSE:Linux Enterprise Module for Public Cloud 15 SP4 | python-gunicorn | 0 | 19.7.1-150000.3.10.1 |
| SUSE:Linux Enterprise Module for Public Cloud 15 SP5 | python-gunicorn | 0 | 19.7.1-150000.3.10.1 |
| SUSE:Linux Enterprise Module for Public Cloud 15 SP6 | python-gunicorn | 0 | 19.7.1-150000.3.10.1 |
| SUSE:Linux Enterprise Module for Python 3 15 SP6 | python-gunicorn | 0 | 20.1.0-150400.12.9.1 |
| SUSE:Linux Enterprise Server 15 SP4-LTSS | python-gunicorn | 0 | 20.1.0-150400.12.9.1 |
| SUSE:Linux Enterprise Server 15 SP5-LTSS | python-gunicorn | 0 | 20.1.0-150400.12.9.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP4 | python-gunicorn | 0 | 20.1.0-150400.12.9.1 |
| SUSE:Linux Enterprise Server for SAP Applications 15 SP5 | python-gunicorn | 0 | 20.1.0-150400.12.9.1 |
| Wolfi | emissary | 0 | 3.9.1-r14 |
| Wolfi | emissary-apiext | 0 | 3.9.1-r14 |
| Wolfi | emissary-oci-entrypoint | 0 | 3.9.1-r14 |
| Wolfi | py3.10-ambassador | 0 | 3.9.1-r14 |
| Wolfi | py3.11-ambassador | 0 | 3.9.1-r14 |
| Wolfi | py3.12-ambassador | 0 | 3.9.1-r14 |
| Wolfi | py3.13-ambassador | 0 | 3.9.1-r14 |
| Wolfi | superset | 0 | 4.1.1-r8 |
| Wolfi | superset-ci | 0 | 4.1.1-r8 |
| Wolfi | superset-entrypoint | 0 | 4.1.1-r8 |
| Wolfi | superset-iamguarded-compat | 0 | 4.1.1-r8 |
| openSUSE:Leap 15.6 | python-gunicorn | 0 | 20.1.0-150400.12.9.1 |
Related vulnerabilities
- CVE-2024-1135 Gunicorn fails to properly validate Transfer-Encoding headers, leading to HTTP Request… Also affects gunicorn
- CVE-2025-58190 The html.Parse function in golang.org/x/net/html has an infinite parsing loop when… Also affects emissary
- CVE-2025-47911 The html.Parse function in golang.org/x/net/html has quadratic parsing complexity when… Also affects emissary
- CVE-2025-13281 A half-blind Server Side Request Forgery (SSRF) vulnerability exists in… Also affects emissary
- CVE-2025-66471 urllib3 Streaming API improperly handles highly compressed data Also affects emissary
- CVE-2025-66418 urllib3 allows an unbounded number of links in the decompression chain Also affects emissary
- CVE-2025-66221 Werkzeug safe_join() allows Windows special device names Also affects emissary
- CVE-2025-50182 urllib3 does not control redirects in browsers and Node.js Also affects emissary