CVE-2022-22963
VMware Tanzu Spring Cloud
2022-08-25
When using routing functionality in VMware Tanzu's Spring Cloud Function, it is possible for a user to provide a specially crafted SpEL as a routing-expression that may result in remote code execution and access to local resources.
Технический анализ и план устранения
Суть уязвимости
CVE-2022-22963 — это критическая уязвимость в библиотеке Spring Cloud Function (версии до 3.1.7 и 3.2.3), связанная с небезопасной обработкой выражений SpEL (Spring Expression Language).
Проблема заключается в функционале маршрутизации (Routing Function). Злоумышленник может передать специально сформированное SpEL-выражение через HTTP-заголовок spring.cloud.function.routing-expression. Поскольку это выражение вычисляется на стороне сервера без надлежащей проверки, атакующий получает возможность выполнить произвольный код (RCE) в контексте приложения и получить доступ к локальным ресурсам системы.
Как исправить
Основным способом устранения уязвимости является обновление зависимостей Spring Cloud Function в проекте до безопасных версий.
- Если вы используете Maven, обновите версию
spring-cloud-function-contextв файлеpom.xmlдо 3.1.7 или 3.2.3 (и выше):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-function-context</artifactId>
<version>3.2.3</version>
</dependency>
- Если вы используете Gradle, обновите версию в
build.gradle:
implementation 'org.springframework.cloud:spring-cloud-function-context:3.2.3'
- Пересоберите проект и разверните обновленный артефакт:
mvn clean package
- Убедитесь, что в итоговой сборке отсутствуют уязвимые JAR-файлы. Проверить текущую версию в работающем окружении можно командой:
find . -name "spring-cloud-function-context-*.jar"
Временные меры
Если немедленное обновление библиотеки невозможно, примените следующие компенсирующие меры контроля:
-
Настройте правила на Web Application Firewall (WAF) для блокировки входящих HTTP-запросов, содержащих заголовок
spring.cloud.function.routing-expression. -
Если функционал динамической маршрутизации не используется, принудительно отключите или ограничьте обработку данного заголовка на уровне API Gateway или Reverse Proxy (Nginx, HAProxy). Пример для Nginx:
if ($http_spring_cloud_function_routing_expression != "") {
return 403;
}
-
Запустите приложение от имени пользователя с минимальными привилегиями в изолированном контейнере, чтобы ограничить радиус поражения в случае эксплуатации.
-
Обновите сигнатуры систем обнаружения вторжений (IDS/IPS) для выявления попыток передачи Java-объектов (например,
java.lang.Runtime) внутри HTTP-заголовков.