A budget consumer router with an admin panel that trusts whatever you type into the ping box
CVE-2026-15511 is an OS command injection (CWE-77) in the Comfast CF-WR631AX V3 WiFi 6 router, firmware ≤ 2.7.0.8. The bug lives in the webmgnt HTTP admin binary — a parameter reaching a system()-family call is concatenated into a shell string without validation, so ; whoami style payloads execute as root on the router. Sibling CVEs in the same firmware (destination in ping_config, mbox-config injection) show this is a family of bugs, not an isolated slip.
Vendor severity is CRITICAL 9.8 with vector AV:N/AC:L/PR:N/UI:N. The vector is defensible on paper — reaching the web UI is trivially network-adjacent — but the CVSS math assumes the admin interface is unauthenticated and reachable. In real deployments the admin panel is LAN-side, sometimes behind default creds, and the affected device is a $33 consumer/SMB mesh router — not a fleet asset an enterprise inventories. The 9.8 is technically accurate for the primitive; it is misleading for enterprise blast radius.
4 steps from start to impact.
Reach the router web management interface
nmap -p 80,443,8080, Shodan http.title:'CF-WR631AX'.- Network path to the router HTTP interface (LAN adjacency or WAN remote-mgmt enabled)
- Default config keeps admin UI LAN-only
- Enterprise networks don't run Comfast SOHO gear — installed base is home / small retail
webmgnt banners; internal scanners (Nessus plugin 216xxx family, Qualys QID pending) will fire on LAN scansAuthenticate (or bypass auth) to the admin panel
system_wl_upload_pic_file / ping_config endpoints sit behind the standard login. Attackers use default admin:admin, credential stuffing, or a chained auth-bypass (multiple exist in the vendor's OpenWrt fork). Tools: hydra, custom login brute-forcers, the PoC in 0xcc12138's repo.- Valid admin credentials OR a working auth bypass on the target firmware
- Default creds *are* often unchanged on consumer gear — friction here is real but low
- Owners who changed the password materially reduce risk
Inject shell metacharacters into the vulnerable parameter
ping_config destination, or system_wl_upload_pic_file filename per the sibling CVE cluster). The parameter is concatenated into a shell command inside /usr/bin/webmgnt; payloads like 8.8.8.8;telnetd -l /bin/sh -p 4444 execute as root.- Authenticated session
- Firmware ≤ 2.7.0.8
- None once auth is achieved — the primitive is reliable
Persist and pivot from the router
/etc/resolv.conf, dnsmasq), TLS-MITM via injected CA, botnet enrollment (Mirai/Mozi variants recruit MediaTek MT7981-based devices constantly), and LAN reconnaissance. Tools: routersploit modules, Mirai fork loaders.- Root shell from step 3
- Persistent flash write access (present on this SKU)
- No enterprise-grade SIEM sees this — but also no enterprise data flows through it
- Firmware update wipes non-blessed persistence
The supporting signals.
| In-the-wild exploitation | Not observed as CVE-2026-15511 specifically; MediaTek MT7981-based SOHO routers are continuously scanned by Mirai/Mozi/Gafgyt variants that will absorb this payload once public |
|---|---|
| Public PoC | Yes — sibling CVE-2026-12814 (ping_config destination) has a full analysis + PoC by 0xcc12138 on GitHub; same webmgnt binary, same bug class |
| EPSS | Not yet scored (disclosed 2026-07-12); sibling Comfast CVEs sit in the 0.1–0.5% range — SOHO CVEs rarely percolate to top-percentile EPSS |
| KEV status | Not listed; CISA KEV historically excludes consumer SOHO router bugs unless tied to a named campaign |
| CVSS 3.1 vector | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — assumes unauthenticated web reach; realistic vector with auth is closer to PR:H yielding ~7.2 |
| Affected versions | Comfast CF-WR631AX V3, firmware ≤ 2.7.0.8; V1/V2 hardware revisions on different codebases — verify per unit |
| Fixed version | None published at disclosure; Comfast has a poor patch cadence — expect months, or never, per historical pattern |
| Exposure telemetry | Shodan query for webmgnt + Comfast fingerprint returns low thousands globally, concentrated in APAC residential ISPs; enterprise ASN exposure is negligible |
| Disclosure | 2026-07-12, VulDB-tracked cluster (12814, 15511, adjacent IDs) suggests a coordinated researcher dump against the webmgnt binary |
| Reporter | Attributed to independent researcher 0xcc12138 based on the public analysis repo covering the same binary and endpoint family |
noisgate verdict.
Downgraded from CRITICAL 9.8 to MEDIUM 5.8 because the single most decisive factor is deployment role: the affected device is a $33 consumer/SMB WiFi router with negligible enterprise installed base, and the CVSS-assumed unauthenticated network reachability requires either default credentials or WAN-side remote management — both misconfigurations, not defaults. Blast radius is one household or one small retail site per exploit, not fleet-scale.
Why this verdict
- Consumer-SKU installed base: the CF-WR631AX is a sub-$40 mesh router sold via Alibaba/Sunsky — enterprise CMDBs do not carry it, so fleet exposure for a 10,000-host org is effectively zero.
- Auth is the realistic gate: the vendor-published 9.8 assumes
PR:N, but the vulnerable endpoints live behind the admin login; the realistic attacker has to solve default-cred or brute force first, dropping practical CVSS to ~7.2. - Role multiplier — low-value role (SOHO edge): chain succeeds → root on one home router → DNS hijack / botnet enrollment. Blast radius stops at the household LAN. Not identity, not hypervisor, not backup, not CI.
- Role multiplier — typical role (small retail / branch): chain succeeds → LAN pivot into a POS network is theoretically possible, but enterprises with retail footprints run managed Cisco Meraki / Fortinet / Ubiquiti, not Comfast. Population is a rounding error.
- Role multiplier — high-value role: does not exist for this SKU. There is no scenario where a domain controller, IdP, or backup server depends on a CF-WR631AX. Verdict floor is not raised.
- No KEV, no active campaign as-CVE: while Mirai variants will opportunistically absorb the PoC, there is no named campaign or CISA listing to force a KEV-style override.
Why not higher?
HIGH would require either enterprise-relevant installed base or a KEV-worthy active campaign. Neither exists: the SKU is consumer, the exploit needs auth in practice, and there is no evidence of a targeted campaign. The 9.8 vendor score is arithmetically correct for the primitive but ignores who actually buys and deploys this router.
Why not lower?
LOW / IGNORE would be wrong because the primitive is real, unauthenticated *within LAN reach* against default-credentialed units, and a sibling PoC already exists for the same webmgnt binary. Any org that has one of these in a branch office should treat it as MEDIUM and remove it, not ignore it.
What to do — in priority order.
- Inventory: confirm no Comfast CF-WR631AX exists in the estate — Query CMDB, DHCP fingerprints (
ComfastOUI9C:A6:15,44:D1:FA), and passive Zeeksoftware.logforwebmgntUser-Agent banners. If zero hits, close the ticket — no mitigation SLA applies at MEDIUM. - If present: disable WAN-side Remote Management immediately — The single misconfiguration that turns this from LAN-only annoyance into an internet-exposed RCE. Log into the admin UI → System → Remote Management → OFF. No mitigation SLA at MEDIUM, but do this the same day you find the device.
- If present: rotate the admin password off the vendor default — The attack path collapses to zero without valid admin credentials. Set a 20-char random password stored in your password vault.
- Segment the router onto an isolated VLAN with no route to production — Treat any SOHO device as untrusted infrastructure — assume it is compromised and firewall it away from corporate assets. Apply within the 365-day MEDIUM remediation window per noisgate SLA.
- Plan hardware replacement, not patching — Comfast's patch cadence is historically poor and no fix is published. Budget replacement with managed enterprise WiFi (Meraki, Aruba, Ubiquiti UniFi) before the 365-day mark.
- EDR / host agents — the router runs a MediaTek OpenWrt fork; no enterprise EDR agent exists for it.
- WAF in front of the corporate perimeter — the admin panel is LAN-side; a WAF on your public web tier never sees the traffic.
- Waiting for a vendor patch — Comfast's advisory history shows month-plus lag, if a patch ships at all. Do not make this the plan.
- Group Policy / configuration management — this is not a Windows or Linux server managed by your config plane; it is an unmanaged consumer device.
Crowdsourced verification payload.
Run from an auditor workstation on the same LAN as the suspected router. Requires no privileges. Invoke as ./check_cf_wr631ax.sh 192.168.10.1 (replace with the router IP). Outputs VULNERABLE, PATCHED, or UNKNOWN.
#!/usr/bin/env bash
# noisgate: CVE-2026-15511 Comfast CF-WR631AX V3 detection
# Usage: ./check_cf_wr631ax.sh <router-ip>
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -u
TARGET="${1:-}"
if [[ -z "$TARGET" ]]; then
echo "UNKNOWN: usage: $0 <router-ip>" >&2
exit 2
fi
# 1. Is this actually a CF-WR631AX?
BANNER=$(curl -s -k --max-time 5 "http://${TARGET}/" -H 'User-Agent: noisgate/1.0' || true)
if ! echo "$BANNER" | grep -qiE 'comfast|cf-wr631ax|webmgnt'; then
# Try the login page path
BANNER=$(curl -s -k --max-time 5 "http://${TARGET}/cgi-bin/luci" || true)
fi
if ! echo "$BANNER" | grep -qiE 'comfast|cf-wr631ax|webmgnt'; then
echo "UNKNOWN: target does not fingerprint as Comfast CF-WR631AX"
exit 2
fi
# 2. Extract firmware version if exposed on the login page
FW=$(echo "$BANNER" | grep -oE '2\.[0-9]+\.[0-9]+\.[0-9]+' | head -1)
if [[ -z "$FW" ]]; then
# Version banner is often behind auth; flag as UNKNOWN but suspicious
echo "UNKNOWN: Comfast device detected, firmware not exposed pre-auth; treat as VULNERABLE until proven otherwise"
exit 2
fi
# 3. Compare against fixed threshold (<=2.7.0.8 is vulnerable; no fixed version published)
MAJOR=$(echo "$FW" | awk -F. '{print $1}')
MINOR=$(echo "$FW" | awk -F. '{print $2}')
PATCH=$(echo "$FW" | awk -F. '{print $3}')
BUILD=$(echo "$FW" | awk -F. '{print $4}')
vuln=1
if (( MAJOR > 2 )); then vuln=0
elif (( MAJOR == 2 && MINOR > 7 )); then vuln=0
elif (( MAJOR == 2 && MINOR == 7 && PATCH > 0 )); then vuln=0
elif (( MAJOR == 2 && MINOR == 7 && PATCH == 0 && BUILD > 8 )); then vuln=0
fi
if (( vuln == 1 )); then
echo "VULNERABLE: CF-WR631AX firmware ${FW} <= 2.7.0.8 (CVE-2026-15511)"
exit 1
else
echo "PATCHED: CF-WR631AX firmware ${FW} > 2.7.0.8 (verify vendor advisory manually — no fix confirmed as of 2026-07-13)"
exit 0
fi
If you remember one thing.
Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.