
Kubernetes DaemonSet, который развёртывает hotpatch на уровне JVM для устранения уязвимости Log4j2 CVE-2021-44228 путём отключения JNDI-запросов во всех контейнерах и JVM хоста.
Этот проект устаревает, как указано ниже.
Проект перестанет принимать сообщения об ошибках и не будет обновляться с 2023-01-01. После этой даты проект не будет поддерживаться, и новые выпуски или артефакты, связанные с ним, создаваться не будут.
Репозиторий проекта будет окончательно архивирован (переведен в режим только для чтения) с 2023-04-01.
Как указано в оригинальной документации проекта, он всегда задумывался как временная мера для помощи пользователям Kubernetes и предоставлял лишь частичное смягчение угрозы безопасности от Log4j2 CVE-2021-44228 и CVE-2021-45046. Настоятельно рекомендуется всем пользователям Log4j обновиться до исправленной версии проекта, чтобы полностью устранить любой риск, связанный с этими CVE.
Артефакты выпуска, связанные с последним релизом, останутся постоянно доступными для потребителей этого проекта, которые продолжают развертывать его в своих средах Kubernetes. В частности, манифест DaemonSet и образ контейнера из ECR Public останутся доступными после устаревания, но больше не будут поддерживаться или обновляться.
AWS разработала RPM, который выполняет горячее исправление на уровне JVM, отключающее JNDI-запросы из библиотеки Log4j2, смягчая Log4j2 CVE-2021-44228 и CVE-2021-45046.
Apache Log4j2 CVE-2021-44228 агент узла — это проект с открытым исходным кодом, созданный командой Kubernetes в AWS. Он предназначен для работы в качестве DaemonSet и смягчения воздействия Log4j2 CVE-2021-44228, которое затрагивает приложения, использующие Apache Log4j2 версии < 2.15.0 при обработке входных данных из ненадёжных источников. Запуск этого DeamonSet исправит JVM, работающие как в контейнерах, так и на хосте.
Что он делает: На каждом рабочем узле будет установлена запись в cron, которая запускает процесс поиска запущенных JVM и внедряет агент, смягчающий уязвимость Log4J2. Все JVM, включая те, что работают в контейнерах, будут исправлены таким образом. В настоящее время процесс горячего исправления настроен на запуск каждые 30 минут с 15-минутным разбросом. Эффективный интервал может варьироваться от 15 до 45 минут между запусками.
Примечание: Дополнительную информацию об уязвимости Log4j2 и ответных мерах AWS можно найти в Бюллетене безопасности AWS.
Примечание: 20.04.22 образ (v0.0.16) был обновлён последним исправлением для Amazon Linux 1 и 2. Если вы установили предыдущую версию этого DaemonSet и она всё ещё работает, вам следует повторно применить файл daemonset.yaml для установки последней версии RPM. Если исправление log4j вам больше не нужно, удалите DaemonSet и деинсталлируйте RPM, так как старые версии RPM (< 1.1-16) имели уязвимость, которая могла позволить злоумышленнику выйти из контейнера и получить доступ к базовому хосту.
Примечание: Версия 1.3-5 устраняет ALAS2-2022-1806 и ALAS-2022-1601. См. статью Amazon Linux "log4j hotpatch" <1.3-5 local privilege escalation to root для получения дополнительной информации.
kubectl apply -f https://raw.githubusercontent.com/aws-samples/kubernetes-log4j-cve-2021-44228-node-agent/main/daemonset.yaml
Выборочная проверка одного пода:
kubectl get pods -l job=node-patch-installer -n node-configuration-daemonset
kubectl logs <pod-name> -c node-patch-installer -n node-configuration-daemonset
или получите подтверждение для каждого узла:
kubectl logs -l job=node-patch-installer -c node-patch-installer -n node-configuration-daemonset | grep 'installed'
Если установка прошла успешно, последняя строка в файле журнала будет содержать installed and verified, иначе будет записана ошибка.
daemonset.yaml, указав новый URI:тег образа, затем примените манифест к своему кластеру.Apache Log4j2 < 2.15.0, функции JNDI, используемые в конфигурации, сообщениях журнала и параметрах, не защищают от управляемых атакующим LDAP и других конечных точек, связанных с JNDI. Атакующий, который может контролировать сообщения журнала или их параметры, может выполнить произвольный код, загруженный с LDAP-серверов, если включена подстановка сообщений. Начиная с версий Log4j2 < 2.15.0 это поведение было отключено по умолчанию. Полные сведения можно найти в бюллетене CVE.
Дополнительную информацию об уязвимости Log4j2 можно найти в Бюллетене безопасности AWS.
AWS разработала RPM, который выполняет горячее исправление на уровне JVM, отключающее JNDI-запросы из библиотеки Log4j2, смягчая проблему Log4j2 для JVM на хосте, а также для JVM, работающих в контейнерах. Этот проект упаковывает RPM в виде Kubernetes DaemonSet.
После установки на каждом рабочем узле запускается процесс, который ищет запущенные JVM и внедряет агент в JVM для смягчения уязвимости Log4j2. Агент пытается исправить метод lookup() всех загруженных экземпляров org.apache.logging.log4j.core.lookup.JndiLookup, чтобы безусловно возвращать строку Patched JndiLookup::lookup(). Это предназначено для устранения уязвимости удаленного выполнения кода CVE-2021-44228 в Log4j2 без перезапуска Java-процесса.
По умолчанию этот процесс настроен на запуск каждые 30 минут и добавит уровень защиты в кластерах, где приложения ещё не исправлены обновлённой зависимостью Log4j2.
Более подробную информацию о горячем исправлении можно найти в блоге AWS open source.
Образ контейнера размещён в aws-containers публичном репозитории ECR.