Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessOpen keep-alive connection to /ubus
-
DeliverySend POST with split JSON body
-
ExploitComplete {} in first TCP segment
-
ExecutionLater segment hits parse-error zero-consume desync
-
PersistUnread body suffix parsed as new request
-
ImpactSmuggled request served across boundary
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V4 - API and Web Service HTTP request consistency
|
| Exploitation Conditions | Requires the ubus endpoint to be enabled and the /ubus URL reachable - this is the default in standard OpenWrt deployments. The attacker sends a POST /ubus with Content-Type: application/json and a Content-Length spanning a '{}' prefix plus a smuggled HTTP request suffix, and must control TCP segmentation so the '{}' completes in one segment and the remainder arrives in a later segment on a keep-alive connection; this segmentation is trivially controllable by a direct attacker. No authentication is required (PR:N) and no user interaction is needed. Limiting factors: the flaw only materially crosses a security boundary when uhttpd is behind a reverse proxy or CDN that reuses the connection - against uhttpd directly the smuggled request is processed as the attacker's own with little gain; ubus must be enabled (default); and the keep-alive connection must be reused. Updating to the patched repository commits is the fix stated by the vendor. |
| Impact | This is a genuine but moderate-priority issue, not an emergency. The CVSS 4.0 base is 6.9 (the GHSA independently estimates CVSS 3.1 ~5.9, medium), and the vuln.today Decision label is 'this_month' - meaning remediate within a normal patch window rather than immediately. The signals are internally consistent: attack vector is network (AV:N), complexity is low (AC:L - the attacker fully controls TCP segmentation and the ~100ms pause; this is not a race or an attacker-uncontrolled timing condition), no privileges (PR:N) and no user interaction (UI:N) are needed, but the technical impact is limited to request-integrity (CWE-444 HTTP request smuggling), with no confidentiality or availability impact in the supplied vector. No EPSS score and no CISA KEV entry are present in the input, so there is no evidence of active exploitation. A PoC reference exists - the GHSA documents exact reproduction steps and the reporter states they hold a complete ~130-line Python PoC - but it is attached to an email and is not verified as publicly available working exploit code. The real-world danger is amplified mainly when uhttpd sits behind a reverse proxy or CDN, where a smuggled request can cross a user/security boundary; against uhttpd directly the smuggled request is processed as the attacker's own and the impact is minimal. Note one data conflict to verify: the description states repository patch commits already address the issue, while the GHSA package field reads 'fixed in: not yet patched', implying the fix commits may not yet be in a tagged OpenWrt release - confirm release status with the vendor. |
| Exploit ScenarioDerived | An attacker opens a keep-alive connection to a uhttpd instance with ubus enabled and sends a POST /ubus request whose Content-Length covers both a complete '{}' JSON object and a trailing smuggled 'GET / HTTP/1.1' request. They deliver the '{}' in the first TCP segment, pause ~100ms, then send the remainder; uhttpd emits a JSON-RPC parse error, consumes zero further bytes, fails to drain the body or close the connection, and processes the smuggled suffix as a second HTTP request. Reproduction steps are documented publicly in the GHSA and the reporter states a full PoC script exists, though it is not published; impact is greatest when uhttpd is fronted by a reverse proxy or CDN. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 30, 2026
HTTP request smuggling in OpenWrt's uhttpd allows a remote attacker to desynchronize request boundaries on a keep-alive connection by delivering the JSON body of a POST /ubus across multiple TCP segments, so the unread body suffix is parsed as a brand-new request and the server emits two responses for one exchange (a JSON-RPC parse error followed by the smuggled request's response). The defect is in the application-layer body handler uh_ubus_data_send() in ubus.c and affects unpatched repository snapshots; the /ubus endpoint is enabled in the default OpenWrt configuration, and the impact matters most where uhttpd is deployed behind a reverse proxy or CDN that reuses backend connections. Reported severity is CVSS 4.0 6.9 (the independent assessment uses CVSS 3.1 AV:N/AC:L/PR:N/UI:N/S:C/C:N/I:L/A:N, integrity-only with a scope change), the reporter described a Python PoC script but it is not verified as working, generally available exploit code, there is no CISA KEV entry, and the issue is fixed in upstream repository commits rather than a confirmed tagged release.
RemediationAI
Upstream fix available (PR/commit); released patched version not independently confirmed - apply repository commits 7b1bec45826bd78c8afc993435bdc0f1df2fe399 (https://github.com/openwrt/uhttpd/commit/7b1bec45826bd78c8afc993435bdc0f1df2fe399) and b2285de129b9adc8b12f84f9a27c16c21f2b57a5 (https://github.com/openwrt/uhttpd/commit/b2285de129b9adc8b12f84f9a27c16c21f2b57a5), the first of which sets cl->request.connection_close = true in the ubus parse-error path so the unread Content-Length suffix cannot be reinterpreted as a new request; the advisory's alternative is to have uh_request_done() drain any remaining body bytes when content_length > 0, and the advisory states updating to the patched commits is the fix. Because no tagged release is confirmed, operators on packaged OpenWrt should track their distro backport rather than assume the shipped binary is fixed; verify by re-running the two-response reproducer against the patched build. Where an immediate rebuild is not possible, the exposure is bounded by the documented prerequisites: the flaw requires the /ubus URL to be reachable, so removing ubus from the build or restricting /ubus to trusted management networks removes the trigger at the cost of losing the JSON-RPC/ubus web interface, and fronting uhttpd with a proxy or CDN that does not reuse backend keep-alive connections for /ubus reduces the chance that a desynchronized suffix is attributed to another client - both are containment measures only, not substitutes for the commits.
Affected VersionsENISA
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
uhttpd is the small HTTP server shipped with OpenWrt and many embedded router firmwares; when built with ubus support it exposes a POST /ubus endpoint that speaks JSON-RPC over HTTP and hands request bodies to uh_ubus_data_send() in ubus.c. That handler keeps parser state in du->jsobj: if an initial TCP segment completes a JSON object, jsobj becomes non-NULL, and when a later segment for the same body arrives the function takes its existing-object parse-error path, emits a JSON-RPC parse error and returns zero bytes consumed. The caller neither drains the remainder of the declared Content-Length nor sets cl->request.connection_close, so the still-unread body suffix is interpreted as the start of the next request on the same persistent connection. This is the classic CWE-444 dual-parser/desync class: two components disagree about where a message ends, and the resulting boundary confusion produces a smuggled request. The advisory explicitly distinguishes it from two earlier uhttpd reports - Transfer-Encoding header case sensitivity in HTTP header parsing and chunk-length state reset in chunked transfer-coding handling - because this one is purely an application-layer body-handler flaw reachable over plain JSON POSTs. Attack prerequisites come from the assessed vector rather than the metrics alone: ubus must be enabled and /ubus reachable (the default), the attacker must control TCP segmentation so the '{}' prefix lands in one segment and the rest arrives later, and a keep-alive connection must be reused; against uhttpd directly the smuggled request is processed as the attacker's own with limited gain, whereas a fronting reverse proxy or CDN that pools backend connections is where the boundary crossing becomes meaningful.
Know when Openwrt gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
Network, no auth and no UI (AV:N/PR:N/UI:N); attacker fully controls TCP segmentation so AC:L; request smuggling crosses the request-interpretation boundary (S:C) with integrity-only impact (I:L).
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
2DescriptionCVE.org
uhttpd is a small HTTP server. In unpatched repository snapshots, uh_ubus_data_send() in ubus.c can desynchronize HTTP request boundaries when a POST /ubus JSON body arrives in multiple TCP segments. An initial segment completing a JSON object sets du->jsobj; a later segment takes the existing-object parse-error path and returns zero bytes consumed. The caller neither drains the remaining declared Content-Length nor sets connection_close. An HTTP request embedded in the unread body suffix is consequently processed as a new request on the same keep-alive connection. The reported reproducer returned a JSON-RPC parse error followed by a second HTTP response. This application-layer body-handler flaw is distinct from Transfer-Encoding header case handling and chunk-length state reset, and affects deployments enabling ubus, including the default OpenWrt configuration and potential proxy/CDN deployments. Repository patches 7b1bec45826bd78c8afc993435bdc0f1df2fe399 and b2285de129b9adc8b12f84f9a27c16c21f2b57a5 address this issue.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
HTTP request smuggling exploits inconsistencies in how front-end and back-end servers parse HTTP message boundaries.
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
In wlan service, there is a possible out of bounds write due to improper input validation. Rated critical severity (CVSS
Stored cross-site scripting in OpenWrt's LuCI web interface lets an adjacent-network attacker inject executable HTML/Jav
An issue was discovered in OpenWrt 18.06.0 to 18.06.6 and 19.07.0, and LEDE 17.01.0 to 17.01.7. Rated high severity (CVS
An issue was discovered in OpenWrt libuci (aka Library for the Unified Configuration Interface) before 15.05.1 as used o
cgi_handle_request in uhttpd in OpenWrt through 18.06.1 and LEDE through 17.01 has unauthenticated reflected XSS via the
In wlan service, there is a possible out of bounds write due to an incorrect bounds check. Rated critical severity (CVSS
An exploitable information leak vulnerability exists in the ustream-ssl library of OpenWrt, versions 18.06.4 and 15.05.1
An exploitable information leak vulnerability exists in the ustream-ssl library of OpenWrt, versions 18.06.4 and 15.05.1
Remote privilege escalation in Android WLAN AP driver via packet injection.
In wlan AP driver, there is a possible out of bounds write due to an incorrect bounds check. This could lead to local es
In wlan AP driver, there is a possible out of bounds write due to an incorrect bounds check. This could lead to local es
In wlan AP driver, there is a possible out of bounds write due to an incorrect bounds check. This could lead to local es
EUVD-2026-114522
NVD
CVE.org
EPSS
GitHub
Exploit-DB