A hole in a $30 consumer wifi extender that you have to log into first to exploit
CVE-2026-13539 is a CWE-119 memory-corruption flaw in the Wavlink WL-NU516U1-A wireless repeater running firmware M16U1_V240425. The bug sits in the device's web admin CGI surface — the same adm.cgi/nas.cgi/wireless.cgi family that has produced a dozen similar overflow and command-injection CVEs against this product line throughout 2025–2026. Successful exploitation gives the attacker code execution on the embedded Linux that runs the repeater, typically as root, but only after authenticating to the admin panel (PR:L).
Vendor scored this HIGH (8.8) off the raw CVSS vector. For a fleet defender that label is misleading. Wavlink is a consumer/SOHO brand — these units do not belong in a managed enterprise. If you have any in your 10k-host estate they are rogue/shadow hardware on an access-layer VLAN, not a tier-0 asset. The CVSS vector treats *any* network-reachable RCE as severe, but the *role* this device plays caps the blast radius at the device itself plus whatever broadcast-domain mischief follows from owning one consumer access point.
5 steps from start to impact.
Reach the device's web admin
- Network path to TCP/80 on the repeater
- Repeater powered on and provisioned
- Wavlink admin UI is not exposed to the internet by default
- Enterprise NAC and segmentation typically prevent client-to-client management plane reach
Shenzhen Wavlink MACs.Authenticate to the admin panel
PR:L — exploitation requires a valid session. In practice the bar is low: default creds (admin/admin or vendor-printed sticker password) work on the vast majority of unprovisioned Wavlinks. Researchers in this CVE line (VulDB, OffSeq) typically demonstrate with default creds.- Valid admin credentials or default creds still in place
- Any user who changed the admin password defeats the precondition
- Brute-force is rate-limited by the device's slow HTTP stack but not by lockout
/cgi-bin/login.cgi from a single source IP.Send the oversized argument to the vulnerable CGI
CVE-2026-2565, -2567, -4861, the attacker POSTs an oversized field (Content-Length header, User1Passwd, wlan_bssid, ftext, etc.) to the targeted CGI handler. The stack frame overflows; with no PIE/ASLR/canaries on MIPS/ARM SOHO firmware, a basic ROP into system() or shellcode is straightforward.- Knowledge of the specific vulnerable handler and field (typically reverse-engineered from firmware blob)
- Firmware variant differences cause offset drift across hardware revisions
/cgi-bin/*.cgi; vendor scanners (Nessus, Qualys) carry generic Wavlink CGI overflow plugins.Execute code as root on the device
lighttpd or goahead. Successful overflow yields root shell on the device. Attacker pivots into a persistent rootkit, DNS hijack, or man-in-the-middle of any wireless client associated with the repeater.- Successful overflow trigger
- No persistence across factory reset; firmware updates wipe implants
- Device cannot reach beyond its own LAN segment without further pivot
Pivot to wireless clients on the same SSID
- Clients actively associated to the repeater's SSID
- Corporate endpoints use 802.1X / WPA3-Enterprise and do not associate with rogue APs
- Modern OS HSTS preloading defeats HTTP MITM for major SaaS
The supporting signals.
| In-the-wild exploitation | No known active exploitation for this specific CVE ID. Sibling CVEs in the same product line (CVE-2026-2565, -2567, -4861) have public PoCs but no observed mass exploitation. |
|---|---|
| Public PoC | Not yet published for CVE-2026-13539 specifically; pattern-identical PoCs exist on VulDB and OffSeq Radar for adjacent Wavlink CGI overflows. |
| EPSS | Pending (newly disclosed 2026-06-29) — sibling Wavlink overflow CVEs sit at ~0.05–0.15% (sub-1st percentile). |
| KEV status | Not listed on CISA KEV. No Wavlink consumer-product CVE has ever been added to KEV. |
| CVSS vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H — network-reachable, low complexity, low privileges required, no user interaction. |
| Affected | Wavlink WL-NU516U1-A, firmware M16U1_V240425. Likely affects adjacent firmware builds in the same family. |
| Fixed version | No vendor patch published at disclosure. Wavlink's firmware portal (wavlink.com/en_us/firmware.html) historically lags CVE disclosure by months or never. |
| Exposure data | Shodan and Censys typically return <5,000 internet-exposed Wavlink admin panels globally. Enterprise installed base is effectively zero outside of shadow IT. |
| Disclosure date | 2026-06-29 (today). |
| Reporter | Disclosed via the VulDB CNA pipeline, consistent with the prolific researcher cluster reporting Wavlink firmware bugs throughout 2025–2026. |
noisgate verdict.
The single most decisive factor is enterprise installed-base share approaching zero — Wavlink WL-NU516U1-A is a consumer USB wireless repeater that has no legitimate role in a managed fleet. Even where it appears as shadow IT, blast radius is bounded by the device and any clients foolish enough to associate with it; no high-value-role multiplier applies.
Why this verdict
- Friction adjustment — authentication required:
PR:Lmeans the attacker needs a valid admin session. Default-cred reuse is plausible but not free; a single password change defeats the chain. - Friction adjustment — exposure population: Wavlink consumer hardware does not appear in managed enterprise CMDBs. Shodan/Censys data caps internet-exposed instances in the low thousands globally.
- Role multiplier — none triggered: The affected component is not on the high-value-role catalog (not a hypervisor, IdP, PAM, CA, backup, EDR, network edge, or DC role). Worst plausible high-value-role outcome is
device → same-SSID client MITM, which is host-scope, not fleet-scope. No floor elevation applies. - No KEV, no in-the-wild signal, EPSS likely <1% — vendor
HIGH 8.8is driven by raw CVSS math; threat reality is a quiet consumer-IoT bug.
Why not higher?
The vendor's HIGH is mathematically defensible from the CVSS vector but ignores deployment reality. To justify MEDIUM or above the bug would need either a high-value-role deployment context (it has none), active exploitation (none observed), or unauthenticated reach (it is PR:L).
Why not lower?
Not IGNORE because shadow-IT Wavlinks do appear in enterprise networks (guest-room repeaters, contractor-brought hardware, lab benches) and a rooted access point is a useful pivot. Asset discovery teams still need to find and remove them; that work is more than zero.
What to do — in priority order.
- Inventory for Wavlink hardware across all VLANs — Run a one-pass discovery against the
001583,0c9c92,14a7b4,b0e98band related Wavlink/Winstars OUIs across every managed switch. For LOW verdicts there is no noisgate mitigation SLA — fold this into the 365-day remediation window, but make it a named ticket so it does not vanish. - Block management-plane reach to discovered units — ACL or private-VLAN-isolate the repeater so only a designated admin host can reach TCP/80,443 on it. Removes Step 1 of the attack path entirely.
- Force credential rotation on any unit you keep — If business owners insist on retaining a Wavlink, rotate off the default admin password.
PR:Lbecomes meaningful friction the moment defaults are gone. - Replace with managed AP hardware — The right long-term answer for a 10k-host shop is to not have consumer repeaters at all. Issue a corporate-supported alternative as part of the 365-day remediation cycle (noisgate remediation SLA).
- Waiting for a vendor patch — Wavlink's firmware release cadence for this product line is unreliable; historical CVEs in the same family have gone unpatched for 12+ months.
- WAF / IPS in front of the device — enterprise WAFs sit at the perimeter, not in front of a guest-VLAN repeater. The attacker is already inside that segment.
- EDR on endpoints — the vulnerable code runs on the embedded Linux of the repeater, not on any host you can install an agent on.
Crowdsourced verification payload.
Run from an auditor workstation on the same L2/L3 segment as suspected Wavlink units. Provide the target IP as $1. Requires only standard curl and shell; no privileges on the target. Example: ./check_wavlink.sh 192.168.1.1. Output: VULNERABLE, PATCHED, or UNKNOWN.
#!/usr/bin/env bash
# noisgate verifier — CVE-2026-13539 Wavlink WL-NU516U1-A buffer overflow
# Usage: ./check_wavlink.sh <target-ip>
# Exit codes: 0 PATCHED/not-affected, 1 VULNERABLE, 2 UNKNOWN
set -u
TARGET="${1:-}"
if [[ -z "$TARGET" ]]; then
echo "usage: $0 <target-ip>" >&2
exit 2
fi
UA='noisgate-verifier/1.0'
VULN_FW='M16U1_V240425'
# 1. Confirm this is actually a Wavlink admin panel
BANNER=$(curl -sk --max-time 5 -A "$UA" "http://${TARGET}/login.shtml" 2>/dev/null)
if ! echo "$BANNER" | grep -qiE 'wavlink|wl-nu516'; then
echo "UNKNOWN: $TARGET does not present a Wavlink admin panel"
exit 2
fi
# 2. Pull firmware/model strings from sysinfo endpoints used by this family
SYS=$(curl -sk --max-time 5 -A "$UA" "http://${TARGET}/cgi-bin/ExportSettings.sh" 2>/dev/null)
SYS+=$(curl -sk --max-time 5 -A "$UA" "http://${TARGET}/sysinit.shtml" 2>/dev/null)
MODEL=$(echo "$SYS" | grep -oE 'WL-NU516U1[-A-Z0-9]*' | head -1)
FW=$(echo "$SYS" | grep -oE 'M16U1_V[0-9]+' | head -1)
if [[ -z "$MODEL" && -z "$FW" ]]; then
echo "UNKNOWN: could not extract model/firmware from $TARGET"
exit 2
fi
echo "detected model=${MODEL:-?} firmware=${FW:-?}"
# 3. Compare
if [[ "$FW" == "$VULN_FW" ]]; then
echo "VULNERABLE: $TARGET runs $FW (CVE-2026-13539)"
exit 1
fi
if [[ "$FW" =~ ^M16U1_V([0-9]+)$ ]]; then
BUILD="${BASH_REMATCH[1]}"
if (( BUILD <= 240425 )); then
echo "VULNERABLE: $TARGET runs $FW (<= 240425, CVE-2026-13539)"
exit 1
fi
echo "PATCHED: $TARGET runs $FW (newer than 240425)"
exit 0
fi
echo "UNKNOWN: firmware string '$FW' did not match expected pattern"
exit 2
If you remember one thing.
Sources
- CVE Details — Wavlink WL-NU516U1 firmware M16U1_V240425
- VulDB — CVE-2026-8189 Wavlink adm.cgi wzdrepeater (sibling)
- VulDB — CVE-2026-4861 Wavlink nas.cgi ftext stack overflow (sibling)
- OffSeq Radar — CVE-2026-2565 Wavlink WL-NU516U1 stack overflow (sibling)
- OffSeq Radar — CVE-2026-2567 Wavlink WL-NU516U1 stack overflow (sibling)
- CVEFeed — CVE-2025-9149 Wavlink wireless.cgi command injection (related family)
- Wavlink firmware download portal
- Firmware mirror — WAVLINK-NU516-V240425
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.