Уязвимость SpringShell RCE: Руководство по обнаружению CVE-2022-22965

31 марта 2022 года были публично раскрыты уязвимости в Spring Framework для Java.

Содержание

Spring Framework - это наиболее широко используемый легкий фреймворк с открытым исходным кодом для Java. В Java Development Kit (JDK) версии 9.0 или более поздней, удаленный злоумышленник может получить объект AccessLogValve через функцию привязки параметров фреймворка и использовать вредоносные значения полей для запуска механизма конвейера и записи в файл по произвольному пути, если выполняются определенные условия.

Уязвимость в Spring Core - называемая в сообществе безопасности SpringShell или Spring4Shell - может быть использована, когда злоумышленник отправляет специально созданный запрос на веб-сервер, работающий на фреймворке Spring Core. Другие уязвимости, обнаруженные в том же компоненте, менее критичны и не отслеживаются в рамках данного блога.

Затронутые системы обладают следующими характеристиками:

  • Запуск JDK 9.0 или более поздней версии.
  • Spring Framework версий 5.3.0 - 5.3.17, 5.2.0 - 5.2.19 и более ранние версии
  • Apache Tomcat в качестве контейнера сервлетов:
    • Упакован как традиционный веб-архив Java (WAR) и развернут в отдельном экземпляре Tomcat; типичные развертывания Spring Boot с использованием встроенного контейнера сервлетов или реактивного веб-сервера не затрагиваются.
    • Tomcat имеет зависимости spring-webmvc или spring-webflux

Любая система, использующая JDK 9.0 или более позднюю версию и использующая Spring Framework или производные фреймворки, должна считаться уязвимой. Для определения уязвимых систем можно использовать следующую не вредоносную команду:

curl host:port/path?class.module.classLoader.URLs%5B0%5D=0

Хост, который возвращает ответ HTTP 400, следует считать уязвимым к атаке, подробно описанной в приведенном ниже доказательстве концепции (POC). Обратите внимание, что хотя этот тест является хорошим индикатором восприимчивости системы к атаке, любая система в рамках перечисленных выше систем, подверженных воздействию, все равно должна считаться уязвимой.

Описание атаки

CVE-2022-22965 затрагивает функции, использующие аннотацию отображения запросов и параметры Plain Old Java Object (POJO) в Spring Framework. Код POC создает контроллер, который, будучи загруженным в Tomcat, обрабатывает HTTP-запросы.

Единственный общедоступный рабочий POC специфичен для свойств логирования сервера Tomcat через модуль ClassLoader в кэше propertyDescriptor. Злоумышленник может обновить класс AccessLogValve с помощью модуля, чтобы создать веб-оболочку в корневом каталоге Tomcat под названием shell.jsp. Затем злоумышленник может изменить стандартные журналы доступа на файл по своему усмотрению.

Изменения в AccessValveLog могут быть достигнуты злоумышленником, который может использовать HTTP-запросы для создания .jsp-файла в корневом каталоге службы. В приведенном ниже примере каждый параметр GET задается как свойство объекта Java. Каждый GET-запрос затем выполняет Java-код, похожий на приведенный ниже пример, где конечный сегмент "setPattern" будет уникальным для каждого вызова (например, setPattern, setSuffix, setDirectory и другие).

Добавить комментарий