
Воспроизведение CVE-2021-45046

Было обнаружено, что исправление для CVE-2021-44228 в Apache Log4j 2.15.0 было неполным в некоторых нестандартных конфигурациях. Это может позволить атакующим, контролирующим входные данные Thread Context Map (MDC), при использовании в конфигурации журналирования нестандартного Pattern Layout с Context Lookup (например, $${ctx:loginId}) или шаблоном Thread Context Map (%X, %mdc или %MDC) создавать вредоносные входные данные с использованием шаблона JNDI Lookup, что приводит к атаке типа «отказ в обслуживании» (DOS). Log4j 2.15.0 предпринимает попытку по умолчанию ограничить JNDI LDAP-запросы локальным хостом. Log4j 2.16.0 исправляет эту проблему, удаляя поддержку шаблонов поиска сообщений и отключая функциональность JNDI по умолчанию.
Log4j ввел концепцию Mapped Diagnostic Context или MDC.
Log4j 2 продолжает идею MDC и NDC, но объединяет их в единый Thread Context. Thread Context Map является эквивалентом MDC, а Thread Context Stack — эквивалентом NDC. Хотя они часто используются для целей, отличных от диагностики проблем, в Log4j 2 их по-прежнему часто называют MDC и NDC, поскольку эти аббревиатуры уже широко известны.
Большинство реальных систем должны одновременно работать с несколькими клиентами. В типичной многопоточной реализации такой системы разные потоки обрабатывают разных клиентов. Журналирование особенно хорошо подходит для трассировки и отладки сложных распределённых приложений. Распространённый подход к различению вывода журнала одного клиента от другого — создание отдельного нового логгера для каждого клиента. Это способствует размножению логгеров и увеличивает накладные расходы на управление журналированием.
Более лёгкая техника — уникальная маркировка каждого запроса журнала, инициированного одним и тем же клиентским взаимодействием. Нил Харрисон описал этот метод в книге «Patterns for Logging Diagnostic Messages» (Шаблоны для журналирования диагностических сообщений) в сборнике «Pattern Languages of Program Design 3» под редакцией Р. Мартина, Д. Рили и Ф. Бушманна (Addison-Wesley, 1997). Подобно тому как рыбу можно пометить и отслеживать её передвижение, маркировка событий журнала общим тегом или набором элементов данных позволяет отслеживать полный поток транзакции или запроса. Мы называем это Fish Tagging.
Log4j предоставляет два механизма для выполнения Fish Tagging: Thread Context Map и Thread Context Stack. Thread Context Map позволяет добавлять любое количество элементов и идентифицировать их с помощью пар ключ/значение. Thread Context Stack позволяет помещать один или несколько элементов в стек, а затем идентифицировать их по порядку в стеке или по самим данным. Поскольку пары ключ/значение более гибкие, Thread Context Map рекомендуется, когда элементы данных могут быть добавлены в процессе обработки запроса или когда их больше одного-двух.
Чтобы уникально пометить каждый запрос с помощью Thread Context Stack, пользователь помещает контекстную информацию в стек.
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45046 https://logging.apache.org/log4j/2.x/manual/thread-context.html