
Приложение на Spring MVC или Spring WebFlux, работающее на JDK 9+, может быть уязвимо к удалённому выполнению кода (RCE) через привязку данных (data binding). Конкретный эксплойт требует, чтобы приложение работало на Tomcat в виде WAR-развёртывания. Если приложение развёрнуто как исполняемый jar-файл Spring Boot, то есть по умолчанию, оно не уязвимо к данному эксплойту. Однако природа уязвимости более общая, и могут существовать другие способы её эксплуатации.
CVE-2022-22965 (Spring4Shell, SpringShell) — это уязвимость в Spring Framework, использующая функциональность привязки данных для связывания данных, хранящихся в HTTP-запросе, с определёнными объектами, используемыми приложением. Ошибка существует в методе getCachedIntrospectionResults, который можно использовать для получения несанкционированного доступа к таким объектам, передавая имена их классов через HTTP-запрос. Это создаёт риски утечки данных и удалённого выполнения кода при использовании особых классов объектов. Данная уязвимость похожа на давно закрытую CVE-2010-1622, где в качестве исправления были добавлены проверки имени класса, чтобы имя не совпадало с classLoader или protectionDomain.
Согласно системе CVSSv3, эта уязвимость оценивается как КРИТИЧЕСКАЯ степень серьёзности.
Ниже приведены возможности обнаружения CVE-2022-22965, которые можно использовать для выявления уязвимости.
Текущие условия возникновения уязвимости (как указано в уведомлении Spring об уязвимости) можно резюмировать следующим образом:
python3 exploit.py http://10.10.10.10/
Примечание: завершающий слэш здесь очень важен!
Найдите «action» контактной формы (единственный доступный нам POST-запрос).
<form id="contactForm" action="/" method="post">
Значение action — «/», то есть наш целевой URL будет просто: http://10.10.10.10/