
Cloud Vulnerability DB
A community-led vulnerabilities database
CVE-2026-115877 is an HTTP Request Smuggling vulnerability (CWE-444) in the Twisted Python web framework, specifically in twisted.web.http.HTTPChannel.headerReceived. The flaw allows a bare carriage return (CR) or line feed (LF) character in an HTTP header value to hide a following header from Twisted's parser, enabling request smuggling when Twisted is deployed behind a lenient front-end proxy. All versions of Twisted up to and including 26.4.0 are affected; the issue is fixed in version 26.10.0rc1. It carries a CVSS v3.1 base score of 5.4 (Medium) (GitHub Advisory). The advisory was published on October 23, 2026, and is classified as an incomplete fix residual of earlier Twisted request-smuggling protections (GitHub Advisory).
The root cause is incomplete input validation in twisted.web.http.HTTPChannel.headerReceived (CWE-444). The function correctly rejects NUL bytes (\x00) in header values but fails to reject bare CR (\r) or LF (\n) characters, contrary to RFC 9110 section 5.5, which mandates rejection of all three. Because Twisted splits header lines only on CRLF sequences, a crafted header value such as Foo: x\nContent-Length: 44 arrives as a single line — the bare LF folds the Content-Length header into the Foo value, so Twisted never sees a body length and frames the request with an empty body. A front-end proxy that treats the bare LF as a legitimate line terminator parses the request differently, creating a framing disagreement that allows a smuggled request to bypass the proxy (GitHub Advisory, Fix Commit). The fix, merged in PR #12755, extends the existing NUL check to also reject CR and LF using a single-pass translate call: if len(data.translate(None, b"\x00\r\n")) != len(data) (Fix Commit).
Successful exploitation enables an unauthenticated network attacker to smuggle HTTP requests past front-end proxies and access controls, potentially reaching internal or restricted endpoints (e.g., /admin) that the proxy would otherwise block. The attack can also poison shared connections so that a subsequent victim client receives the attacker's response, and can poison shared caches to serve malicious content to other users. There is no code execution risk — Twisted acts as the strict back-end endpoint — but confidentiality and integrity are both impacted at a low level through unauthorized data access and response manipulation (GitHub Advisory).
As of the advisory publication date, there is no public proof-of-concept exploit and no evidence of in-the-wild exploitation (GitHub Advisory). The EPSS score is 0.0, reflecting a currently low probability of exploitation (GitHub Advisory). The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. Exploitation requires a specific deployment topology — Twisted must be behind a front-end proxy that accepts bare CR or LF as line terminators — which raises the effective attack complexity (rated High in CVSS).
Content-Length header and a smuggled request body. Example raw bytes sent over a single TCP connection:POST /public HTTP/1.1\r\nHost: target.example\r\nFoo: x\nContent-Length: 44\r\n\r\nGET /admin HTTP/1.1\r\nHost: internal\r\n\r\nFoo: x and Content-Length: 44 as two separate headers, forwarding a body of 44 bytes (the smuggled GET /admin request). Twisted sees only Foo: x\nContent-Length: 44 as a single header value, frames the POST with no body, and then processes the remaining bytes as a second independent request — GET /admin.GET /admin response, bypassing the proxy's access control. In a shared-connection scenario, the extra response poisons the connection so the next client receives the attacker's GET /admin response (GitHub Advisory).0x0A) or bare CR (0x0D) characters within header values (not preceded/followed by the complementary CR/LF); unexpected follow-on requests to restricted paths (e.g., /admin, /internal) arriving on the same TCP connection as a public-path request.Upgrade Twisted to version 26.10.0rc1 or later, which rejects bare CR and LF characters in HTTP header values with a 400 Bad Request response (Twisted Release). As a defense-in-depth workaround, configure front-end proxies to strictly validate HTTP header values and reject requests containing bare CR or LF characters before forwarding to the backend, eliminating the framing disagreement that enables smuggling. Additionally, ensure front-end proxies are configured to normalize or reject non-CRLF line terminators in HTTP headers per RFC 9110 section 5.5 (GitHub Advisory).
The fix was contributed by community researcher arkmarta via pull request #12755, reviewed and approved by Twisted maintainers gudnimg and twm, and merged on August 2, 2026 (Fix PR). The Twisted maintainer twm noted during review that even stricter validation of all CTL characters (beyond CR, LF, and NUL) could be considered in the future, citing RFC 9110's broader guidance (Fix PR). Red Hat has tracked the issue via Bugzilla (bug #2560182), indicating downstream Linux distribution awareness (Red Hat Bugzilla).
Fix availability across major Linux distributions and their releases.
Source: This report was generated using AI
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."