
Apache Struts 2.0 RCE-Schwachstelle – Erlaubt einem Angreifer, Betriebssystembefehle in eine Webanwendung über den Content-Type-Header einzuschleusen.
Apache Struts 2.0 RCE-Sicherheitslücke
Dies ist ein Skript zur Ausnutzung von CVE-2017-5638 - Es ermöglicht einem Angreifer, über den Content-Type-Header Betriebssystembefehle in eine Webanwendung einzuschleusen. Apache Struts 2 ist ein Open-Source-Webanwendungsframework zur Entwicklung von Java-EE-Webanwendungen. Es nutzt und erweitert die Java Servlet API, um Entwickler zu ermutigen, eine Model-View-Controller (MVC)-Architektur zu verwenden.
In der letzten Märzwoche 2017 veröffentlichte ein Apache-Struts-Hacker mit dem Namen "Nike Zheng" einen öffentlichen Proof-of-Concept-Exploit, der zeigt, wie einfach jemand Betriebssystembefehle auf einem anfälligen Apache-Struts-2-Server remote ausführen kann.
Die Sicherheitslücke CVE-2017-5638 - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5638 - ermöglicht eine nicht authentifizierte Remote Code Execution (RCE) über einen speziell präparierten Content-Type-Wert in einer HTTP-Anfrage. Ein Angreifer kann einen ungültigen Wert für Content-Type erstellen, der dazu führt, dass die anfällige Software eine Ausnahme auslöst. Wenn die Software die Fehlermeldung für die Anzeige vorbereitet, führt ein Fehler im Apache Struts Jakarta Multipart Parser dazu, dass der schädliche Content-Type-Wert ausgeführt statt angezeigt wird.
Seit der Veröffentlichung dieses öffentlichen Exploits wurde eine große Anzahl von Scans beobachtet, die nach anfälligen Apache-Servern suchen. Da der Exploit sehr einfach auszuführen ist, kann jeder anfällige Maschinen mühelos remote ausnutzen. Daher wurden häufige Exploits nach der großen Anzahl von Scans gemeldet.
Einer unserer Kunden wollte, dass wir alle ihre IPs scannen, da sie weitgehend das anfällige Apache Struts 2-Framework verwendeten und keine genauen Aufzeichnungen darüber hatten, welche IPs (Webserver) ein anfälliges Apache-Framework ausführten. Es waren fast tausend IPs zu testen. Der Kunde verlangte, alle anfälligen Domains zusammen mit der Information einzureichen, ob es sich um einen Linux- oder Windows-Server handelt. Um die mühsame Aufgabe des Einzelscannens jeder IP zu vermeiden, schrieb ich ein kleines Skript.
Das Skript kombiniert die folgenden Funktionen/Aufgaben:
Liest die anfälligen Domainnamen nacheinander aus der Datei, die die Domainliste enthält.
Nutzt den offiziellen Exploit zur Überprüfung anfälliger Server.
Führt den Exploit aus und prüft, ob es sich um einen Windows- oder Linux-Server handelt.