Spring4Shell - PoC
CVE - 2022 - 22965
Затронутые версии:
- Spring Framework версии 5.3.0–5.3.17, 5.2.0–5.2.19 и более старые версии
- Java JDK 9
- Apache Tomcat версий ниже 10.0.20, 9.0.62 и 8.5.78
- Затронуты только приложения, упакованные как традиционный WAR с зависимостью spring-webmvc или spring-webflux и развернутые в отдельном Servlet-контейнере
Описание
- Проблема может быть повышена путем манипуляции classLoader
- Неправильное связывание данных, используемое для заполнения объекта из параметров запроса (аннотация Request Mapping), является причиной этой уязвимости
- Атакующие могут загружать произвольные классы и внедрять произвольный код, который может быть выполнен приложением
- Подобная уязвимость (CVE-2010-1622) была раскрыта ранее, и были применены патчи для ограничения
class.classLoader и class.protectionDomain
- Но в JDK9 был представлен новый метод
class.getMethod(), который обходит это ограничение, используя class.module.classLoader для доступа к любому дочернему свойству объекта класса
Воздействие
- Успешная эксплуатация этой уязвимости может привести к выполнению произвольного кода на уязвимой машине.
Тестовое приложение
docker build . -t spring4shell-poc-app
Или получите Docker-образ из [gokul2/spring4shell-poc]
docker pull gokul2/spring4shell-poc-app
docker run -p 8080:8080 spring4shell-poc-app
- Приложение теперь будет доступно по адресу localhost:8080.
- Запустите файл exploit.py