A consumer-grade router that nobody in a 10,000-host fleet should be running gets another stack smash in its web UI
CVE-2026-13517 is a classic stack-based buffer overflow in the formWifiBasicSet handler at /goform/WifiBasicSet on the Tenda JD12L SOHO router, firmware 16.03.53.23. Sending an over-length security_5g parameter to the management web interface corrupts the stack — the typical end state on these MIPS/ARM Tenda firmwares is arbitrary code execution as root on the router, or at minimum a wedge of the management plane. The bug class is identical to the CVE-2026-13515/16/18/19 cluster filed against the same device on the same day, which suggests a single researcher fuzzed the entire /goform/* surface and dumped findings in bulk.
The vendor scored this HIGH (8.8) with PR:L — authenticated. That's directionally fair for the bug itself (auth-required RCE on an embedded device IS high impact on that device), but the score completely ignores the deployment reality: this is a consumer/SOHO product with no realistic place in a managed enterprise estate. Tenda has not patched, EPSS sits at 0.466%, and the CVE is not in CISA KEV. For a defender of 10,000 hosts, the only path to material risk is if Tenda JD12Ls are sitting at remote-worker home networks or unmanaged branches — and even then, the management UI is rarely WAN-exposed by default.
4 steps from start to impact.
Reach the router's web management interface
nmap, masscan, or a Shodan/Censys query for the Tenda HTTP server banner.- Network reachability to the router's admin web service
- Router is the specific JD12L model on firmware 16.03.53.23
- Default deployment exposes admin UI to LAN only
- Enterprise networks should never route to a consumer-grade Tenda WAN-side
- Bitsight/Censys-class scans show only a tiny minority of Tenda SOHO units expose admin to WAN
Authenticate to the admin UI
PR:L says credentials are required to reach the vulnerable handler. In practice that means default admin/admin (most Tenda lines), the owner's chosen password, or a session hijacked via CSRF/replay. Attackers typically run a hydra credential-stuffing pass against the login endpoint, or chain an unauth bug from the sibling CVE cluster to bypass this step entirely.- Valid admin credentials OR a working unauth bypass on the same firmware
- Owner changed the default password
- Account lockout (rarely implemented on Tenda firmware — minimal friction)
POST oversized security_5g to /goform/WifiBasicSet
/goform/WifiBasicSet with a security_5g value that overruns the fixed-size stack buffer in formWifiBasicSet. Public PoCs use a Python requests script that pads the parameter past the saved return address. The result is either a controlled overwrite of the return pointer or a crash of the httpd process.- Authenticated session cookie or basic-auth header
- Knowledge of the offset and architecture (public PoC ships both)
- None at this step — the handler is reachable and the offset is published
security_5g POSTs to /goform/WifiBasicSet is trivial to author.Gain root on the router or DoS the management plane
httpd binary, so a classic ROP or shellcode payload yields root shell. Worst case for a 10,000-host fleet is the router being conscripted into a Mirai/Mozi-style botnet or used as a pivot into the LAN behind it. Tools: msfvenom, radare2, public Tenda exploitation frameworks on GitHub.- Successful overflow
- Payload tuned to the specific firmware build
- Firmware diversity across Tenda revisions often breaks one-shot exploits
- Router reboot watchdog clears non-persistent payloads
The supporting signals.
| In-the-wild exploitation | None reported. Not in CISA KEV. No named campaigns. Historical pattern: Tenda SOHO bugs get scooped by Mirai/Mozi variants months after PoC drops. |
|---|---|
| Public PoC | Yes — referenced as published alongside disclosure. Sibling CVEs in the same cluster (CVE-2026-13515/16/18/19) all ship PoCs from the same researcher. |
| EPSS | 0.00466 (~0.47%) — bottom-third of CVEs by predicted 30-day exploitation probability. |
| KEV status | Not listed as of 2026-06-30. |
| CVSS vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H → vendor 8.8 HIGH. The PR:L is doing real work here — strip it and you'd get 9.8. |
| Affected versions | Tenda JD12L firmware 16.03.53.23 (only confirmed build; other revisions likely vulnerable but untested). |
| Fixed version | None. Tenda has not shipped a patch and has no public advisory for this CVE. |
| Exposure data | Shodan returns a small population of Tenda JD12L management interfaces WAN-exposed (typically <1,000 globally). Enterprise exposure is near-zero — this is a residential/SMB product. |
| Disclosure | 2026-06-29, coordinated through a third-party (likely VulDB/CNVD pipeline based on the sibling-CVE cluster pattern). |
| Researcher | Bulk filing pattern suggests a single fuzzing researcher; specific name not yet attributed in the advisory. |
noisgate verdict.
Downgraded one bucket because the *decisive factor is deployment-role mismatch*: the Tenda JD12L is a consumer/SOHO router with effectively zero footprint in a managed enterprise estate, and the bug requires authentication on a LAN-side admin UI. The chain ends at compromise of a single non-fleet, non-identity device — there is no role multiplier that promotes it into an identity, hypervisor, or edge-appliance blast radius.
Why this verdict
- Authentication required (
PR:L) — first compounding friction. Even on the LAN side, the attacker needs valid admin creds OR a chained auth bypass. - Consumer-grade deployment role — Tenda JD12L is not in any enterprise standard build. No realistic high-value-role spectrum: this never sits as an IdP, hypervisor, edge firewall, or domain controller. Blast radius caps at the single device + its LAN.
- No WAN exposure by default — Shodan footprint is small; corporate networks should never route to one of these on the WAN side.
- Role multiplier: Worst plausible role for this component is a remote-worker home router → outcome is single-LAN pivot or botnet conscription, NOT fleet/identity/supply-chain compromise. Floor stays at MEDIUM.
- No KEV, low EPSS (0.47%) — no active campaigns, no urgency signal from CISA or FIRST.
- No vendor patch available — this would normally pressure UP, but the absence of enterprise exposure neutralizes it: you can't be late on a patch that doesn't exist for a device you don't own.
Why not higher?
Not HIGH because there is no enterprise blast radius. The friction audit (auth required, LAN-side admin UI, consumer product class, no fleet/identity role) compounds to remove the urgency that the vendor's 8.8 implies for a generic 'authenticated RCE.' No KEV, no active exploitation, EPSS well under 1%.
Why not lower?
Not LOW because a public PoC exists, the bug is trivially weaponizable once you're on the LAN, and the absence of any vendor patch is permanent risk for anyone who *does* own one of these. Remote workers running a JD12L at home plus a corporate VPN tunnel is a plausible — if uncommon — pivot path.
What to do — in priority order.
- Inventory for any Tenda JD12L (or any consumer Tenda hardware) anywhere your endpoints terminate — Run an asset-discovery sweep across remote-worker subnets, branch offices, and lab environments. Pull DHCP server vendor OUI logs and EDR egress-gateway fields for the Tenda OUI. If verdict is MEDIUM there is no mitigation SLA — fold this into the 365-day backlog hygiene cycle.
- Block WAN-side access to router admin UIs at the perimeter for any branch/remote-worker network you control — Egress and ingress ACLs that drop port 80/443 destined for non-sanctioned management endpoints. Pushes the attack back to LAN-local only, which removes the entire internet-borne threat model for this CVE.
- Enforce strong admin credentials and disable remote-management on any Tenda device that must remain — Default creds + WAN management is the only way this CVE matters at scale. A password policy plus disabling remote admin reduces the realistic attacker pool to LAN-adjacent only.
- Replace JD12L units with managed enterprise gear on any production path — Tenda is not an enterprise-supported vendor and has no patch SLA. For anything load-bearing, swap to a managed device class (Meraki/Fortinet/Aruba). Treat this as the long-tail remediation since no vendor patch is coming.
- EDR on the endpoint behind the router — the compromise lives in the router's
httpd, not on the Windows/macOS host. EDR has no visibility. - Patching — there is no patch. Waiting on Tenda is not a control.
- WAF in front of the router — irrelevant; nobody fronts a consumer router with a WAF, and the bug is in the device's own admin UI.
- Network segmentation of the corporate LAN — doesn't help if the vulnerable router IS the segmentation point on a remote-worker network.
Crowdsourced verification payload.
Run this from an auditor workstation or network-management jump host that can reach the candidate router's admin IP. Invoke as ./check_tenda_jd12l.sh 192.168.0.1 — needs only network reachability, no creds. It fingerprints the device by HTTP response and firmware string, then reports VULNERABLE / PATCHED / UNKNOWN.
#!/usr/bin/env bash
# noisgate verification: CVE-2026-13517 — Tenda JD12L formWifiBasicSet stack overflow
# Usage: ./check_tenda_jd12l.sh <router-ip>
# Exit codes: 0=PATCHED/not-applicable, 1=VULNERABLE, 2=UNKNOWN
set -u
TARGET="${1:-}"
if [[ -z "$TARGET" ]]; then
echo "Usage: $0 <router-ip>" >&2
exit 2
fi
UA="noisgate-verifier/1.0"
TIMEOUT=5
# 1. Reach the admin web UI
HTTP_BODY=$(curl -sk --max-time "$TIMEOUT" -A "$UA" "http://${TARGET}/" || true)
if [[ -z "$HTTP_BODY" ]]; then
echo "UNKNOWN: no HTTP response from ${TARGET}"
exit 2
fi
# 2. Fingerprint Tenda + JD12L
if ! grep -qiE 'tenda|JD12L' <<< "$HTTP_BODY"; then
echo "PATCHED: target is not a Tenda JD12L (no fingerprint match)"
exit 0
fi
# 3. Pull firmware/version string from common Tenda endpoints
VER=""
for path in /goform/SysStatusInfo /goform/getSysStatus /system_status.asp; do
R=$(curl -sk --max-time "$TIMEOUT" -A "$UA" "http://${TARGET}${path}" || true)
if grep -qE '16\.03\.53\.23' <<< "$R"; then
VER="16.03.53.23"
break
fi
done
# 4. Probe the vulnerable handler existence (non-destructive — short value, no overflow)
PROBE=$(curl -sk --max-time "$TIMEOUT" -A "$UA" -o /dev/null -w '%{http_code}' \
-X POST "http://${TARGET}/goform/WifiBasicSet" \
--data 'security_5g=noisgate_probe' || true)
if [[ "$VER" == "16.03.53.23" ]]; then
echo "VULNERABLE: Tenda JD12L firmware 16.03.53.23 confirmed; handler /goform/WifiBasicSet responded HTTP ${PROBE}"
exit 1
fi
if [[ "$PROBE" =~ ^(200|302|401|403)$ ]]; then
echo "UNKNOWN: Tenda device detected, handler reachable (HTTP ${PROBE}), but firmware string not confirmed as 16.03.53.23"
exit 2
fi
echo "PATCHED: Tenda device detected but vulnerable handler not present or firmware differs (HTTP ${PROBE})"
exit 0
If you remember one thing.
Sources
- OffSeq Threat Radar — CVE-2026-13517
- Vulnerability-Lookup (CIRCL) — CVE-2026-13517
- GHSA-38gh-hfgh-77mp (CIRCL mirror)
- OpenCVE — Tenda vendor CVE list
- OffSeq — CVE-2026-13518 (sibling cluster)
- OffSeq — CVE-2026-13515 (sibling cluster)
- OffSeq — CVE-2026-13516 (sibling cluster)
- OffSeq — CVE-2026-13519 (sibling cluster)
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.