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 в проекте до безопасных версий.

  1. Если вы используете 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>

  1. Если вы используете Gradle, обновите версию в build.gradle:
implementation 'org.springframework.cloud:spring-cloud-function-context:3.2.3'

  1. Пересоберите проект и разверните обновленный артефакт:
mvn clean package

  1. Убедитесь, что в итоговой сборке отсутствуют уязвимые JAR-файлы. Проверить текущую версию в работающем окружении можно командой:
find . -name "spring-cloud-function-context-*.jar"

Временные меры

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

  1. Настройте правила на Web Application Firewall (WAF) для блокировки входящих HTTP-запросов, содержащих заголовок spring.cloud.function.routing-expression.

  2. Если функционал динамической маршрутизации не используется, принудительно отключите или ограничьте обработку данного заголовка на уровне API Gateway или Reverse Proxy (Nginx, HAProxy). Пример для Nginx:

if ($http_spring_cloud_function_routing_expression != "") {
    return 403;
}

  1. Запустите приложение от имени пользователя с минимальными привилегиями в изолированном контейнере, чтобы ограничить радиус поражения в случае эксплуатации.

  2. Обновите сигнатуры систем обнаружения вторжений (IDS/IPS) для выявления попыток передачи Java-объектов (например, java.lang.Runtime) внутри HTTP-заголовков.