На прошлой неделе исследователи обнаружили в Spring – Java-фреймворке с открытым исходным кодом — критическую уязвимость CVE-2022-22965. С ее помощью атакующий может удаленно выполнить произвольный код на веб-сервере, что в сочетании с популярностью фреймворка Spring делает CVE-2022-22965 крайне опасной. По аналогии с нашумевшей Log4Shell обнаруженная уязвимость получила название Spring4Shell.
Технические детали CVE-2022-22965 и CVE-2022-22963
Уязвимость CVE-2022-22965 (Spring4Shell, SpringShell) использует функцию связывания данных, позволяющую привязать данные в HTTP-запросе к полям неких объектов приложения. Ошибка кроется в реализации метода getCachedIntrospectionResults: он может быть использован для получения несанкционированного доступа к этим объектам путем передачи имен их классов через данный HTTP-запрос. Это, в свою очередь, может привести к раскрытию данных или к удаленному выполнению кода при использовании специальных классов объектов.
Эта уязвимость схожа с давно закрытой CVE-2010-1622, где в качестве исправления были введены проверки имени, чтобы оно не соответствовало classLoader и protectionDomain. Однако в новой версии JDK появились альтернативные возможности эксплуатации, например через функционал Java 9 Platform Module System.
Так, например, злоумышленник может переписать конфигурацию журналирования Tomcat, чтобы в дальнейшем загрузить веб-шелл JSP и через него исполнять любые команды на сервере, где установлена уязвимая версия фреймворка.
Уязвимая конфигурация:
- JDK версии 9+;
- Apache Tomcat для обслуживания приложения;
- Spring Framework версий от 5.3.0 до 5.3.17 и от 5.2.0 до 5.2.19 и ниже;
- приложение собрано как WAR-файл.
С Java-фреймворком Spring связана еще одна уязвимость класса RCE — CVE-2022-22963. Эта уязвимость в функции роутинга Spring Cloud Function позволяет провести инъекцию кода через Spring Expression Language (SpEL) путем добавления в HTTP-запрос специального заголовка spring.cloud.function.routing-expression. SpEL — это специальный язык выражений, созданный для Spring Framework, который поддерживает запросы и управление графом объектов во время выполнения. CVE-2022-22963 также может быть использована для удаленного исполнения кода.
Уязвимая конфигурация:
- Spring Cloud Function 3.1.6, 3.2.2 и более старые версии
Противодействие эксплуатации уязвимостей в Spring
Уязвимость CVE-2022-22965 исправлена в новой версии 2.6.6 фреймворка Spring. Информацию можно найти на официальном сайте.
Для исправления CVE-2022-22963 также необходимо установить новые версии Spring Cloud Function. Информация представлена на сайте VMware.
Для детектирования попыток эксплуатации уязвимостей клиентам «Лаборатории Касперского» необходимо убедиться, что включены модули Advanced Exploit Prevention и Network Attack Blocker. Некоторые из техник, используемых при эксплуатации, могут быть использованы и в других эксплойтах, которые мы детектируем, поэтому имена вердиктов могут отличаться.
Индикаторы заражения (IoC)
Вердикты
PDM:Exploit.Win32.Generic
UMIDS:Intrusion.Generic.Agent.gen
Intrusion.Generic.CVE-*.*
MD5-хэши эксплойтов
7e46801dd171bb5bf1771df1239d760c — shell.jsp (CVE-2022-22965)
3de4e174c2c8612aebb3adef10027679 — exploit.py (CVE-2022-22965)
Детектирование эксплуатации уязвимости при помощи Kaspersky EDR Expert
Уязвимость Spring4Shell (CVE-2022-22965): описание и противодействие