
CENG 325 - Grundlagen der Informationssicherheit und Privatsphäre
Gruppenmitglieder
@canumay @aslihann @ezgigucuyener @mburakdonmez
Referenzen
Exploit DB - Apache Tika-server < 1.18 - Command Injection
Rhino Security Labs - Exploiting CVE-2018-1335: Command Injection in Apache Tika
Haftungsausschluss
Der Exploit-Code wurde vom Cybersicherheitsforscher David Yesland @Daveysec geschrieben und sollte nur für Bildungszwecke verwendet werden.
a. Eine kurze Beschreibung der Schwachstelle
b. Die Art und Weise, wie die Schwachstelle ausgenutzt wird
Welche Arten von Angriffen können nach dem Auslösen der Schwachstelle durchgeführt werden: Nach dem Auslösen der Schwachstelle können wir leicht eine Reverse Shell erstellen, und mit dieser Shell können wir im Grunde alle Befehle ausführen, die dem Benutzer des Apache Tika-Servers zur Verfügung stehen.
Wie nutzt ein Angreifer mit der Schwachstelle anfällige Systeme aus: Zunächst sollte der Angreifer feststellen, ob der Server eine anfällige Version des Apache Tika-Servers ausführt. Dann erstellt der Angreifer einen bösartigen HTTP-Header und den Jscript-Code, bevor er eine PUT-Anfrage an den anfälligen HTTP-Endpunkt sendet, was dazu führt, dass der Apache Tika-Server den schädlichen Code mit seiner eigenen Funktionalität ausführt.
Wird die Schwachstelle in Exploit-Kits verwendet: Ja, diese Schwachstelle ist im Metasploit-Exploit-Kit verfügbar.
a. Finden oder erstellen Sie einen Exploit-Code, der die Schwachstelle ausnutzt
b. Heben Sie die anfälligen Code-Teile hervor und erklären Sie, warum sie anfällig sind
Der Apache Tika-Server erstellt einen auszuführenden Befehl mit den vom Benutzer in der Anfrage bereitgestellten Werten, um OCR auf Bildern auszuführen. Dies ermöglicht es Benutzern, den Befehl zu manipulieren und schädlichen Code auszuführen. In diesem Fall holt „config.getTesseractPath()“ den „X-Tika-OCRTesseractPath“- Header und fügt ihn an den Anfang des Befehls. Obwohl die Zeichenkette „tesseract.exe“ an das Ende des vom Benutzer bereitgestellten Pfades angehängt wird, kann der Benutzer seinen Pfad mit „ “ “ (doppelte Anführungszeichen) umschließen, um die nachfolgende Zeichenkette „tesseract.exe“ zu verwerfen. Dies ermöglicht es dem Benutzer, jede ausführbare Datei auf dem Server auszuführen.
Der erstellte Befehl:
"calc.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika7317860646082338953.tmp -l eng -psm 1 txt -c preserve_interword_spaces=0
Die in Windows integrierte CScript.exe ist eine Skriptsprache, die einen Dateinamen für ein Skript entgegennimmt, es ausführt und die anderen Argumente ignoriert. Wenn wir ein für das CScript erstelltes Skript bereitstellen können, können wir es auf dem Server ausführen. Der Apache Tika-Server nimmt unser im Body bereitgestelltes Bild und speichert es in einer temporären Datei, um die OCR auszuführen. Anstatt also ein Bild-Binary zu senden, können wir direkt eine Zeichenkette senden, und die Zeichenkette wird so gespeichert, als ob sie ein Binary wäre. Der Tika-Server prüft das Binary jedoch darauf, ob es ein Bild ist, außer beim Dateityp jp2, in diesem Fall wird es direkt gespeichert. Dies wird dann als Argument an die CScript-Ausführbare übergeben. Aber die Dateierweiterung wird immer noch „.tmp“ sein, aber wir benötigen eine „.JScript“- oder „.vbs“-Erweiterung. Um dies zu umgehen, können wir dem CScript sagen, dass es „JScript“ unabhängig von der Dateierweiterung ausführen soll. Der Tika-Server übergibt außerdem „config.getPageSetMode()“ an den Befehl, der vom Benutzer im Header „X-Tika-OCRLanguage“ gesendet wird. Wenn wir ihn durch die Zeichenkette „//E:Jscript“ ersetzen, führt das CScript das Skript als JScript aus, unabhängig von der Dateierweiterung. Und schließlich wird die im Body bereitgestellte Zeichenkette die Nutzlast sein, die ausgeführt wird. Sie kann auch eine weitere Konsole aufrufen, um vollen Zugriff auf die System-Shell zu erhalten.
Der endgültig erstellte Befehl:
"cscript.exe"tesseract.exe C:\Users\Test\AppData\Local\Temp\apache-tika3299124493942985299.tmp C:\Users\Test\AppData\Local\Temp\apache-tika7317860646082338953.tmp -l //E:Jscript -psm 1 txt -c preserve_interword_spaces=0
Eine einfache Nutzlast zum Aufrufen der Shell in Jscript:
var oShell = WScript.CreateObject("WScript.Shell");
var oExec = oShell.Exec('cmd /c calc.exe');
a. Führen Sie den von Ihnen gefundenen oder erstellten Exploit-Code aus:
Apache Tika Server 1.17 läuft innerhalb der Ziel-VM.
Wir können vom Host-Rechner aus mit der IP „192.168.233.167“ auf den Server zugreifen.
Dann haben wir den erstellten Exploit-Code mit der Nutzlast „calc.exe“ ausgeführt, um den Rechner auf dem Zielrechner zu starten, um zu zeigen, dass wir in der Lage sind, beliebigen schädlichen Code auf dem Zielrechner auszuführen. Auch mit der Kraft einer Reverse Shell können wir eine interaktive Shell-Sitzung auf dem Zielrechner erstellen.
b. Was sind die Ergebnisse der Ausführung des Exploit-Codes:
Wie oben erläutert, führen wir mit diesem Exploit im Grunde das Rechnerprogramm auf dem Zielrechner aus, aber mit der Fähigkeit zur Remote Code Execution können wir im Zielrechner alles tun, was wir wollen, mit den Berechtigungen des Benutzers, der den Apache Tika Server ausführt. Beispielsweise können wir auf Benutzerdateien zugreifen, die Benutzeraktivität überwachen und sogar einen Screenshot machen oder ein Foto mit der Webcam aufnehmen, falls vorhanden.
c. Woran erkennt man, dass die Schwachstelle tatsächlich existiert:
Diese Schwachstelle wurde bereits von zuverlässigen Quellen wie dem NIST gemeldet, sogar von Apache selbst bestätigt und gepatcht. Aber um dies zu beweisen, können wir einen weiteren PoC mit Metasploit durchführen.
Zuerst haben wir bestätigt, dass die installierte Version eine anfällige Version ist.
Nachdem wir die Version bestätigt haben, können wir unsere Metasploit-Sitzung mit der richtigen IP und Port konfigurieren und den Befehl „check“ ausführen, um zu überprüfen, ob das Ziel anfällig ist.
Schließlich können wir den Befehl „exploit“ ausführen, um den Exploit zu starten, und bestätigen, dass die Shell aktiv ist, indem wir „dir“ in die Shell eingeben. Von hier aus ist die einzige Einschränkung die Benutzerberechtigung des Benutzers, der den Apache Tika-Server ausführt.