An admin who already owns the router's web UI can also own its shell — on a $25 consumer router that has no business inside an enterprise
CVE-2026-3227 is a classic CWE-78 OS command injection in the web management interface of three low-end TP-Link SOHO wireless routers: TL-WR802N v4, TL-WR841N v14, and TL-WR840N v6. A parameter reaching the underlying system()/popen() chain is not neutralized, so an authenticated administrator can chain shell metacharacters and pop a root shell on the device's BusyBox userland. The attacker has to be on the LAN/Wi-Fi (AV:A) and already hold admin credentials (PR:H).
The vendor's MEDIUM (6.8) rating is honest — arguably even generous. The CVSS vector reflects the real gating factors: adjacent-network reach and high-privilege prerequisite. In an enterprise fleet context this is even softer, because these SKUs are consumer travel/home routers that should not be sitting on a managed corporate segment at all. The interesting question isn't the bug, it's *why is this device on your network?*
4 steps from start to impact.
Reach the router's management plane
curl, or nmap -p80,443 to fingerprint the device.- Adjacent-network access (Wi-Fi association or wired LAN)
- Router web UI reachable on LAN IP
- These are home-grade routers; enterprises rarely deploy them on managed segments
- Guest Wi-Fi is normally isolated from management VLANs
C0:C9:E3, 98:DA:C4, etc.) on corporate portsObtain admin credentials
PR:H. Attacker either knows the password, brute-forces the (rate-limited) login form, harvests it from a config backup, or exploits a chained auth-bypass. Tooling: hydra, medusa, or a chained CVE like the older TP-Link stok-leak class bugs.- Valid admin credentials, or a chainable auth-bypass CVE
- No lockout or MFA (these SOHO SKUs don't support MFA)
- Default creds changed on any competently deployed device
- Admin panel is only reachable from LAN, further shrinking the credential-guessing surface
Inject shell metacharacters into the vulnerable parameter
;, ` `, or $() are passed to the shell, executing arbitrary commands as root in the BusyBox environment. Tooling: curl` with a crafted body, or a public PoC once one lands on exploit-db / GitHub.- Authenticated session cookie
- Vulnerable firmware version still installed
- No public weaponized PoC as of assessment date
- TP-Link's auto-update (where enabled) may already have shipped the fix
Persist and pivot
iptables, tcpdump (if present), dnsmasq config rewrite.- Root shell from step 3
- Router sits between victim clients and upstream network
- TLS everywhere neutralizes passive sniffing
- HSTS + certificate pinning break DNS-hijack MITM for major SaaS
- Corporate clients typically VPN out, bypassing the router's DNS entirely
The supporting signals.
| In-the-wild exploitation | None observed. Not present in CISA KEV. No public reports of mass exploitation. |
|---|---|
| Public PoC | No weaponized PoC on exploit-db or GitHub as of 2026-07-02. Advisory writeups only. |
| EPSS | 0.01102 (~1.1%) — bottom-quartile likelihood of exploitation in the next 30 days |
| KEV status | Not listed |
| CVSS vector | CVSS:3.1/AV:A/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H → adjacent network, high privileges required, no user interaction, full CIA on the device |
| Affected versions | TL-WR802N v4, TL-WR841N v14, TL-WR840N v6 — specific firmware builds prior to the March 2026 patch cycle |
| Fixed versions | TP-Link security advisory firmware releases (Q1–Q2 2026); check each model's downloads page — no distro backports apply (embedded firmware) |
| Exposure telemetry | Shodan/Censys surface these SOHO web UIs only when misconfigured to WAN-side admin — global count in the low tens of thousands, negligible in enterprise ASNs |
| Disclosure | 2026-03-16, coordinated with TP-Link PSIRT |
| Reporter | Independent researcher via TP-Link PSIRT (per vendor advisory) |
noisgate verdict.
The single most decisive factor is the PR:H + AV:A combination on a consumer-grade SKU: the attacker must already be on the LAN and already hold admin credentials, and the affected devices are home/travel routers that virtually never occupy a high-value role in an enterprise. Blast radius is a single plastic router, not a fleet-scale pivot.
Why this verdict
- Two stacked prerequisites (PR:H + AV:A): attacker must both reach the LAN and already own admin — this implies post-initial-access AND post-credential-compromise, two independent gates.
- No KEV, no PoC, EPSS 0.011: every exploitation signal is cold; there's no urgency injected by the threat-intel side.
- Role multiplier — low-value role only: these SKUs are consumer travel/home routers. Even if the chain succeeds, blast radius is confined to the single device and the segment behind it — not identity, not a hypervisor, not a CA. There is no plausible high-value-role deployment (nobody terminates enterprise VPN or peers BGP on a TL-WR802N), so the deployment-role floor does not lift the verdict.
- Installed-base share in enterprise <<1%: managed enterprises standardize on Meraki/Aruba/Fortinet/Cisco/Ubiquiti at the edge. TP-Link SOHO SKUs appearing in a corporate fleet are shadow-IT rogues, not baseline hardware.
Why not higher?
MEDIUM would require either broader exposure (WAN-side admin, which is off by default) or a lower privilege bar. HIGH would require a role multiplier — but the affected SKUs are canonically low-value consumer devices with no plausible identity/hypervisor/CI-CD/edge-enterprise role. There is no signal (KEV, PoC, campaign) to override the friction analysis.
Why not lower?
It is not IGNORE because a real, unauthenticated attacker adjacent to the device (open Wi-Fi, guest network, physical LAN port) who obtains credentials via any means gets root on a network-path device — that is still a meaningful pivot for MITM/DNS-hijack on whoever sits behind it. It stays as tracked backlog rather than being written off.
What to do — in priority order.
- Inventory and remove shadow-IT TP-Link SOHO routers from managed segments — Run a NAC/DHCP sweep for TP-Link OUIs (
C0:C9:E3,98:DA:C4,50:C7:BF,EC:08:6B, etc.) on corporate VLANs and quarantine unmanaged devices. No mitigation SLA at LOW severity — fold into the next quarterly asset-hygiene sprint. - Enforce 802.1X on wired ports and WPA3-Enterprise on Wi-Fi — Denies rogue routers the L2 presence they need for step 1 of the attack path. This is a general control worth having regardless of this CVE.
- Change all TP-Link admin passwords and disable WAN-side admin — For any device you legitimately keep, rotate admin creds to a password-manager-generated value and confirm remote management is off. Kills the credential-recovery path in step 2.
- Update firmware to the TP-Link fixed build during next maintenance window — For devices you actually own on purpose, flash the vendor-provided fix. No urgency, but do it inside the noisgate remediation SLA (365 days).
- Perimeter WAF / IPS rules — the vuln is on the LAN-side management interface, not internet-exposed.
- EDR on endpoints — the code executes on the router's BusyBox userland, not on any Windows/macOS/Linux host your EDR covers.
- Network segmentation from the WAN — the attack is adjacent-network, so WAN-side ACLs are irrelevant.
- Vulnerability scanners like Nessus/Qualys — SOHO router firmware coverage is weak; you'll get false negatives.
Crowdsourced verification payload.
Run this from an auditor workstation on the same LAN segment as the router (not from the router itself). Requires curl and network reachability to the router's LAN IP. Invoke as: ./check-cve-2026-3227.sh 192.168.0.1. No credentials needed — this only reads the model/firmware banner from the login page.
#!/usr/bin/env bash
# noisgate check for CVE-2026-3227 (TP-Link SOHO command injection)
# Usage: ./check-cve-2026-3227.sh <router-lan-ip>
# Exit codes: 0 = PATCHED / not applicable, 1 = VULNERABLE, 2 = UNKNOWN
set -u
TARGET="${1:-}"
if [[ -z "$TARGET" ]]; then
echo "UNKNOWN: usage: $0 <router-lan-ip>" >&2
exit 2
fi
# Grab the login page — TP-Link routers advertise model + firmware in the HTML
HTML=$(curl -sS --max-time 5 "http://${TARGET}/" 2>/dev/null || true)
if [[ -z "$HTML" ]]; then
echo "UNKNOWN: no HTTP response from ${TARGET}"
exit 2
fi
# Model detection
MODEL=""
if grep -qiE 'TL-WR802N.*v?4' <<<"$HTML"; then MODEL="TL-WR802N v4"
elif grep -qiE 'TL-WR841N.*v?14' <<<"$HTML"; then MODEL="TL-WR841N v14"
elif grep -qiE 'TL-WR840N.*v?6' <<<"$HTML"; then MODEL="TL-WR840N v6"
fi
if [[ -z "$MODEL" ]]; then
echo "PATCHED: target is not an affected TP-Link SKU (or fingerprint failed)"
exit 0
fi
# Firmware build detection — TP-Link exposes "Firmware Version: X.Y.Z Build YYYYMMDD"
FW=$(grep -oiE 'Firmware Version[^<]*' <<<"$HTML" | head -n1 || true)
BUILD=$(grep -oiE 'Build[[:space:]]*[0-9]{8}' <<<"$FW" | grep -oE '[0-9]{8}' | head -n1 || true)
if [[ -z "$BUILD" ]]; then
echo "UNKNOWN: ${MODEL} detected but firmware build not readable — log in and check manually"
exit 2
fi
# Fix landed in TP-Link's March 2026 advisory cycle; treat builds < 20260316 as vulnerable
if (( BUILD < 20260316 )); then
echo "VULNERABLE: ${MODEL} firmware build ${BUILD} — CVE-2026-3227 applies"
exit 1
else
echo "PATCHED: ${MODEL} firmware build ${BUILD}"
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.