
Приложение The Super Vulnerable Java Application (SVJA), продемонстрированное в подкаст-шоу Roniel and DaRon, представляет собой приложение на базе Apache Struts, предназначенное для включения ряда наиболее распространённых уязвимостей. В отличие от других «намеренно уязвимых» программ, данное ПО имитирует распространённые уязвимости так, как они обычно встречаются на практике, а не в чрезмерно упрощённом виде или в духе «захвата флага» (capture the flag). Это ПО полурегулярно обновляется и дополняется, а демонстрации некоторых уязвимостей являются частью подкаста.
RDPS Super Vulnerable Java Application — это именно то, чем кажется: суперуязвимое Java-приложение, созданное на благо всех, чтобы можно было увидеть множество распространённых, зачастую «сложных» уязвимостей. Это ПО было создано в рамках подкаста Roniel and DaRon Podcast Show (https://www.youtube.com/channel/UCbj1JFcSJeTuf3qf9GPRemA), чтобы мы могли обсуждать и показывать ряд уязвимостей, с которыми мы часто сталкивались, более реалистично, чем это можно увидеть во многих других онлайн-инструментах. Примеры эксплуатации смотрите в нашем подкасте.
Помните, что это приложение намеренно сделано крайне уязвимым ко многим вещам. Будьте осторожны, где вы его запускаете, ограничьте круг тех, кто может получить к нему доступ (сервер Tomcat должен слушать только localhost и только на вашей личной машине). Мы не несём ответственности, если вы не можете должным образом позаботиться о своих вещах, оставив свою копию висеть на ветру, чтобы кто угодно мог украсть ваши данные или серьёзно скомпрометировать вашу машину. Мы рекомендуем запускать это в защищённой виртуальной машине (VM), на которой нет ничего чувствительного и которая не имеет подключения к интернету. Неспособность должным образом защитить систему, на которой это запущено, и сам экземпляр приложения, скорее всего, приведёт к плохому дню. Как и случайные плотские утехи без надлежащей защиты, вы сами ставите себя в положение, о котором когда-нибудь пожалеете. Считайте, что вы предупреждены, но приглашаем поиграть ;-)
RDPS SVJA состоит из Java-приложения на Struts 2, работающего с React. Оно собирается простым запуском: mvn clean package
В результате в target создаётся WAR-файл -- svja.war. Просто поместите его в папку webapps вашего Tomcat. В стандартной сборке Tomcat перейдите на http://127.0.0.1:8080/svja для доступа к приложению.
Если вы используете Tomcat 10 или выше, добавьте <Loader jakartaConverter="TOMCAT" /> в ваш конфигурационный файл context.xml.
Для тех, кто хочет с ходу начать работу, в корне (http://127.0.0.1:8080/svja) теперь есть Swagger UI и базовая спецификация OpenAPI (http://127.0.0.1:8080/svja/specification.yaml), которыми можно пользоваться. Обратите внимание, что спецификация, а значит и Swagger UI, лишь касается поверхности (ведь именно для этого и существует небезопасная десериализация, верно?).
Ниже перечислены некоторые основные уязвимости системы, сгруппированные по действиям.
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
После аутентификации обращайтесь к любому действию, используя JSON или 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//"
}
Не забудьте изменить 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
Не забудьте изменить 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
}
Это незавершённая работа, и у нас запланировано множество дополнительных уязвимостей и возможностей (включая суперуязвимый фронтенд и другие суперуязвимые приложения) — заходите к нам каждые пару месяцев и смотрите Roniel and DaRon Podcast Show, чтобы узнавать об обновлениях, примерах эксплуатации и других идеях. Мы также призываем вас попытаться понять, как смягчить или исправить уязвимости... ломать легко... сложно смягчать, исправлять и защищать. Удачи и приятной охоты!