Подводим итоги нарушений информационной безопасности в Apache NiFi за первую половину 2023 года. Инъекции кода, десериализация недоверенных данных и неправильное ограничение ссылок на внешние объекты XML.
Какие уязвимости в Apache NiFi найдены и исправлены за первую половину 2023 года
За 2023 год в Apache NiFi выявлено и исправлено всего 3 уязвимости разной степени серьезности. Начнем с самых важных: CVE-2023-34468 и CVE-2023-22832.
CVE-2023-34468 представляет собой возможность инъекции кода с помощью служб базы данных с использованием открытой кроссплатформенной СУБД H2, полностью написанной на Java. Эта легковесная СУБД позволяет создавать тестовые наборы данных прямо в памяти, поддерживает SQL-запросы, триггеры, UDF-функции и пользовательские процедуры, CSV-файлы и имеет высокую производительность.
Apache NiFi использует H2 в качестве базы данных метаданных, которая хранит информацию о сегментах принадлежащих им версиях элементов, а также историю версий для каждого элемента. Именно H2 является для NiFi встроенной базой данных, которая предварительно настроена в файле nifi-registry.properties по умолчанию. Содержимое базы данных H2 хранится в файле в локальной файловой системе. Альтернативами H2 для хранения метаданных могут быть PostgreSQL 9.x и MySQL (5.6, 5.7, 8.0). Но реестр NiFi 0.1.0 поддерживает только H2.
Таким образом, уязвимость CVE-2023-34468 затронула версии фреймворка с 0.0.2 до 1.21.0. Суть уязвимости в том, что службы контроллера DBCPConnectionPool и HikariCPConnectionPool поддерживают настраиваемый доступ к базам данных с помощью JDBC, позволяя аутентифицированному и авторизованному пользователю настраивать при подключении URL-адрес базы данных с помощью драйвера H2, который обеспечивает выполнение пользовательского кода. При этом URL-адрес подключения поддерживал множество параметров, а существующая проверка свойства позволяла использовать любую строку, включая вредоносный код. Чтобы устранить это, требовалось реализовать настраиваемую валидацию свойств, чтобы обеспечить лучшую область видимости для поддерживаемых сценариев использования, включая запрет подключений к базе данных с файловой поддержкой, такой как H2. Валидация должна проверять URL-адрес базы данных подключения и отклонять местоположение H2 JDBC, если тот был указан. В NiFi 1.22.0, о котором мы писали здесь, по умолчанию в конфигурации отключены URL-адреса H2 JDBC.
В уязвимости CVE-2023-34212, которая тоже считается важной, обнаружена потенциальная десериализация недоверенных данных с помощью JNDI в компонентах JMS. Эта опасность затрагивает версии NiFi с 1.8.0 до 1.21.0 и сводится к тому, что JndiJmsConnectionFactoryProvider поддерживает настраиваемые соединения JMS с использованием пользовательского драйвера и местоположения JNDI (Java Naming and Directory Interface). JNDI — это набор независимых от реализации Java API, организованный в виде службы каталогов, который позволяет Java-клиентам открывать и просматривать данные и объекты по их именам. Служба контроллера JndiJmsConnectionFactoryProvider вместе с процессорами ConsumeJMS и PublishJMS в Apache NiFi 1.8.0–1.21.0 дает возможность аутентифицированному и авторизованному пользователю настраивать URL-адрес и свойства библиотеки, которые позволяют десериализовать ненадежные данные из удаленного расположения.
Чтобы устранить эту уязвимость, необходимо обеспечить дополнительную проверку для свойства URL, чтобы определить поддерживаемые местоположения. Хотя разные драйверы JMS могут поддерживать разные схемы URL-адресов, реализация стандартного набора поддерживаемых схем должна определять ожидаемые шаблоны использования. Исправление этой уязвимости предполагает проверку URL-адреса JNDI и ограничение местоположения набором разрешенных схем. В конфигурации NiFi 1.22.0 по умолчанию отключен LDAP для URL-адресов JNDI.
Наконец, умеренно серьезная уязвимость CVE-2023-22832, допускающая неправильное ограничение ссылок на внешние объекты XML в ExtractCCDAAttributes, которая затрагивает версии NiFi с 1.2.0 до 1.19.1. Суть этой уязвимости в том, что процессор ExtractCCDAAttributes не ограничивает ссылки на внешние объекты XML. Поэтому потоковые конвейеры обработки данных с процессором ExtractCCDAAttributes, который извлекает информацию из FlowFile в формате Consolidated CDA и предоставляет отдельные атрибуты в виде атрибутов FlowFile, уязвимы для вредоносных XML-документов, содержащих объявления типа документа со ссылками на внешние объекты XML.
Процессор ExtractCCDAAttributes использует пользовательский класс CDAUtil для загрузки и анализа входящего потока FlowFile. Класс CDAUtil также включает метод загрузки , который принимает стандартный DOM-документ. Процессор ExtractCCDAAttributes обновлен, чтобы использовать стандартную библиотеку nifi-xml-processing для синтаксического анализа XML перед вызовом метода CDAUtil.load(). Поэтому в конфигурации NiFi 1.20.0 по умолчанию отключены объявления типа документа для процессора ExtractCCDAAttributes, о чем мы подробно рассказывали здесь.
В дополнение к реализации стандартного синтаксического анализа XML процессор ExtractCCDAAttributes объявлен устаревшим для удаления, поскольку его реализация основана на устаревших библиотеках, а широкое использование атрибутов FlowFile не соответствует передовым методам обработки данных, ориентированных на записи. Разрешение отключает объявления типов документов и запрещает разрешение внешних объектов XML в процессоре ExtractCCDAAttributes.
О других уязвимостях фреймворка, обнаруженных во 2-ой половине 2023 года, читайте в нашей новой статье.
Узнайте больше про администрирование и эксплуатацию Apache NiFi для построения эффективных ETL-конвейеров потоковой аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники