CVE-2026-73257
Executive Summary
CVE-2026-73257 is a high-severity HTTP request smuggling vulnerability in the Mongoose embedded web server and network library, affecting versions prior to 7.22. A remote unauthenticated attacker can send a specially crafted HTTP request containing both Content-Length and Transfer-Encoding: chunked headers to desynchronize the connection with a reverse proxy, potentially injecting arbitrary requests to access or modify resources in another user's context. With a CVSS score of 9.1 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N) reflecting no authentication requirement and high confidentiality and integrity impact, this flaw is critical for any deployment using Mongoose behind a reverse proxy.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
The vulnerability resides in the HTTP request parsing logic of Mongoose's src/http.c. According to the NVD description, Mongoose prior to version 7.22 fails to properly reject requests containing conflicting framing information. Specifically, the cl_count and te_count checks in the mg_http_parse() and http_cb() code paths accept requests that carry BOTH a Content-Length header AND a Transfer-Encoding: chunked header.
The root cause is a classic HTTP request smuggling (CL.TE) flaw. When a request contains both headers, RFC 7230 (and its successor RFC 9112) mandate that the server either reject the request or handle Transfer-Encoding with priority. Mongoose's parser apparently follows the RFC in prioritizing Transfer-Encoding: chunked, meaning it will parse the body using chunked encoding rules. However, a reverse proxy deployed in front of Mongoose may prioritize Content-Length when determining the request boundary. This discrepancy between what the proxy and the backend consider the end of the request body allows an attacker to craft a request where the proxy forwards the request (and possibly the smuggled prefix of the next request) to Mongoose, but interprets the body length differently.
The attack surface is broad. Mongoose is marketed as an embedded web server and network library, widely deployed in IoT devices, embedded systems, routers, industrial control systems, and various network appliances. Any deployment where Mongoose is placed behind a reverse proxy that uses Content-Length for request boundary detection is vulnerable to the CL.TE desynchronization.
The technical mechanism mirrors the well-documented CL.TE smuggling technique first popularized by James Kettle (PortSwigger) in his 2019 "HTTP Desync Attacks" research. In this specific case, the parser's cl_count and te_count checks indicate that the code counts occurrences of these headers rather than rejecting a request that has both. The failure to reject double-framed requests creates the desynchronization condition.
Neither public exploit code nor a Nuclei template is available at the time of this report. The OSV entry (the single source for the fix claim) suggests version 7.22 addresses the issue; however, patch confidence is rated 2/4 (CLAIMED) because only one source confirms the fix and it has not been independently verified against the vendor's official release notes.
Exploitation Scenarios
Step 1 — Reconnaissance/Target Identification: An attacker identifies a Mongoose-based web service (version < 7.22) either through version fingerprinting in HTTP response headers (e.g., "Server: Mongoose"), through banner grabbing on common ports (80, 8080, 443 for TLS), or through Shodan/Censys queries for embedded devices running Mongoose.
Step 2 — Triggering the Flaw: The attacker sends an HTTP request to the victim server through a fronting reverse proxy that prefers Content-Length for request framing. The request contains BOTH headers:
Content-Length: [shorter value]Transfer-Encoding: chunked- Followed by a chunked body that contains the smuggled request prefix.
Mongoose's mg_http_parse() path will count both headers, accept them, and prioritize chunked encoding (per the description). The proxy, preferring Content-Length, will forward only the bytes up to the Content-Length boundary as the first request, leaving the rest as the beginning of the next "request" on the same connection.
Step 3 — Payload Execution: Since no public PoC exists, the attack framing is inferred from the CL.TE class. A typical payload structure would be:
- A request with
Content-Length: Xwhere X is smaller than the actual body length. - The body begins with chunked-encoded data ending with a
0\r\n\r\nterminator. - Immediately following the chunked terminator, the attacker places the malicious request line (e.g.,
GET /admin/delete?user=target HTTP/1.1) which will be interpreted by Mongoose as the next request on the connection.
The key point is that the proxy sees one request boundary while Mongoose sees another, enabling request injection.
Step 4 — Post-Exploitation Impact: The attacker can bypass proxy-level access controls (e.g., authentication gateways, WAF rules, or allow-list filtering) and directly reach backend resources or administrative endpoints. Because the vulnerability allows injecting requests "in another user context," an attacker could potentially poison responses to other users, steal session tokens, or perform state-changing operations (e.g., modifying configuration, wiping device settings) depending on the application logic exposed by Mongoose.
Important Note: No public PoC is available; the attack chain is inferred from the vulnerability class. Technical details beyond the header names (Content-Length, Transfer-Encoding: chunked), the code paths (mg_http_parse(), http_cb(), src/http.c), and the variable names (cl_count, te_count) provided in the NVD description are not publicly documented at this time.
Impact Assessment
The CVSS score of 9.1 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N) reflects a critical severity rating. The vector breakdown:
- Attack Vector: Network — exploitable remotely without any physical or local access.
- Attack Complexity: Low — no special conditions beyond the target being reachable.
- Privileges Required: None — unauthenticated exploitation.
- User Interaction: None — no victim action needed.
- Confidentiality Impact: High — an attacker can read arbitrary resources in other user contexts.
- Integrity Impact: High — an attacker can modify resources or perform unintended actions.
- Availability Impact: None — the vulnerability does not directly enable denial of service.
Business impact varies significantly by deployment type. In enterprise environments where Mongoose is used in IoT management platforms, network appliances, or industrial control systems, successful exploitation could allow an attacker to bypass authentication and access controls, potentially manipulating device configurations, stealing sensitive data processed by these embedded systems, or pivoting deeper into the network. For organizations using Mongoose in products exposed to the internet (common in home routers, IP cameras, and smart devices), the attack surface is directly reachable from the open internet, and the lack of authentication requirements means the only barrier is the reverse proxy — which is exactly what this vulnerability bypasses.
The affected version range is all versions prior to 7.22. Given Mongoose's popularity in embedded systems (it is frequently incorporated into commercial IoT and networking products), the true install base may far exceed what is directly identifiable, meaning the blast radius is potentially very large across multiple industries.
Detection Guidance
Sigma Rule
title: HTTP Request Smuggling - CL.TE Conflicting Headers (CVE-2026-73257)
id: 4f44c1f7-9e12-4c55-8629-8e4e4cfed0f5
status: experimental
description: Detects HTTP requests containing both Content-Length and Transfer-Encoding headers, which can indicate CL.TE smuggling attempts against Mongoose servers.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-73257
tags:
- attack.t1190
- attack.initial_access
- cve.2026.73257
- cwe.444
logsource:
category: webserver
product: generic
detection:
selection_headers:
http.headers|contains|all:
- 'Content-Length'
- 'Transfer-Encoding: chunked'
condition: selection_headers
level: high
falsepositives:
- Legitimate applications that intentionally send both headers (rare; per RFC should not be forwarded)
YARA Rule
rule CVE_2026_73257_HTTP_Smuggling_CLTE
{
meta:
author = "valtersit.com Threat Intelligence"
description = "Detects HTTP payloads with conflicting Content-Length and Transfer-Encoding headers (CL.TE smuggling) targeting Mongoose < 7.22"
cve = "CVE-2026-73257"
cwe = "CWE-444"
date = "2026-01-01"
severity = "critical"
strings:
$cl_header = /Content-Length\s*:\s*\d+/i
$te_header = /Transfer-Encoding\s*:\s*chunked/i
$http_ver = /HTTP\/1\.[01]/i
condition:
all of them and #cl_header >= 1 and #te_header >= 1
}
Suricata IDS Rule
alert http any any -> any any (msg:"ET EXPLOIT CVE-2026-73257 Mongoose CL.TE HTTP Request Smuggling Attempt"; flow:established,to_server; http.header_names; content:"Content-Length"; http.header_names; content:"Transfer-Encoding"; http.header_names; content:"Transfer-Encoding"; http.header_name_begins; content:"chunked"; nocase; classtype:attempted-admin; sid:2026011532; rev:1; reference:cve,2026-73257; reference:url,nvd.nist.gov/vuln/detail/CVE-2026-73257;)
Elastic Detection
sequence by transaction.id
[network where event.category == "web" and http.request.headers contains "Content-Length"]
[network where event.category == "web" and http.request.headers contains "Transfer-Encoding: chunked"]
Splunk SPL Query
index=proxy OR index=webserver
| where like(_raw, "%Content-Length%") AND like(_raw, "%Transfer-Encoding: chunked%")
| eval has_cl = if(mvfind(split(http_headers, "\\r\\n"), "Content-Length") != null(), 1, 0)
| eval has_te = if(mvfind(split(http_headers, "\\r\\n"), "Transfer-Encoding: chunked") != null(), 1, 0)
| where has_cl = 1 AND has_te = 1
| stats count by src_ip, dest_ip, method, uri, user_agent, _time
| sort - count
Wazuh OSSEC Rule
<group name="web_application, vulnerability, cve_2026_73257,">
<rule id="100732" level="12">
<if_sid>31100</if_sid>
<description>CVE-2026-73257: HTTP Request Smuggling (CL.TE) attempt detected - conflicting Content-Length and Transfer-Encoding headers</description>
<match>Content-Length</match>
<match>Transfer-Encoding: chunked</match>
<group>webserver,http_request_smuggling,</group>
<mitre>
<id>T1190</id>
</mitre>
</rule>
</group>
Mitigation & Patch Guidance
1) Immediate Mitigations (no patch applied):
- If a reverse proxy is in use, configure it to strip, reject, or normalize requests containing both
Content-LengthandTransfer-Encodingheaders. Most modern proxies (e.g., nginx, HAProxy, AWS ALB) reject double-framed requests by default or can be configured to do so. - Place a WAF in front of Mongoose that blocks requests with both framing headers.
- If the reverse proxy supports it, enforce HTTP/2 between proxy and backend if Mongoose supports it (HTTP/2 eliminates this class of smuggling).
- Restrict network access to Mongoose to trusted proxy IPs only.
2) Patch/Upgrade Steps:
- Upgrade Mongoose to version 7.22 or later. This version explicitly fixes the
cl_count/te_countchecks so that requests with both headers are rejected at themg_http_parse()stage. - Caution: Patch confidence is rated 2/4 (CLAIMED). Only OSV reports the fix; the vendor's official changelog has not been independently verified. Confirm the upgrade resolves the issue by testing against your own proxy configuration.
- After upgrade, run regression tests that send double-framed requests to confirm they are rejected.
3) Long-Term Hardening:
- Continuously monitor vendor announcements for additional advisory details or confirmed patch notes.
- Add detection rules (see above) to your SIEM and IDS/IPS monitoring for ongoing visibility.
- Review proxy configurations across the enterprise to ensure all fronting proxies reject conflicting framing headers.
- Consider inventorying all embedded devices running Mongoose in your organization to ensure none are unreachable by current security monitoring.
- Integrate OSV data feeds into your vulnerability management pipeline to catch this CVE in any internal or third-party components.
References
- NIST NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2026-73257
- OSV Vulnerability Record (patch source): https://osv.dev/vulnerability/CVE-2026-73257
- Mongoose Embedded Web Server Project: https://mongoose.ws/
- CWE-444 — Inconsistent Interpretation of HTTP Requests (HTTP Request Smuggling): https://cwe.mitre.org/data/definitions/444.html
- PortSwigger Research — HTTP Desync Attacks (technique background): https://portswigger.net/research/http-desync-attacks-request-smuggling-reborn
Exploit-in-the-Wild Evidence: None at the time of writing. No public PoC, exploit code, or threat actor campaigns have been identified for this specific CVE. CISA KEV does not list this vulnerability. The lack of confirmed in-the-wild exploitation does not reduce severity given the trivial nature of the attack mechanism (double header injection) and the high CVSS score.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.