
Umfassende Reverse-Engineering- und Exploitation-Analyse von CVE-2019-17147, einem Stack-Pufferüberlauf in TP-Link TL-WR841N-Routern. Beinhaltet Firmware-Analyse, Hardware-Debugging und einen gestaffelten Shellcode-Injection-Exploit für nicht authentifizierte RCE.

Dieses Repository dokumentiert das umfassende Reverse Engineering und die Ausnutzung von CVE-2019-17147, einer kritischen Remote-Code-Ausführungs-Sicherheitslücke (RCE) im TP-Link TL-WR841N Router (MIPSEL-Architektur). Die Schwachstelle befindet sich im httpd-Webserver-Daemon, wo eine unsachgemäße Eingabevalidierung einen Stack Buffer Overflow über eine benutzerdefinierte cstr_strncpy-Funktion ermöglicht, was zu einer beliebigen Codeausführung ohne Authentifizierung führt.
| Schwachstelle | CVE-2019-17147 |
|---|---|
| CVSS v3.1 | 8.8 (Hoch) |
| Vektor | AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Typ | Stack-basierter Pufferüberlauf |
| Komponente | /usr/bin/httpd |
Die Analyseumgebung wurde mit den folgenden Komponenten aufgebaut:
flashrom (Speicher-Dumping), binwalk (Firmware-Extraktion), IDA Pro (Statische Analyse), GDB-Multiarch (Remote-Debugging), QEMU (MIPSEL-Emulation).TL-WR841N(US)_V14_180319.Die Schwachstelle wurde in der Binärdatei /usr/bin/httpd identifiziert. Die statische Analyse mit IDA Pro zeigte eine benutzerdefinierte String-Kopierfunktion, cstr_strncpy, die beim Parsen von HTTP-Headern (insbesondere des Host-Headers) verwendet wird.

Die Funktion cstr_strncpy akzeptiert einen Parameter copy_len, der von der Länge des Quell-Strings abgeleitet wird, nicht von der Größe des Ziel-Puffers. Dies ermöglicht einen klassischen Stack-Pufferüberlauf, wenn ein übermäßig langer Header geliefert wird. Darüber hinaus ist die Funktion http_parser_argStrToList, die eine verknüpfte Listenstruktur manipuliert, von diesem Überlauf betroffen, wodurch die Kontrolle über next- und prev-Zeiger erlangt wird.
Das Laufzeit-Debugging mit gdbserver bestätigte den Absturz und die Kontrolle über den Ausführungsfluss. Die Analyse der Speicherkarte (vmmap) ergab einen kritischen Mangel an Absicherung:

Diese Konfiguration erlaubt die direkte Ausführung von Shellcode, der auf dem Heap platziert wird, und umgeht so die Notwendigkeit komplexer ROP-Ketten.
Die Ausnutzungskette verwendet ein Write-What-Where-Primitiv, das aus den korrupten Zeigern der verknüpften Liste abgeleitet wird, um RCE zu erreichen.
strcpy zu umgehen, wird die Nutzlast in mehreren Anfragen gesendet:
atol in der Global Offset Table (GOT) wird mit der Adresse des Shellcodes überschrieben.atol (über einen Content-Length-Header), wodurch die Ausführung zum injizierten Shellcode umgeleitet wird.
Das endgültige Python-Skript automatisiert den Angriff erfolgreich und öffnet eine Root-Shell auf Port 31337.

Die Schwachstelle resultiert aus unsicheren Programmierpraktiken bei der Pufferverwaltung.
cstr_strncpy durch sichere Alternativen, die die Begrenzung des Zielpuffers strikt erzwingen (z. B. strncpy mit expliziter Grenzprüfung basierend auf sizeof(dest)).Eine detaillierte Schritt-für-Schritt-Anleitung des gesamten Prozesses, einschließlich Code-Analyse und Einrichtung der Umgebung, finden Sie in den vollständigen Leitfäden in diesem Repository:
Dieses Projekt dient ausschließlich zu Bildungs- und Forschungszwecken. Die bereitgestellten Informationen dienen der Verbesserung der Sicherheit von IoT-Geräten. Die Autoren übernehmen keine Verantwortung für Missbrauch der hierin enthaltenen Informationen oder des Codes.
Basierend auf ursprünglicher Forschung und Analyse.