Уязвимость CVE-2024-37389 в Apache NiFi: чем она опасна и как от нее избавиться

NiFI уязвимости безопасность, NiFI примеры курсы обучение, NiFI для инженера данных, потоковая обработка с NiFI, Школа Больших Данных Учебный Центр Коммерсант

Как уязвимость CVE-2024-37389 может привести к выполнению произвольного кода в Apache NiFi: контекст параметров и межсайтовый скриптинг в веб-приложении для визуального проектирования конвейера обработки данных.

Параметры свойств и их контекст в Apache NiFi

8 июля 2024 года в мажорном релизе Apache NiFi обнаружена уязвимость средней степени серьезности, связанная с неправильной нейтрализацией ввода в описании контекста параметров. Впрочем, она затрагивает не только выпуски 2.0.0-M1-2.0.0-M3, но и версии 1.10.0-1.26.0. Эти релизы Apache NiFi поддерживают поле описания в конфигурации контекста параметров, которое уязвимо для межсайтового скриптинга (XSS, Cross-Site Scripting).

В Apache NiFi значения любых свойств в потоке обработки данных могут быть параметризованы с помощью параметров. Параметры создаются и настраиваются в пользовательском интерфейсе NiFi. Любое свойство может быть настроено для ссылки на параметр со следующими условиями:

  • Чувствительное свойство может ссылаться только на чувствительный параметр;
  • Нечувствительное свойство может ссылаться только на нечувствительный параметр;
  • Свойства, ссылающиеся на службы контроллера, не могут использовать параметры;
  • Параметры не могут быть использованы в задачах отчетности или в службах контроллера управления.

Возможность использования параметра для значения свойства указывается в GUI NiFi. Сами параметры создаются в контекстах, которые позволяют привязывать набор конфигураций к любой группе процессов во время выполнения. Каждый контекст параметра содержит пару имя-значение. Значения этого параметра заполняются из набора переменных окружения в NiFi. Это те же переменные окружения, которые ранее использовались в определении дескриптора коннектора. В можно проверить Имя контекста параметров, который привязывается к группе процессов, отображается в сведениях о конфигурации группы процессов. К параметрам из контекста параметров можно получить доступ с помощью знака решетки # с названием параметра, например, #{parameterName}.

Считается, что в NiFi лучше использовать параметры вместо переменных, поскольку они поддерживают чувствительные значения и предлагают более детальный контроль над политиками доступа. Кроме того, свойства, ссылающиеся на параметры, проверяются на соответствие замещенному значению, в отличие от большинства свойств, ссылающихся на переменные с помощью языка выражений.

Параметры в NiFi создаются в контекстах параметров, которые определяются и глобально доступны для целого экземпляра NiFi. Политики доступа могут применяться к контекстам параметров, чтобы определить, какие пользователи могут их создавать. После создания также могут применяться политики для чтения и записи в определенный контекст параметров. Чтобы пользователь мог видеть контексты параметров, их необходимо добавить в политику просмотра access the controller (доступ к контроллеру) или в политику просмотра access Parameter Contexts (доступ к контекстам параметров). Чтобы пользователь мог изменять контексты параметров, их также необходимо добавить в соответствующие политики изменения. Доступ к этим политикам осуществляется через пункт Policies (Политики) из глобального меню. Просмотр и изменение политик также могут быть установлены для отдельных контекстов параметров, чтобы определить, какие пользователи могут просматривать или добавлять параметры в контекст. Чтобы ссылаться на параметры или преобразовывать свойства в параметр в компоненте, пользователю необходимо иметь политики просмотра и изменения для компонента. Эти политики наследуются, если у пользователя есть политики просмотра и изменения для группы процессов компонента, но эти политики могут быть переопределены на уровне компонента. Чтобы изменить Параметр, пользователь должен иметь политики просмотра и изменения для всех компонентов, которые ссылаются на этот Параметр. Это необходимо, поскольку изменение параметра требует остановки или запуска компонентов. Также перезапуск нужен из-за изменения поведения компонента, поскольку при выполнении этого действия пользователь изменяет это поведение.

