
The Super Vulnerable Java Application (SVJA), comme démontré dans le Roniel and DaRon Podcast Show, est une application Apache Struts conçue pour contenir un certain nombre de vulnérabilités très courantes. Contrairement aux autres logiciels « volontairement vulnérables », ce logiciel est conçu pour imiter les vulnérabilités courantes telles qu'elles sont souvent observées, plutôt que de manière trop simpliste ou davantage « capture the flag ». Ce logiciel est mis à jour et enrichi de manière semi-régulière, avec des démonstrations de certaines de ses vulnérabilités dans le cadre du podcast.
L'application Java super vulnérable RDPS n'est rien d'autre que cela -- une application Java super vulnérable créée au bénéfice de tous pour montrer une variété de vulnérabilités courantes, souvent « complexes ». Ce logiciel a été créé dans le cadre de l'émission Roniel et DaRon Podcast Show (https://www.youtube.com/channel/UCbj1JFcSJeTuf3qf9GPRemA) afin que nous puissions discuter et montrer un certain nombre de vulnérabilités que nous rencontrions fréquemment, d'une manière plus réaliste que ce que vous verrez avec les nombreux autres outils en ligne. Pour voir des exemples d'exploitation, veuillez regarder notre podcast.
Veuillez vous rappeler que cette application est conçue pour être hautement vulnérable à un certain nombre de choses. Soyez prudent quant à l'endroit où vous l'exécutez, limitez qui peut y accéder (le serveur Tomcat ne doit écouter que sur localhost et uniquement sur votre machine personnelle). Nous ne sommes pas responsables si vous ne savez pas prendre soin de vos affaires, laissant votre copie exposée au vent pour que tout le monde puisse voler vos données ou compromettre gravement votre machine. Nous vous recommandons d'exécuter ceci dans une machine virtuelle (VM) sécurisée, ne contenant rien de sensible et sans connectivité à Internet. Si vous ne sécurisez pas correctement le système qui exécute ceci ainsi que l'instance elle-même, vous risquez fortement de passer une mauvaise journée. Comme des relations charnelles occasionnelles sans protections adéquates, vous ne faites que vous mettre dans une position que vous regretterez un jour. Considérez-vous comme prévenu, mais encouragé à jouer ;-)
Le SVJA RDPS est composé d'une application Java Struts 2 exécutant react. Il se construit simplement en exécutant : mvn clean package
Cela crée un WAR dans target -- svja.war. Placez simplement le WAR dans votre dossier webapps de tomcat. Dans une installation Tomcat par défaut, allez à http://127.0.0.1:8080/svja pour accéder à l'application.
Si vous utilisez Tomcat 10 ou supérieur, veuillez ajouter <Loader jakartaConverter="TOMCAT" /> à votre fichier de configuration context.xml de Tomcat.
Pour ceux qui veulent l'utiliser pour mettre les choses en route, la racine (http://127.0.0.1:8080/svja) propose désormais Swagger UI et une spécification OpenAPI de base (http://127.0.0.1:8080/svja/specification.yaml) que vous pouvez utiliser. Notez que la spécification, et donc Swagger UI, n'effleure que la surface (c'est à cela que servent la désérialisation non sécurisée, etc., n'est-ce pas ?).
Ci-dessous figurent quelques-unes des vulnérabilités majeures du système, par action.
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
Après l'authentification, vous pouvez appeler n'importe quelle action en utilisant soit JSON, soit 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//"
}
N'oubliez pas de modifier le 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
N'oubliez pas de modifier le 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
}
Ceci est un travail en cours et nous avons de nombreuses autres vulnérabilités et fonctionnalités prévues (notamment un frontend super vulnérable et d'autres applications super vulnérables) -- revenez nous voir tous les deux ou trois mois et regardez l'émission Roniel et DaRon Podcast Show pour des mises à jour, des exemples d'exploitation et d'autres idées. Nous vous encourageons également à essayer de comprendre comment atténuer ou corriger les vulnérabilités... casser des choses est facile... c'est l'atténuation, la correction et la sécurisation qui sont difficiles. Bonne chance et bonne chasse !