
Уязвимость CVE-2022-22965, известная как Spring4Shell, — это ошибка удалённого выполнения кода (RCE) в фреймворке Java Spring Core, присутствующая в версиях до 5.3.18 и 5.2.20. Данная уязвимость позволяет атакующему внедрить код и выполнить его удалённо на уязвимом сервере, эксплуатируя неправильную конфигурацию журналов Tomcat. Она была обнаружена в марте 2022 года и затрагивает приложения activeMQ, Spring MVC и Spring WebFlux, работающие с версией JDK >= 9.

Сразу убеждаемся, что у нас версия JDK >= 9; если нет — активируем её:

Предварительные требования ✔ Для работы эксплойта необходимы модули requests и BeautifulSoup. Устанавливаем их с помощью:
pip3 install bs4
pip3 install requests
Сканирование сети

Здесь у нас действительно есть сервис activeQM версии 5.17.3 в режиме прослушивания.
В нашей стратегии эксплуатации мы используем разработанный Python-скрипт под названием spring4shell.py, приложенный к этому проекту.
Цель этого скрипта: Этот Python-скрипт позволяет эксплуатировать уязвимость CVE-2022-22965, изменяя параметры журналирования Tomcat для внедрения веб-шелла в файлы журналов, что позволяет выполнять удалённые команды на скомпрометированном сервере.
Пояснение кода Python
Настройка вывода в терминал:
Класс settings адаптирует отображение в терминале в зависимости от выбранных параметров, используя цвета для разграничения информационных сообщений, предупреждений и ошибок.
Генерация случайных переменных:
Функции filename() и password() генерируют случайные шестнадцатеричные строки для защиты имени файла и пароля веб-шелла.
Эксплуатация уязвимости:
Скрипт отправляет запросы для изменения параметров журналирования Tomcat, внедряя фрагменты JSP-кода через журналы. Настраивая журналы на запись в каталог webapps/ROOT, каждая запись становится интерпретируемой как JSP-код.
Внедрённый файл журнала затем действует как веб-шелл, доступный через браузер для выполнения команд.
Взаимодействие с веб-шеллом:
Класс terminal открывает интерактивный интерфейс, позволяющий отправлять команды на скомпрометированный сервер. Команды передаются в параметре cmd, а ответы отображаются в терминале.
После выполнения скрипта предоставляется ссылка на веб-шелл: С помощью команды:
python3 spring4shell.py http://172.17.0.1

Мы получаем прямой доступ к оболочке нашего сервера activemq, чтобы выполнять все команды, какие пожелаем.
Конец эксплойта !!!