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
Fastgate — CVE-2019-12489 | Kitploit
Tools/GitHubGitHub/garis/fastgate
Embedded-System-SicherheitIoT-SicherheitSchwachstellenanalyseExploitationReverse EngineeringWebanwendungs-ExploitationCommand and ControlHardware-SicherheitFirmware-Analyse
GitHubgaris/fastgate

Fastgate

CVE-2019-12489

21vor 6 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Repository anzeigen

TLDR

Dies ist ein kurzer Bericht über eine Sicherheitslücke (CVE-2019-12489), die beim Herumspielen mit einem Fastgate-Modem/-Router von Fastweb und Ghidra entdeckt wurde. Die Schwachstelle ermöglicht die Ausführung einer Befehlsinjektion über eine HTTP-Anfrage und kann genutzt werden, um eine SSH-Shell zu aktivieren.

Firmware-Sammlung und -Extraktion

Alle Firmware-Dateien befinden sich unter http://59.0.121.191:8080/ACS-server/file/FILENAME

Wobei FILENAME gleich ist:

  • 0.00.89_FW_200_Askey
  • 0.00.81_FW_200_Askey
  • 0.00.67_FW_200_Askey
  • 0.00.47_FW_200_Askey
  • 0.00.267_FW_200_Askey
  • 0.00.167_FW_200_Askey

Um beispielsweise die neueste Firmware zu erhalten, gehen Sie einfach zu http://59.0.121.191:8080/ACS-server/file/0.00.89_FW_200_Askey

Um die Dateien zu extrahieren, benötigen wir das Dienstprogramm unter https://github.com/nlitsme/ubidump (dies ist das erste, das bei mir funktioniert hat).

Ein binwalk auf die Datei liefert uns:

root@kitploit:~
$ binwalk 0.00.89_FW_200_Askey

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
94            0x5E            JFFS2 filesystem, little endian
3276894       0x32005E        UBI erase count header, version: 1, EC: 0x0, VID header offset: 0x800, data offset: 0x1000

Wir brauchen das JFFS2-Dateisystem nicht, sondern nur den UBI-Teil. Dazu können wir die Datei mit dd zuschneiden. Dazu benötigen wir die Gesamtgröße und den UBI-Startpunkt.

Die Dateigröße kann mit ls abgerufen werden:

root@kitploit:~
$ ls -la

total 55836
drwxr-xr-x  3 riccardo users     4096 set 24 10:07 .
drwx------ 83 riccardo users    12288 set 24 10:08 ..
-rw-r--r--  1 riccardo users 57147506 set 24 10:05 0.00.89_FW_200_Askey

Der Wert 57147506 ist der, den wir brauchen. Wenn wir uns die Ausgabe von binwalk ansehen, sehen wir, dass der UBI-Teil bei 3276894 beginnt. Mit diesen beiden Werten können wir dd wie folgt verwenden:

root@kitploit:~
$ dd if=0.00.89_FW_200_Askey of=0.00.89_FW_200_Askey.UBI bs=1 skip=3276894 count=57147506

Jetzt können wir ubidump verwenden (nach einer anfänglichen Konfiguration, die von der Systemkonfiguration abhängt):

root@kitploit:~
$ git clone https://github.com/nlitsme/ubidump.git
$ sudo pip install crcmod
$ yay -S python-lzo
$ python ubidump/ubidump.py -s bump 0.00.89_FW_200_Askey.UBI

Wir haben nun das Dateisystem in bump/rootfs_ubifs/

Jetzt können wir mit der Analyse etwas weiter fortfahren.

Analyse

Wenn wir uns im Dateisystem umsehen, sehen wir, dass die Web-GUI von mini_httpd verwaltet wird:

root@kitploit:~
$ grep -i -r "mini_httpd"
etc/sniproxy/urlfilter3.sh:ln -sf /usr/sbin/mini_httpd $URLFILTER_WEBD_PATH 
etc/sniproxy/urlfilter3.sh:$URLFILTER_WEBD_PATH -d $URLFILTER_WEB_PATH -c "**.cgi" -u admin -S -E /web/mini_httpd.pem -p $webd_https_port 
bin/web.sh:#mv /tmp/mini_httpd /usr/sbin 
bin/web.sh:killall -9 mini_httpd 
bin/web.sh:mini_httpd -d /web -c "STATUSAPI/**.cgi|STATUSAPI/*" -u admin -T "UTF-8" -p 8080

