
La Super Vulnerable Java Application (SVJA), como se demuestra en el Roniel and DaRon Podcast Show, es una aplicación Apache Struts diseñada para contener una serie de vulnerabilidades muy comunes. A diferencia de otro software "deliberadamente vulnerable", este software está diseñado para imitar las vulnerabilidades comunes de la misma manera en que suelen verse, en lugar de hacerlo de forma excesivamente simplista o al estilo "capture the flag". Este software se actualiza y se amplía de forma semi-rutinaria, con demostraciones de algunas de las vulnerabilidades como parte del podcast.
La RDPS Super Vulnerable Java Application es exactamente eso: una aplicación Java súper vulnerable creada para que todos puedan ver una variedad de vulnerabilidades comunes y, a menudo, "complejas". Este software se creó como parte del Roniel and DaRon Podcast Show (https://www.youtube.com/channel/UCbj1JFcSJeTuf3qf9GPRemA) para poder analizar y mostrar varias vulnerabilidades que encontrábamos con frecuencia de una manera más realista que la que verás con muchas otras herramientas en línea. Para ver ejemplos de explotación, mira nuestro podcast.
Por favor, recuerda que esta aplicación está diseñada para ser altamente vulnerable a varias cosas. Ten cuidado con dónde la ejecutas, limita quién puede acceder a ella (el servidor Tomcat solo debe escuchar en localhost y solo en tu máquina personal). No somos responsables si no puedes cuidar adecuadamente tus cosas, dejando tu copia expuesta para que cualquiera pueda robarte tus datos o comprometer gravemente tu máquina. Recomendamos que ejecutes esto en una máquina virtual (VM) que esté asegurada, que no tenga nada sensible y que no tenga conectividad a internet. No asegurar correctamente el sistema que ejecuta esto y su instancia probablemente resultará en un mal día para ti. Como las relaciones carnales casuales sin la protección adecuada, solo te estás poniendo en una posición que algún día lamentarás. Considérate advertido, pero animado a jugar ;-)
La RDPS SVJA se compone de una aplicación Java Struts 2 que ejecuta React. Se construye simplemente ejecutando: mvn clean package
Esto crea un WAR en target -- svja.war. Simplemente coloca el WAR en la carpeta webapps de tu Tomcat. En una instalación predeterminada de Tomcat, ve a http://127.0.0.1:8080/svja para acceder a la aplicación.
Si estás usando Tomcat 10 o superior, agrega <Loader jakartaConverter="TOMCAT" /> a tu archivo de configuración context.xml de Tomcat.
Para aquellos que quieran usarla para poner las cosas en marcha, la raíz (http://127.0.0.1:8080/svja) ahora incluye Swagger UI y una especificación OpenAPI básica (http://127.0.0.1:8080/svja/specification.yaml) que puedes usar. Ten en cuenta que la especificación, y por tanto Swagger UI, solo araña la superficie (de eso se trata la deserialización insegura, etc., ¿verdad?).
A continuación se presentan algunas de las vulnerabilidades principales del sistema, por acción.
admin:admin (application administrator account)
bill:baker (privileged user account)
bob:barker (basic, read-only user account)
/api/authenticate?user.username=admin&user.password=admin
/api/authenticate?user.username=bill&user.password=baker
/api/authenticate?user.username=bob&user.password=barker
Después de autenticarte, accede a la acción que quieras usando JSON o Struts
GET /svja/api/authenticate?user.username=bill&user.password=baker HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Length: 0
DNT: 1
Connection: close
Cache-Control: max-age=0
GET /svja/api/authenticate HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 61
DNT: 1
Connection: close
Cache-Control: max-age=0
{
"user": {
"username": "bill",
"password": "baker"
}
}
GET /svja/api/authenticate/federated?user.username=bill%40rdps.local&usernameTranslationRegex=%2F%40rdps%5B.%5Dlocal%2F%2F HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Length: 0
DNT: 1
Connection: close
Cache-Control: max-age=0
GET /svja/api/authenticate/federated HTTP/1.1
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Host: localhost
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 61
DNT: 1
Connection: close
Cache-Control: max-age=0
{
"user": {
"username": "[email protected]"
},
"usernameTranslationRegex": "/@rdps[.]local//"
}
Recuerda cambiar el svjatoken
GET /svja/api/projects?projectId=1 HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Cookie: svjatoken=RaMu5vhFBgL8goV6Ja1ffLnpmcixNuAL7fUP;
Cache-Control: max-age=0
Recuerda cambiar el svjatoken
GET /svja/api/projects HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: application/json, text/plain, */*
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 19
DNT: 1
Connection: close
Cookie: svjatoken=RaMu5vhFBgL8goV6Ja1ffLnpmcixNuAL7fUP;
Cache-Control: max-age=0
{
projectId:1
}
Esto es un trabajo en curso y tenemos muchas más vulnerabilidades y cosas planeadas (incluido un frontend súper vulnerable y otras aplicaciones súper vulnerables). Vuelve a consultarnos cada par de meses y mira el Roniel and DaRon Podcast Show para ver actualizaciones, ejemplos de explotación y otras ideas. También te animamos a intentar descubrir cómo mitigar o corregir las vulnerabilidades... romper cosas es fácil... mitigar, corregir y asegurar es lo difícil. ¡Buena suerte y feliz caza!