Cloudanix VulnDB

CVE-2024-6827

High · 7.5

CVSS

7.5

EPSS

0.8%

Published

Mar 20, 2025

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A web server parsing mistake can let an attacker sneak hidden requests through a proxy, potentially exposing data or disrupting an application.

Chainable
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

  1. 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.
  2. Confirm HTTP/1.1 keep-alive behavior and connection reuse between the front-end component and the Gunicorn backend.
  3. 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.
  4. Measure timing differences, response mismatches, unexpected 400/5xx responses, duplicate responses, or reflected marker strings that indicate request desynchronization.
  5. 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.
  6. 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.
  7. 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