6 уязвимостей Apache Kafka за последние 2 года

Apache Kafka для разработчиков и администраторов, Apache Kafka уязвимости проблемы информационой безопасности, Apache Kafka примеры курсы обучение, обучение большим данным, курсы Big Data, Школа Больших Данных Учебный Центр Коммерсант

Как кодек сжатия snappy может вызвать ошибку нехватки памяти на брокерах, что может нарушить пользовательская JAAS-конфигурация клиента с протоколом безопасности на основе SASL и еще 4 уязвимости Apache Kafka в 2023 и 2022 гг.

Уязвимости Apache Kafka 2023 года

В 2023 году обнаружена уязвимость CVE-2023-34455, связанная с тем, что клиенты, использующие кодек сжатия snappy, могут вызвать ошибку нехватки памяти на брокерах. Проблема заключается в библиотеке snappy-java и потенциально может быть использована для генерации OOM-ошибки, что приводит к отказу в обслуживании (DoS) на брокере Kafka. Уязвимость позволяет любому пользователю, который может передавать данные брокеру, использовать уязвимость, отправляя вредоносную полезную нагрузку в записи, сжатой с помощью snappy. Получив запись, брокер попытается распаковать запись, чтобы выполнить проверку записи, и делегирует распаковку библиотеке snappy-java. Уязвимость в пакете snappy-java может привести к выделению неожиданного объема памяти кучи, что вызовет ошибку OOM в брокере. Никакая настроенная квота не сможет предотвратить это, поскольку одна запись может использовать эту уязвимость, которая затрагивает версии Kafka с 0.8.0 до 3.5.0. Избежать этой проблемы поможет обновление Kafka с библиотекой snappy-java версией выше 1.1.10.1 от 5 июля 2023 г., которая обратно совместима со всеми уязвимыми версиями платформы потоковой передачи событий. Это обновление включено в отладочный выпуск 3.5.1, о котором мы рассказываем здесь.

Также в этом году выявлена уязвимость CVE-2023-25194, связанная с возможной атакой через конфигурацию SASL JAAS JNDILOGINMODULE с использованием API Kafka Connect. Для эксплуатации уязвимости требуется доступ к рабочему процессу Kafka Connect и возможность создавать/изменять коннекторы с произвольной конфигурацией SASL JAAS клиента Kafka и протоколом безопасности на основе SASL, что было возможно в кластерах Kafka Connect. Это позволит выполнять запросы JNDI, которые приводят к отказу в обслуживании/удаленному выполнению кода. Уязвимость затронула Apache Kafka Connect API, включая runtime в версиях с 2.3.0 до 3.3.2.

При настройке коннектора с помощью REST API Kafka Connect аутентифицированный оператор может установить для свойства sasl.jaas.config любого из клиентов коннектора Kafka значение com.sun.security.auth.module.JndiLoginModule с помощью свойств producer.override.sasl.jaas.config, consumer.override.sasl.jaas.config или admin.override.sasl.jaas.config. Это позволит злоумышленнику подключить сервер подключения Kafka к своему серверу LDAP и десериализовать ответ LDAP, чтобы выполнить гаджеты десериализации Java – цепочку классов. Для проведения успешной атаки необходимо, чтобы в приложении присутствовали классы, реализующие так называемые «магические» методы, которые переопределяют действие кода по умолчанию. Чтобы найти уязвимый класс или цепочку классов (гаджет), обычно нужен доступ к исходному коду приложения. Таким образом злоумышленник может вызвать неограниченную десериализацию недоверенных данных (или) критическую уязвимость выполнения удаленного кода (Remote Code Execution, RCE), когда в пути к классам Java есть гаджеты.

