CVE-2022-22947
VMware Spring Cloud Gateway
2022-05-16
Spring Cloud Gateway applications are vulnerable to a code injection attack when the Gateway Actuator endpoint is enabled, exposed and unsecured.
Технический анализ и план устранения
Суть уязвимости
Уязвимость (CVE-2022-22947) позволяет удаленному злоумышленнику выполнить произвольный код на сервере, если:
* Используется уязвимая версия VMware Spring Cloud Gateway (3.1.0, 3.0.0-3.0.6).
* Включена и доступна извне конечная точка Actuator (/actuator/gateway).
* Конечная точка Actuator не защищена аутентификацией.
Атакующий отправляет специально сформированный HTTP-запрос (POST) на эндпоинт /actuator/gateway/routes/{id}, который содержит вредоносный код SpEL (Spring Expression Language) в теле запроса. При последующем обращении к маршруту этот код выполняется на сервере.
Как исправить
Основное решение — обновление до исправленной версии Spring Cloud Gateway.
-
Обновите зависимости Spring Cloud Gateway в вашем проекте:
- Для версий 3.1.x: обновитесь до 3.1.1+.
- Для версий 3.0.x: обновитесь до 3.0.7+.
-
Если вы используете Maven, обновите версию в
pom.xml:xml <properties> <spring-cloud.version>2021.0.1</spring-cloud.version> <!-- Для 3.1.x --> <!-- ИЛИ --> <spring-cloud.version>2020.0.7</spring-cloud.version> <!-- Для 3.0.x --> </properties>Затем выполните:bash mvn clean packageПересоберите и перезапустите приложение. -
Если вы используете Spring Boot, убедитесь, что используется исправленная версия
spring-boot-starter-parent(2.6.6 или 2.5.12).
Временное решение
Если немедленное обновление невозможно, выполните следующие шаги:
-
Отключите эндпоинт Actuator Gateway, если он не требуется. В файле конфигурации
application.propertiesилиapplication.ymlдобавьте:properties # application.properties management.endpoint.gateway.enabled=falseИли:yaml # application.yml management: endpoint: gateway: enabled: false -
Ограничьте доступ к эндпоинтам Actuator только с доверенных IP-адресов с помощью правил брандмауэра или конфигурации Spring Security.
-
Защитите эндпоинты Actuator аутентификацией и авторизацией через Spring Security. Убедитесь, что доступ к
/actuator/*возможен только для привилегированных пользователей. -
Рассмотрите возможность использования WAF (Web Application Firewall) для блокировки запросов, содержащих шаблоны SpEL-инъекций (например, строки, содержащие
${T(...)}или#{...}).