CVE-2022-22965

VMware Spring Framework

ВЫСОКАЯ ВЕРОЯТНОСТЬ

Дата обнаружения

2022-04-04

Официальное описание

Spring MVC or Spring WebFlux application running on JDK 9+ may be vulnerable to remote code execution (RCE) via data binding.

🛡️
Технический анализ и план устранения

Суть уязвимости

Уязвимость (Spring4Shell) позволяет злоумышленнику выполнить произвольный код на сервере, отправив специально сформированный HTTP-запрос (например, POST) с параметрами, которые манипулируют процессом data binding в Spring MVC/WebFlux. Для эксплуатации необходимо, чтобы приложение было развернуто на Tomcat как WAR-файл и использовало JDK 9 или выше.

Как исправить

Основной метод — обновление Spring Framework до защищенной версии.

  1. Для Spring Framework 5.3.x — обновитесь до версии 5.3.18+.
  2. Для Spring Framework 5.2.x — обновитесь до версии 5.2.20+.
  3. Для Spring Boot 2.6.x — обновитесь до версии 2.6.6+ (которая включает Spring Framework 5.3.18).
  4. Для Spring Boot 2.5.x — обновитесь до версии 2.5.12+ (которая включает Spring Framework 5.3.18).

Пример для Linux (обновление через менеджер пакетов Maven/Gradle): Обновите версию Spring в файле конфигурации вашего проекта (pom.xml для Maven или build.gradle для Gradle).

<!-- Пример для Maven (Spring Boot 2.6.x) -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.6</version> <!-- Исправленная версия -->
</parent>
// Пример для Gradle (Spring Boot 2.6.x)
plugins {
    id 'org.springframework.boot' version '2.6.6' // Исправленная версия
}

После изменения конфигурации пересоберите и переразверните приложение.

Временное решение

Если немедленное обновление невозможно, примените одно из следующих решений:

  1. Добавление глобального контроллера: Создайте класс @ControllerAdvice, который регистрирует @InitBinder для всех контроллеров, чтобы запрещать привязку полей определенных типов (например, Class). ```java import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.InitBinder;

    @ControllerAdvice public class BinderControllerAdvice { @InitBinder public void setAllowedFields(WebDataBinder dataBinder) { String[] denylist = new String[]{"class.", "Class.", ".class.", ".Class."}; dataBinder.setDisallowedFields(denylist); } } ``` Пересоберите и перезапустите приложение.

  2. Настройка WAF (Web Application Firewall): Добавьте правила для блокировки HTTP-запросов, содержащих в параметрах подозрительные строки, такие как class.*, Class.*, *.class.*, *.Class.*.

  3. Понижение версии JDK: Если позволяет инфраструктура, временно разверните приложение на JDK 8. Это полностью блокирует данный вектор атаки.