A ten-year-old consumer router that will never see a patch just got handed a skeleton key
CVE-2026-110536 is a pre-authentication OS command injection in the HNAP CGI handler (/htdocs/cgibin) on D-Link DIR-868L revision B1 running firmware 2.01b05 (built January 2015). The SOAPACTION HTTP header undergoes an unanchored substring match — the authentication check looks for http://purenetworks.com/HNAP1/GetDeviceSettings anywhere in the header rather than at a fixed prefix. An attacker appends shell metacharacters after the last / in the header value, and the router passes that string unsanitized into sprintf → system(), executing arbitrary commands as root (uid=0) with full output read-back in the HTTP response. No credentials, no user interaction, one HTTP request to full device takeover. Affected: DIR-868L B1 firmware ≤2.01b05. Other revisions (A, A-ES) carry the same HNAP codebase and are likely vulnerable.
The vendor-assigned CVSS 10.0 with Scope:Changed is technically unjustified — the command injection runs on the router's own OS, not escaping into a downstream component. The researcher's own scoring (CVSS 9.8, Scope:Unchanged) is more accurate. But the real issue for an enterprise patching team isn't the score — it's relevance. The DIR-868L reached End of Life in November 2016. D-Link has explicitly stated no firmware updates or security remediation will be provided. This is a consumer Wi-Fi router from the Obama administration. A CVSS 10.0 on a device that will never be patched and sits in zero enterprise racks is alarm fatigue, not a crisis. For the handful of units lurking in home offices or forgotten branch closets, the action is replace the hardware, not patch it.
4 steps from start to impact.
Identify exposed DIR-868L HNAP endpoint
/HNAP1/. Shodan and FOFA historically index these devices by their Server header and HNAP response. Scanning is trivial at scale — Mirai-derivative botnets already do this continuously.- Target DIR-868L has HTTP management reachable (LAN default, WAN if remote admin enabled)
- Remote administration is disabled by default; LAN-only exposure limits attack to internal/adjacent networks
- Device is EOL since 2016 — shrinking installed base year over year
Send crafted SOAPACTION header to bypass authentication
/HNAP1/ with a SOAPACTION header containing the magic substring http://purenetworks.com/HNAP1/GetDeviceSettings followed by /<shell_command>. The unanchored substring match passes the authentication check because the expected string is present, while the action-name extractor takes everything after the last / — the injected command. No credentials needed.- HTTP connectivity to the HNAP endpoint
- None if the endpoint is reachable — zero-click, zero-auth
;, |, $(), backticks) — Snort SID 37171 covers older HNAP injection variantsExecute arbitrary commands as root
sprintf(s, "sh /var/run/%s.sh > /dev/console", action); system(s);. The attacker's payload executes as uid=0 on the router's embedded Linux. Command output is captured and returned in the HTTP response body when the payload includes CGI header output. This gives full read/write/execute on the device — credential extraction, traffic interception, firmware modification, botnet enrollment.- Steps 1-2 completed
- None — exploitation is a single HTTP request with immediate root shell
Post-exploitation: botnet enrollment or lateral pivot
- Root shell on the router (Step 3)
- Enterprise VPN tunnels are encrypted end-to-end, limiting MitM value
- Modern endpoints with EDR would detect lateral movement attempts from the gateway
- The router's MIPS/ARM CPU and limited RAM constrain the attacker's tooling
SOAPACTION headers with shell metacharacters targeting /HNAP1/. Snort signature SID 37171 covers older HNAP injection variants and can be adapted. This stops remote exploitation but does not fix the underlying vulnerability.- Firmware patching — no patch exists and none will be released. D-Link confirmed EOL with no security remediation. Do not waste cycles searching for firmware updates.
- Router-level firewall rules — the DIR-868L's built-in firewall cannot block requests to its own management interface. The HNAP handler runs before any user-configurable ACLs.
- MAC filtering or WPA3 hardening — these protect wireless client access but do not restrict HTTP management interface access from wired LAN or WAN (if remote admin is on). The attack is HTTP-based, not wireless.
The supporting signals.
| In-the-wild exploitation | No confirmed exploitation of CVE-2026-110536 specifically. However, Evooo1Bot (Mirai derivative, active since July 2026) targets the same device model via CVE-2025-55583, and Mirai campaigns actively exploit EOL D-Link routers via HNAP vectors. Weaponization of this CVE is a matter of when, not if. |
|---|---|
| Proof of concept | Public. Walnut1337/Command-Injection-DIR-868L — includes 4 PoC implementations: poc_hnap_injection.py (standalone), hnap_http_poc.sh (FirmAE), hnap_qemu_root.sh (QEMU ARM), verify_hnap_pigw.py (Unicorn emulation). Full weaponization-ready with output read-back. |
| EPSS score | Not yet scored (CVE published 2026-10-14, EPSS typically populates within 30 days). Comparable D-Link HNAP CVEs score 0.5–0.85 EPSS historically. |
| CISA KEV status | Not listed. D-Link SOHO router CVEs rarely make KEV unless tied to active APT campaigns. |
| CVSS vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H (vendor: 10.0). Researcher assessment: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 9.8. Scope:Changed is unjustified — the injection executes on the router's own OS, not a separate security domain. |
| Affected versions | DIR-868L B1 firmware 2.01b05 confirmed. Rev A and A-ES share the same HNAP codebase and are likely vulnerable. No firmware newer than 2.01b05 exists for any revision. |
| Fixed versions | None. Will never exist. Device EOL since November 2016. D-Link explicitly states no firmware updates or security remediation for EOL products. |
| Scanning/exposure | Historical Shodan data (~2016) showed ~10,000 DIR-868L units with remote administration enabled. Current exposure is substantially lower due to natural hardware attrition over 10 years. HNAP endpoint is LAN-only by default. |
| Disclosure date | 2026-10-14 (public). Researcher (Walnut1337) discovered September 2026. |
| Reporting researcher | Walnut1337 — independent researcher. D-Link PSIRT notification was planned per the advisory. |
Sources.
Why this verdict
- S:C is unjustified, true base is 9.8: The command injection executes on the router's own Linux OS — no sandbox escape, no cross-component impact. Scope:Unchanged (S:U) drops the base from 10.0 to 9.8. This is the correct technical baseline.
- Near-zero enterprise installed base: The DIR-868L is a consumer SOHO Wi-Fi router discontinued in 2016. An enterprise managing 10,000 hosts does not procure, deploy, or manage DIR-868L units. They may exist in remote worker home networks or forgotten branch closets, but these are unmanaged assets outside the patching program's scope. Estimated enterprise fleet presence: <0.1%.
- No patch exists or ever will: D-Link confirmed no firmware updates for EOL products. This is not a 'patch now vs. patch later' decision — it's a 'find and replace hardware' decision, which changes the operational calculus entirely.
- LAN-only by default limits remote attack surface: The HNAP endpoint is exposed on the LAN interface by default. Remote exploitation requires the owner to have enabled remote administration — a non-default configuration that further narrows the reachable population.
- Role multiplier: The DIR-868L occupies no high-value enterprise role. It is not a network edge appliance in the enterprise sense (not F5, FortiGate, PAN-OS, Cisco ASA). It is not an identity provider, hypervisor, CI/CD system, backup target, or domain controller. Its blast radius is limited to (a) the device itself and (b) traffic transiting a single consumer router segment. Compromise of a home router could theoretically enable traffic interception of a remote worker's VPN handshake, but modern split-tunnel VPN with certificate pinning limits this. The worst realistic outcome is botnet enrollment of a single SOHO device — not domain takeover, not fleet compromise, not supply-chain pivot.
- Active botnet ecosystem is a floor-setter: Evooo1Bot and Mirai campaigns actively target the DIR-868L model family. While CVE-2026-110536 specifically hasn't been observed in the wild yet, the public PoC and active targeting of the same device make exploitation imminent. This prevents dropping below MEDIUM.
Why not higher?
The vulnerability is technically severe (unauth RCE as root, single HTTP request, public PoC). In a vacuum, this would be CRITICAL. But the affected device is a consumer SOHO router EOL since 2016 with near-zero enterprise deployment. It occupies no high-value role — it's not protecting enterprise infrastructure, not holding enterprise secrets, not part of the managed fleet. There is no high-value-role floor to enforce. Upgrading to HIGH would require evidence that a meaningful fraction of the enterprise's 10,000 hosts depend on DIR-868L for connectivity or security, which is implausible.
Why not lower?
Active botnet campaigns (Evooo1Bot, Mirai) are already targeting the DIR-868L model family via adjacent CVEs. The public PoC is weaponization-ready with output read-back. Compromised home routers can serve as proxy infrastructure, traffic interceptors, or pivot points into home-office LANs. Dropping to LOW would understate the risk for organizations with remote/hybrid workforces where unmanaged consumer routers are the de facto network edge. The imminent exploitation timeline keeps this at MEDIUM.
Crowdsourced verification payload.
Run this from any Linux/macOS auditor workstation that has HTTP connectivity to the target router's management IP. Usage: bash check_dir868l.sh 192.168.0.1. No special privileges needed — it sends a benign HNAP discovery request and checks the device model and firmware version. It does not send an exploit payload.
#!/usr/bin/env bash
# check_dir868l.sh — CVE-2026-110536 exposure checker
# Checks if a target IP is a D-Link DIR-868L running vulnerable firmware.
# Safe: sends only a standard HNAP GetDeviceSettings request.
# Exit codes: 0=VULNERABLE, 1=PATCHED, 2=UNKNOWN
set -euo pipefail
if [ $# -lt 1 ]; then
echo "Usage: $0 <router-ip> [port]"
echo "Example: $0 192.168.0.1 80"
exit 2
fi
TARGET="$1"
PORT="${2:-80}"
TIMEOUT=10
URL="http://${TARGET}:${PORT}/HNAP1/"
echo "[*] Probing ${URL} for HNAP endpoint..."
# Send a legitimate HNAP GetDeviceSettings request (no injection)
RESPONSE=$(curl -s -m "$TIMEOUT" \
-H 'SOAPACTION: "http://purenetworks.com/HNAP1/GetDeviceSettings"' \
-H 'Content-Type: text/xml' \
"$URL" 2>/dev/null || true)
if [ -z "$RESPONSE" ]; then
echo "[?] UNKNOWN — No response from ${TARGET}:${PORT}. Host may be down or HNAP not exposed."
exit 2
fi
# Check if response contains DIR-868L model identifier
if echo "$RESPONSE" | grep -qi 'DIR-868L'; then
echo "[!] DIR-868L detected at ${TARGET}:${PORT}"
# Try to extract firmware version
FW_VER=$(echo "$RESPONSE" | grep -oiP '(?<=<FirmwareVersion>)[^<]+' || true)
MODEL=$(echo "$RESPONSE" | grep -oiP '(?<=<ModelName>)[^<]+' || true)
HW_VER=$(echo "$RESPONSE" | grep -oiP '(?<=<HardwareVersion>)[^<]+' || true)
echo " Model: ${MODEL:-unknown}"
echo " Firmware: ${FW_VER:-unknown}"
echo " Hardware: ${HW_VER:-unknown}"
# DIR-868L is EOL with no patches — ALL firmware versions are vulnerable
echo ""
echo "[!] VULNERABLE — DIR-868L is End-of-Life (since 2016) with no security patches."
echo " CVE-2026-110536: Pre-auth command injection via HNAP SOAPACTION header."
echo " ACTION: Replace this device immediately. No firmware fix will ever be released."
exit 0
else
# Check if it's a different D-Link model with HNAP
if echo "$RESPONSE" | grep -qi 'HNAP\|purenetworks'; then
echo "[*] HNAP endpoint detected but device is NOT a DIR-868L."
echo " (Other D-Link models may have separate HNAP vulnerabilities.)"
echo "[-] PATCHED — Not affected by CVE-2026-110536 (wrong model)."
exit 1
else
echo "[?] UNKNOWN — Response received but no HNAP/DIR-868L signature found."
exit 2
fi
fi