XSS-атаки и уязвимость CVE-2024-37389

Возвращаясь к уязвимости CVE-2024-37389, она приводит к тому, что аутентифицированный пользователь, уполномоченный настраивать контекст параметров, может ввести произвольный код JavaScript, который клиентский браузер выполнит в контексте сеанса аутентифицированного пользователя. Уязвимость означает, что приложение не нейтрализует контролируемые пользователем входные данные перед их помещением в выходные данные, используемые в качестве веб-страницы, предоставляемой другим пользователям, или делает это неправильно.

Обычно XSS-уязвимости эксплуатируются следующим образом:

  1. недоверенные данные попадают в веб-приложение через запрос. Поскольку Apache NiFi представляет собой веб-приложение, написанное на Java с REST API, этот шаг вполне может быть применен к этому ETL-инструменту.
  2. Веб-приложение динамически генерирует веб-страницу, содержащую эти недостоверные данные. Будучи GUI-инструментом для проектирования и исполнения конвейеров обработки данных, Apache NiFi отображает данные на веб-страницах.
  3. Во время генерации страницы приложение не препятствует тому, чтобы данные содержали контент, исполняемый веб-браузером, такой как JavaScript, HTML-теги, HTML-атрибуты, события мыши, Flash, ActiveX и т. д. В случае Apache NiFi это именно JavaScript.
  4. Пользователь посещает сгенерированную веб-страницу, которая содержит вредоносный скрипт, внедренный с использованием недоверенных данных, отправленных ранее.
  5. Поскольку скрипт исходит от веб-страницы, отправленной веб-сервером, веб-браузер выполняет вредоносный скрипт в контексте домена веб-сервера.

Это поведение фактически нарушает политику единого источника веб-браузера, которая гласит, что скрипты в одном домене не должны иметь возможности доступа к ресурсам или запуска кода в другом домене. Таким образом, может быть раскрыта информация, хранящаяся в пользовательских куки-файлах, передаваемых с клиентского приложения на серверное, например, IP-адрес и прочие чувствительные данные. Уязвимость CVE-2024-37389 нарушала принятую в сети политику единого источника, согласно которой браузеры должны ограничивать ресурсы, доступные скриптам, работающим на данном веб-сайте (источнике), ресурсами, связанными с ним на стороне клиента, а не клиентскими ресурсами любых сторонних сайтов. Это ограничение нужно, чтобы исключить ситуацию, когда один сайт может изменять или читать содержимое другого сайта. Применительно к XSS, домен сайта эквивалентен ресурсам, связанным с ним на стороне клиента соединения. Это означает, что домен рассматривается как все ресурсы, которые браузер хранит для взаимодействия пользователя с этим конкретным сайтом.

Уязвимость CVE-2024-37389 в NiFi 2.0.0-M1-2.0.0-M3 и 1.10.0-1.26.0 связана с отсутствием проверки входных данных. Если злоумышленник отправит специально сформированный запрос, он сможет выполнить произвольный код с правами пользователя, который запустил NiFi. Чтобы устранить эту уязвимость, необходимо обновить Apache NiFi до версии 1.27.0 или 2.0.0-M4, о новинках которого мы писали здесь. Также рекомендуется использовать брандмауэр для блокировки доступа к порту, на котором работает NiFi, чтобы предотвратить возможность атаки.

Узнайте больше про администрирование и использование Apache NiFi для построения эффективных ETL-конвейеров потоковой аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Источники

  1. https://nifi.apache.org/documentation/security/
  2. https://nifi.apache.org/docs/nifi-docs/html/user-guide.html#Parameters
  3. https://www.cve.org/CVERecord?id=CVE-2024-37389
  4. https://cwe.mitre.org/data/definitions/79.html
Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.
Поиск по сайту