CVE-2018-1273

VMware Tanzu Spring Data Commons

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

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

2022-03-25

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

Spring Data Commons contains a property binder vulnerability which can allow an attacker to perform remote code execution.

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

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

Уязвимость (CVE-2018-1273) в модуле привязки данных (property binder) Spring Data Commons позволяет злоумышленнику передать специально сформированные данные в параметры запроса к приложению. При десериализации этих данных может произойти выполнение произвольного кода (RCE) на сервере. Атака возможна через HTTP-запросы к уязвимым эндпоинтам приложения.

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

Основное решение — обновить библиотеку Spring Data Commons до исправленной версии.

  • Для Spring Data Commons 1.13.x и 2.0.x: Обновитесь до версии 1.13.12 или 2.0.7 соответственно.
  • Для проектов, использующих Spring Boot: Обновите зависимость Spring Boot.
    • Spring Boot 1.5.x: обновитесь до 1.5.12.RELEASE или выше.
    • Spring Boot 2.0.x: обновитесь до 2.0.3.RELEASE или выше.

Пример для Maven (pom.xml):

<properties>
    <spring-data-releasetrain.version>Lovelace-SR7</spring-data-releasetrain.version>
</properties>

Или явно укажите исправленную версию для spring-data-commons:

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-commons</artifactId>
    <version>2.0.7.RELEASE</version>
</dependency>

После изменения зависимостей пересоберите и переразверните приложение.

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

Если немедленное обновление невозможно, рассмотрите следующие меры:

  1. Настройка WAF (Web Application Firewall):

    • Добавьте правило для блокировки HTTP-запросов, содержащих в параметрах подозрительные шаблоны, характерные для эксплуатации этой уязвимости (например, строки, содержащие class.*, Class.*, .get в сочетании со скобками). Конкретное правило зависит от используемого WAF.
  2. Валидация входных данных на уровне приложения:

    • Если есть доступ к исходному коду, усильте валидацию всех входящих параметров, особенно тех, которые привязываются к объектам через @RequestParam или @RequestBody. Используйте белые списки разрешенных символов.
  3. Ограничение сетевого доступа:

    • Обеспечьте, чтобы доступ к уязвимому приложению был только из доверенных сетей (например, через внутренний балансировщик нагрузки или VPN). Ограничьте входящие соединения с помощью групп безопасности (Security Groups) или брандмауэра.