Spring4Shell RCE — критичная уязвимость в Java Spring Framework
Не успел мир отойти от Apache Log4j2 (CVE-2021–44228), как в сети появились сообщения о новых 0-day уязвимостях. В Spring Framework для Java обнаружено сразу несколько уязвимостей «нулевого дня», позволяющих, в том числе, выполнять произвольный код (RCE).
На данный момент выявлено 3 недостатка:
RCE в библиотеке Spring Cloud Function (CVE-2022–22963) — уязвимость актуальна для версии библиотеки до 3.2.3;
Уязвимость среднего уровня, которая может вызвать состояние DoS (CVE-2022–22950) — затрагивает версии Spring Framework с 5.3.0 по 5.3.16;
Spring4Shell в Spring Core — уязвимость внедрения классов для эксплуатации RCE (еще не присвоен идентификатор CVE).
Информация представлена в ознакомительных целях, не нарушайте законодательство.
Spring4Shell в Spring Core
Клиенты, использующие JDK версии 9 и новее, уязвимы для атаки удаленного выполнения кода из-за обхода CVE-2010–1622. Уязвимости подвержены все версии Spring Core (исправление еще не выпущено). Уязвимость затрагивает функции, использующие RequestMapping и параметры POJO (Plain Old Java Object).
Работа эксплоита сводится к отправке запроса с параметрами class.module.classLoader.resources.context.parent.pipeline.first.*, обработка которых при использовании WebappClassLoaderBase приводит к обращению к классу AccessLogValve. Указанный класс позволяет настроить логгер для создания произвольного jsp-файла в корневом окружении Apache Tomcat и записи в этот файл указанного атакующим кода. Созданный файл становится доступным для прямых запросов.
Результатом эксплуатации будет созданный shell.jsp, при обращении к которому можно выполнять произвольные команды на сервере, например:
# curl http://example.com/shell.jsp?cmd=whoami
Эксплойт уже доступен в паблике, но по этическим соображениям мы пока не будем публиковать PoC.
Разработчики еще не выпустили патч, но вы можете использовать Nemesida WAF, блокирующий попытки эксплуатации этой и других уязвимостей, включая техники обхода. Оставайтесь защищенными.