CVE-2022-33891
Apache Spark
2023-03-07
Apache Spark contains a command injection vulnerability via Spark User Interface (UI) when Access Control Lists (ACLs) are enabled.
Технический анализ и план устранения
Суть уязвимости
CVE-2022-33891 представляет собой уязвимость типа Command Injection (инъекция команд) в веб-интерфейсе Apache Spark. Проблема возникает при включенных списках контроля доступа (ACL).
Уязвимость кроется в механизме проверки прав пользователя: Spark полагается на параметр doAs, передаваемый в HTTP-запросе. Это значение передается в Unix-оболочку через функцию getUnixGroups для определения групп пользователя. Из-за отсутствия надлежащей фильтрации входных данных злоумышленник может внедрить произвольные команды ОС, которые будут выполнены от имени пользователя, запустившего процесс Spark.
Как исправить
Основным способом устранения уязвимости является обновление Apache Spark до версий, в которых была исправлена логика обработки параметров пользователя.
- Определите текущую версию Spark:
spark-submit --version
- Обновите Apache Spark до одной из следующих версий (или более новых):
- 3.1.3
- 3.2.2
-
3.3.0
-
Если вы используете облачные дистрибутивы (например, Databricks, Amazon EMR, Google Cloud Dataproc), примените соответствующие патчи от поставщика или обновите версию образа среды выполнения.
Временные меры
Если немедленное обновление системы невозможно, примените следующие защитные меры для снижения риска эксплуатации:
- Отключите списки контроля доступа (ACL), если они не являются критически важными для вашей инфраструктуры. Для этого установите параметр
spark.acls.enableв значениеfalseв файлеspark-defaults.conf:
spark.acls.enable false
-
Ограничьте доступ к Spark UI (по умолчанию порты 4040, 8080, 18080) с помощью межсетевого экрана (Firewall) или Security Groups, разрешив подключения только с доверенных IP-адресов или через VPN.
-
Настройте аутентификацию на уровне обратного прокси-сервера (например, Nginx или Apache), чтобы предотвратить доступ неавторизованных пользователей к интерфейсу Spark.
-
Запускайте процессы Spark от имени пользователя с минимальными привилегиями в системе (Least Privilege Principle), чтобы ограничить возможный ущерб в случае успешной атаки.