Und wir sehen, dass mini_httpd von einer .cgi-Datei abhängt:

root@kitploit:~
$ grep -i -r "status.cgi"
web/factory/mtcmd/mt_info.htm:          "url":"/status.cgi", 
web/fw-router/app/app.js:.value('apiServiceUrl', '/status.cgi') 
**web/js/status.js:var CGI_NAME='status.cgi';**
web/js/status.js:       "url":"http://192.168.101.93/STATUSAPI/status.cgi",
web/js/status.js:       "url":"http://192.168.101.93/STATUSAPI/status.cgi",
web/js/status.js:       "url":http://192.168.101.93/STATUSAPI/status.cgi,

Also können wir mit Ghidra beginnen, in die status.cgi zu schauen.

Nachdem wir viele Details übersprungen haben, wird die Schwachstelle unten beschrieben.

Expoit

Das erste, worauf man achten sollte, ist eine Main-Methode wie die auf diesem Bild:

Image of main

Wir können sehen, dass setup aufgerufen wird. Nach ein wenig Herumschauen scheint run_service(...) der Kern aller Funktionalitäten zu sein.

Image of setup

Wenn wir nach &service_tab suchen, sehen wir, dass bestimmte Zeichenfolgen mit tatsächlichem Code verbunden sind, der von run_service(...) ausgeführt wird.

Image of services

Nachdem ich mir diese Methoden nacheinander angesehen habe, stoße ich auf usb_remove

Image of usbremove

Im Detail:

root@kitploit:~
mountVal = (char *)find_val(httpparams,"mount");

Nimmt die Zeichenfolge aus der URL-Anfrage direkt in eine Variable

root@kitploit:~
sprintf((char *)&mountLocation,"/mnt/%s",mountVal);

Erstellt einen vollständigen Pfad basierend auf dem Parameter in der URL-Anfrage

root@kitploit:~
mountLocation

mountLocation wird direkt in einem Befehl verwendet

Es gibt jedoch Prüfungen, um eine Befehlsinjektion zu verhindern. Insbesondere:

root@kitploit:~
invalidChars = 0x60273b7c;

Wird verwendet, um auf einige ungültige Zeichen wie ` ' ; | zu prüfen, aber & ist nicht in der Liste enthalten. Wenn der Parameter mount also gleich &ping -c 10 192.168.1.172& ist, erlaubt die Prüfung die Ausführung von /statusapi/bin/umount -lf &ping -c 10 192.168.1.172&.

Der mount-Befehl wird fehlschlagen, aber der nachfolgende Ping wird ausgeführt.

Der offizielle Patch

Der veröffentlichte Patch vereinfacht den Code, indem die Prüfungen auf Sonderzeichen eliminiert werden und stattdessen einfach überprüft wird, ob der Ordner existiert.

Image of usbremovepatched

Der Code zum Ausnutzen dieser Schwachstelle und zum Aktivieren von SSH befindet sich in fastwebEnableSSH.py https://github.com/garis/Fastgate/blob/master/fastwebEnableSSH.py

Zeitplan der verantwortungsvollen Offenlegung mit Fastweb

    1. Mai 2019: Erste Entdeckung und Tests
    1. Mai 2019: Verantwortungsvolle Offenlegung gemäß https://www.fastweb.it/corporate/responsible-disclosure/
    1. Mai 2019: Bestätigung des Kontakts, weitere Informationen werden nach einer Analyse durch Fastweb verfügbar sein
    1. Juni 2019: Patch wird getestet.
    1. Juli 2019: Patch wird getestet..
    1. August 2019: Patch wird getestet...
    1. September 2019: Komm schon Fastweb, gib mir wenigstens die gepatchte Firmware
    1. September 2019: Die gepatchte Firmware ist 0.00.89_FW_200_Askey (Patch bestätigt nach Herunterladen der Firmware)
    1. November 2019: Patch-Bereitstellung abgeschlossen
Tool herunterladen