Начиная с Apache Kafka 3.0.0, пользователям разрешено указывать потенциально уязвимые свойства в конфигурациях коннекторов для кластеров Kafka Connect, работающих с готовыми конфигурациями. До версии платформы 3.0.0 пользователи не могли указывать эти свойства, если только кластер Kafka Connect не был перенастроен с помощью политики переопределения клиента коннектора, которая разрешает их. В Apache Kafka 3.4.0 добавлено системное свойство org.apache.kafka.disallowed.login.modules, чтобы отключить использование проблемных модулей входа в конфигурацию SASL JAAS. Также в Apache Kafka 3.4.0по умолчанию отключена конфигурация com.sun.security.auth.module.JndiLoginModule. Пользователям Kafka Connect рекомендуется проверить конфигурации коннектора и разрешать только доверенные конфигурации JNDI, а также проверить зависимости коннекторов на наличие уязвимых версий и обновить их или исправить эти зависимости. Наконец, помимо использования системного свойства org.apache.kafka.disallowed.login.module, пользователи Kafka Connect также могут реализовать свою собственную политику переопределения конфигурации клиента коннектора, которую можно использовать для управления тем, какие свойства клиента Kafka могут быть переопределены непосредственно в конфигурации коннектора.

Уязвимости, выявленные в 2022 году

В прошлом году в Apache Kafka были обнаружены и устранены 4 уязвимости. Одной из них является CVE-2022-34917, позволяющая вредоносным клиентам, не прошедшим проверку подлинности, выделять большие объемы памяти на брокерах. Это может привести к тому, что брокеры вызовут ошибку нехватки памяти (OOM, OutOfMemoryException) и отказ в обслуживании.

Проблема затронула версии 2.8.0, 2.8.1, 3.0.0, 3.0.1, 3.1.0, 3.1.1, 3.2.0, 3.2.1 и включает сценарии вызова OOM-ошибки на брокерах в кластере Kafka без аутентификации, а также с аутентификацией SASL и TLS. Любые клиенты, способные установить сетевое подключение к брокеру без необходимости действительных учетных данных SASL, могут вызвать проблему, также как клиенты, которые успешно прошли аутентификацию через TLS.

Уязвимость CVE-2022-23302 выявила недостаток, позволяющий злоумышленнику предоставить конфигурацию TopicConnectionFactoryBindingName, которая заставит JMSSink выполнять запросы JNDI, приводящие к удаленному выполнению кода аналогично проблеме CVE-2021-4104, связанной с библиотекой логирования Log4j. Эта уязвимость может привести к атаке с удаленным выполнением кода, когда приложение настроено на использование JMSAppender, и у злоумышленника есть доступ для прямого изменения переменных конфигурации TopicBindingName или TopicConnectionFactoryBindingName в файлах свойств, что обычно является маловероятным сценарием эксплуатации. Уязвимость CVE-2022-23302 опасна, когда у злоумышленника есть доступ для записи к конфигурации Log4j или если конфигурация ссылается на службу LDAP, к которой у злоумышленника есть доступ. Избежать этого поможет обновление библиотеки логирования до версии 2. Также можно удалить класс JMSSink из архива log4j-1.2.17.jar.

С этой же библиотекой связна другая уязвимость 2022 года — CVE-2022-23305, выявившая недостаток, позволяющий удаленному злоумышленнику запускать SQL-операторы в базе данных, если развернутое приложение настроено на использование JDBCAppender с определенными токенами интерполяции. Проблема касается всех версий Apache Kafka и решается обновлением библиотеки логирования до версии 2 или удалением класса JDBCAppender из log4j-1.2.17.jar.

Последняя уязвимость 2022 года также была связана с библиотекой логирования: CVE-2022-23307 выявила недостаток, позволяющий злоумышленнику отправить вредоносный запрос с сериализованными данными на работающий компонент log4j 1.x для десериализации при запуске компонента chainsaw.  Chainsaw представляет собой автономный графический интерфейс для просмотра записей журнала в log4j. Впрочем, чтобы воспользоваться этой уязвимостью, злоумышленник должен иметь возможность создавать вредоносные записи в журнале и иметь необходимый доступ и разрешения для запуска chainsaw, или тот должен быть уже включен клиентом потребителем Apache Kafka. Проблема затронула все версии Apache Kafka и решается обновлением библиотеки логирования до версии 2 или удалением  Chainsaw из log4j-1.2.17.jar.

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

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://kafka.apache.org/cve-list
Поиск по сайту