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 до защищенных версий.
- Определите текущую версию Apache Flink.
- Обновите дистрибутив до версии 1.11.3, 1.12.0 или выше.
- Если вы используете Docker, обновите тег образа в вашем Dockerfile или docker-compose.yml:
docker pull flink:1.11.3
- Перезапустите кластер Flink (JobManager и TaskManagers), чтобы изменения вступили в силу.
Временные меры
Если немедленное обновление невозможно, примените следующие защитные механизмы:
-
Ограничьте доступ к REST API JobManager (по умолчанию порт 8081) с помощью сетевых экранов (Firewall) или Security Groups, разрешив подключения только с доверенных IP-адресов администраторов.
-
Настройте Reverse Proxy (например, Nginx) перед JobManager для фильтрации опасных символов в URL:
server {
listen 80;
location / {
if ($request_uri ~* "\.\.") {
return 403;
}
proxy_pass http://jobmanager:8081;
}
}
-
Запускайте процесс Flink от имени пользователя с минимальными привилегиями в системе (Non-root user), чтобы ограничить область файлов, доступных для чтения в случае эксплуатации.
-
Включите аутентификацию и TLS для REST-интерфейса Flink, чтобы предотвратить несанкционированный доступ со стороны внешних узлов.