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
Comfast OUI 9C:A6:15, 44:D1:FA), and passive Zeek software.log for webmgnt User-Agent banners. If zero hits, close the ticket — no mitigation SLA applies at MEDIUM.- 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.
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 |
Sources.
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.
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