

Questo repository documenta l'analisi ingegneristica inversa completa e lo sfruttamento di CVE-2019-17147, una vulnerabilità critica di esecuzione remota di codice (RCE) nel router TP-Link TL-WR841N (architettura MIPSEL). La vulnerabilità risiede nel demone del server web httpd, dove una validazione impropria degli input consente un Stack Buffer Overflow tramite una funzione personalizzata cstr_strncpy, portando all'esecuzione di codice arbitrario senza autenticazione.
| Vulnerabilità | CVE-2019-17147 |
|---|---|
| CVSS v3.1 | 8.8 (High) |
| Vector | AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Tipo | Stack-based Buffer Overflow |
| Componente | /usr/bin/httpd |
L'ambiente di analisi è stato realizzato utilizzando i seguenti componenti:
flashrom (Dump della memoria), binwalk (Estrazione del firmware), IDA Pro (Analisi statica), GDB-Multiarch (Debug remoto), QEMU (Emulazione MIPSEL).TL-WR841N(US)_V14_180319.La vulnerabilità è stata identificata nel binario /usr/bin/httpd. L'analisi statica tramite IDA Pro ha rivelato una funzione personalizzata di copia delle stringhe, cstr_strncpy, utilizzata durante il parsing delle intestazioni HTTP (in particolare l'intestazione Host).

La funzione cstr_strncpy accetta un parametro copy_len derivato dalla lunghezza della stringa sorgente piuttosto che dalla dimensione del buffer di destinazione. Ciò consente un classico stack buffer overflow quando viene fornita un'intestazione eccessivamente lunga. Inoltre, la funzione http_parser_argStrToList, che gestisce una struttura a lista collegata, è interessata da questo overflow, consentendo il controllo dei puntatori next e prev.
Il debug in fase di esecuzione con gdbserver ha confermato il crash e il controllo del flusso di esecuzione. L'analisi della mappa di memoria (vmmap) ha rivelato una critica mancanza di hardening:

Questa configurazione consente l'esecuzione diretta dello shellcode posizionato nell'Heap, evitando la necessità di complesse catene ROP.
La catena di exploit utilizza una primitiva Write-What-Where derivata dai puntatori corrotti della lista collegata per ottenere la RCE.
strcpy, il payload viene inviato in più richieste:
atol nella Global Offset Table (GOT) viene sovrascritta con l'indirizzo dello shellcode.atol (tramite un'intestazione Content-Length), reindirizzando l'esecuzione allo shellcode iniettato.
Lo script Python finale automatizza con successo l'attacco, generando una shell di root sulla porta 31337.

La vulnerabilità deriva da pratiche di codifica non sicure nella gestione dei buffer.
cstr_strncpy con alternative sicure che impongano rigorosamente i limiti del buffer di destinazione (ad esempio, strncpy con un controllo esplicito dei limiti basato su sizeof(dest)).Per una guida dettagliata passo passo sull'intero processo, inclusa l'analisi del codice e la configurazione dell'ambiente, fare riferimento alle guide complete incluse in questo repository:
Questo progetto ha esclusivamente scopi educativi e di ricerca. Le informazioni fornite sono intese a migliorare la sicurezza dei dispositivi IoT. Gli autori non sono responsabili di qualsiasi uso improprio delle informazioni o del codice contenuto nel presente documento.
Basato su ricerca e analisi originali.