

Este repositorio documenta la ingeniería inversa exhaustiva y la explotación de CVE-2019-17147, una vulnerabilidad crítica de ejecución remota de código (RCE) en el router TP-Link TL-WR841N (arquitectura MIPSEL). La vulnerabilidad reside en el demonio del servidor web httpd, donde una validación de entrada incorrecta permite un desbordamiento de búfer en la pila a través de una función personalizada cstr_strncpy, lo que conduce a la ejecución de código arbitrario sin autenticación.
| Vulnerabilidad | CVE-2019-17147 |
|---|---|
| CVSS v3.1 | 8.8 (Alto) |
| Vector | AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Tipo | Desbordamiento de búfer basado en pila |
| Componente | /usr/bin/httpd |
El entorno de análisis se estableció utilizando los siguientes componentes:
flashrom (Volcado de memoria), binwalk (Extracción de firmware), IDA Pro (Análisis estático), GDB-Multiarch (Depuración remota), QEMU (Emulación MIPSEL).TL-WR841N(US)_V14_180319.La vulnerabilidad fue identificada en el binario /usr/bin/httpd. El análisis estático mediante IDA Pro reveló una función personalizada de copia de cadenas, cstr_strncpy, utilizada durante el análisis de las cabeceras HTTP (específicamente la cabecera Host).

La función cstr_strncpy acepta un parámetro copy_len derivado de la longitud de la cadena origen en lugar del tamaño del búfer destino. Esto permite un clásico desbordamiento de búfer en la pila cuando se suministra una cabecera excesivamente larga. Además, la función http_parserArgStrToList, que manipula una estructura de lista enlazada, se ve afectada por este desbordamiento, otorgando control sobre los punteros next y prev.
La depuración en tiempo de ejecución con gdbserver confirmó el fallo y el control sobre el flujo de ejecución. El análisis del mapa de memoria (vmmap) reveló una falta crítica de endurecimiento:

Esta configuración permite la ejecución directa de shellcode colocado en el Heap, evitando la necesidad de cadenas ROP complejas.
La cadena de explotación utiliza una primitiva Write-What-Where derivada de los punteros corruptos de la lista enlazada para lograr RCE.
strcpy, el payload se envía en múltiples peticiones:
atol en la Tabla de Offset Global (GOT) se sobrescribe con la dirección del shellcode.atol (a través de la cabecera Content-Length), redirigiendo la ejecución al shellcode inyectado.
El script final en Python automatiza con éxito el ataque, lanzando una shell de root en el puerto 31337.

La vulnerabilidad se origina en prácticas de codificación inseguras en la gestión de búferes.
cstr_strncpy por alternativas seguras que apliquen estrictamente los límites del búfer de destino (p. ej., strncpy con verificación explícita de límites basada en sizeof(dest)).Para obtener una guía detallada paso a paso de todo el proceso, incluidos el análisis del código y la configuración del entorno, consulte las guías completas incluidas en este repositorio:
Este proyecto es solo para fines educativos y de investigación. La información proporcionada tiene como objetivo mejorar la seguridad de los dispositivos IoT. Los autores no son responsables de ningún uso indebido de la información o el código contenido en este documento.
Basado en investigación y análisis originales.