ZTE Router Unauthenticated Oversized-POST Denial of Service (CVE-2026-34473)
by minanagehsalalma · 2026-07-05
- Severity
- High
- CVE
- CVE-2026-34473
- Category
- network
- Affected product
- ZTE H-series routers (17+ models, reported as affecting 140K+ devices)
- Affected versions
- Firmware using the cgilua/post.lua pre-auth request-body parser (ZTE stated the issue was resolved on 2021-03-23)
- Disclosed
- 2026-07-05
- Patch status
- unpatched
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-05 |
| Author / Researcher | minanagehsalalma |
| CVE / Advisory | CVE-2026-34473 |
| Category | network |
| Severity | High |
| CVSS Score | Not specified in source |
| Status | PoC |
| Tags | router, firmware, unauthenticated, denial-of-service, iot, zte, cgilua, web-interface |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | ZTE H-series routers (17+ models, reported as affecting 140K+ devices) |
| Versions Affected | Firmware using the cgilua/post.lua pre-auth request-body parser (ZTE stated the issue was resolved on 2021-03-23) |
| Language / Platform | Python 3 / JavaScript / batch (PoC), target is embedded Lua-based (CGILua) router web interface |
| Authentication Required | No |
| Network Access Required | Yes |
Summary
CVE-2026-34473 is an unauthenticated denial-of-service condition in ZTE H-series routers’ web management interface, rooted in how the cgilua/post.lua pre-auth request-body parser handles oversized application/x-www-form-urlencoded POST bodies. Sending a single POST request with a large randomly-generated body (100,000–1,000,000 characters, depending on model) to the router’s root path causes the web interface to become unresponsive until the device is rebooted. The repo’s /poc directory contains the actual validation helpers used during disclosure: a browser-console trigger, Python senders for the oversized body, and simple reachability checkers — this is functioning DoS trigger code, not a documentation stub (confirmed by direct inspection of Checker.py/Fire&Forget.py/InBrowserConsole.js).
Vulnerability Details
Root Cause
The pre-auth cgilua/post.lua request-body parser does not bound or safely handle the size of an incoming application/x-www-form-urlencoded POST body, allowing an oversized body to exhaust resources or crash the parsing logic and render the web interface unresponsive.
Attack Vector
- Confirm the target router’s web interface is reachable (
GET /). - Send a single unauthenticated
POST /request withContent-Type: application/x-www-form-urlencodedand a body consisting of a large randomly-generated string (100,000 to 1,000,000 characters depending on the model). - Observe that the connection times out / the target stops responding to subsequent requests.
- The router’s web management interface remains unavailable until the device is manually rebooted.
Impact
Any unauthenticated attacker with network access to the router’s web interface can render it permanently unresponsive with a single crafted request, requiring a physical/manual reboot to restore service — affecting an estimated 140K+ internet-facing devices across 17+ models.
Environment / Lab Setup
Target: ZTE H-series router web interface (cgilua/post.lua pre-auth parser)
Attacker: Python 3 with `requests`, or a browser console / curl for the lighter-weight trigger
Proof of Concept
PoC Script
See
Checker.py,Fire&Forget.py,InBrowserConsole.js, andsanitized-request-shape.txtin this folder.
| |
Checker.py verifies the target is reachable, then sends a 100,000-character random-body POST and reports whether the target stopped responding (i.e., is vulnerable). Fire&Forget.py sends a heavier 1,000,000-character body variant needed by some models. InBrowserConsole.js is the equivalent trigger for use directly from a browser’s developer console against the current page’s origin.
Detection & Indicators of Compromise
Signs of compromise:
- A single abnormally large
application/x-www-form-urlencodedPOST request to the router root path immediately preceding an outage - Router web interface becoming completely unresponsive with no corresponding configuration change or reboot event
- Repeated externally-sourced connectivity/reachability probes (e.g.,
GET /) shortly before the oversized POST
Remediation
| Action | Detail |
|---|---|
| Primary fix | ZTE has stated the issue was resolved on 2021-03-23; verify and apply the latest available firmware for the affected model |
| Interim mitigation | Restrict access to the router’s web management interface to trusted LAN clients only, disable WAN-facing administration, and deploy a reverse proxy/WAF that enforces request body size limits in front of the interface where feasible |
References
Notes
Mirrored from https://github.com/minanagehsalalma/cve-2026-34473-unauthenticated-dos-zte-routers on 2026-07-05. The upstream repository is bulked out with an HTML/CSS “documentation site” (index.html, assets/) — only the functional /poc directory scripts and their accompanying notes were mirrored here.
| |