CVE-2020-17519

Apache Flink

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

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

2024-05-23

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

Apache Flink contains an improper access control vulnerability that allows an attacker to read any file on the local filesystem of the JobManager through its REST interface.

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

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

CVE-2020-17519 представляет собой уязвимость типа Directory Traversal (обход каталогов) в REST API компонента JobManager в Apache Flink. Она возникает из-за недостаточной валидации путей в HTTP-запросах.

Злоумышленник может отправить специально сформированный GET-запрос, используя последовательности для перехода по директориям (например, ..%252f), что позволяет прочитать любые файлы на локальной файловой системе JobManager, к которым имеет доступ пользователь, запустивший процесс Flink (включая конфигурационные файлы, ключи доступа и системные логи).

Уязвимость затрагивает версии Apache Flink: * с 1.11.0 по 1.11.2

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

Основным способом устранения уязвимости является обновление Apache Flink до защищенных версий.

  1. Определите текущую версию Apache Flink.
  2. Обновите дистрибутив до версии 1.11.3, 1.12.0 или выше.
  3. Если вы используете Docker, обновите тег образа в вашем Dockerfile или docker-compose.yml:
docker pull flink:1.11.3

  1. Перезапустите кластер Flink (JobManager и TaskManagers), чтобы изменения вступили в силу.

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

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

  1. Ограничьте доступ к REST API JobManager (по умолчанию порт 8081) с помощью сетевых экранов (Firewall) или Security Groups, разрешив подключения только с доверенных IP-адресов администраторов.

  2. Настройте Reverse Proxy (например, Nginx) перед JobManager для фильтрации опасных символов в URL:

server {
    listen 80;
    location / {
        if ($request_uri ~* "\.\.") {
            return 403;
        }
        proxy_pass http://jobmanager:8081;
    }
}

  1. Запускайте процесс Flink от имени пользователя с минимальными привилегиями в системе (Non-root user), чтобы ограничить область файлов, доступных для чтения в случае эксплуатации.

  2. Включите аутентификацию и TLS для REST-интерфейса Flink, чтобы предотвратить несанкционированный доступ со стороны внешних узлов.