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

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

Уязвимости плагинов Minecraft: как хакеры взламывают серверы через плагины и команды

wergio 24.07.2026 12:11 3
Уязвимости плагинов Minecraft: SQL-инъекции, RCE, Command Injection и как хакеры взламывают серверы.

Введение: плагин — друг или враг?

Каждый плагин на сервере Minecraft — это потенциальная дыра в безопасности. Хакеры активно ищут уязвимости в популярных плагинах, чтобы получить доступ к консоли сервера, украсть базу данных, забанить всех игроков или просто уничтожить мир. По статистике, 60% взломов Minecraft-серверов происходит через уязвимости в плагинах, а не через слабые пароли или DDoS. В этой статье я разберу основные типы уязвимостей, как они работают и как хакеры их эксплуатируют.

Тип 1: SQL-инъекции (SQL Injection)

Где встречается: плагины, использующие базы данных (MySQL, SQLite) — LuckPerms, CoreProtect, плагины экономики, логирования.

Принцип атаки: Хакер вводит в текстовое поле (чат, табличку, книгу, название предмета) специально сформированную строку, содержащую SQL-код. Если плагин неправильно обрабатывает ввод пользователя и вставляет его напрямую в SQL-запрос, хакер может:

  • Украсть данные из базы (пароли, email, IP-адреса игроков).
  • Изменить данные (дать себе права администратора).
  • Удалить таблицы (обрушить плагин или весь сервер).
  • Выполнить команды на сервере через SQL (в некоторых конфигурациях).

Пример атаки через книгу: Игрок пишет книгу с текстом '; DROP TABLE luckperms_players; --. Если плагин логирования сохраняет текст книги в базу без фильтрации, SQL-запрос становится: INSERT INTO books (text) VALUES (''; DROP TABLE luckperms_players; --'). База данных выполняет команду DROP TABLE и удаляет таблицу игроков.

Защита:

  • Всегда использовать параметризованные запросы (PreparedStatement в Java).
  • Экранировать все данные, полученные от пользователя.
  • Использовать ORM-библиотеки (Hibernate), которые автоматически защищают от инъекций.
  • Регулярно обновлять плагины — разработчики закрывают уязвимости в патчах.

Тип 2: Удалённое выполнение команд (RCE — Remote Code Execution)

Где встречается: плагины, загружающие внешние файлы (WorldEdit скрипты, плагины для кастомных карт), плагины с функцией «eval» или «execute».

Принцип атаки: Хакер загружает на сервер вредоносный файл (скрипт, конфиг, карту) и через плагин заставляет сервер выполнить его. Результат — полный контроль над сервером.

Пример через WorldEdit: WorldEdit поддерживает скрипты на языке CraftScript (.js файлы). Хакер загружает скрипт с командой server.dispatchCommand(server.console, 'op Hacker'). Если сервер не ограничивает выполнение скриптов — хакер получает права оператора.

Защита:

  • Отключить выполнение внешних скриптов, если они не нужны (в WorldEdit: scripting-timeout: 0 и удалить папку craftscripts).
  • Никогда не давать игрокам права на запись в папки плагинов.
  • Использовать плагин AntiMalware для сканирования файлов сервера.

Тип 3: Инъекция команд (Command Injection)

Где встречается: плагины, выполняющие системные команды через Runtime.getRuntime().exec() — плагины для бэкапов, перезапуска, мониторинга.

Принцип атаки: Хакер вводит в поле (название мира, имя игрока, текст на табличке) символы командной строки (;, &&, |), и сервер выполняет произвольную системную команду.

Пример: Плагин создаёт папку для мира игрока: mkdir worlds/ИМЯ_МИРА. Хакер называет мир test && rm -rf /*. Система выполняет: mkdir worlds/test && rm -rf /* — удаляет все файлы на сервере.

Защита:

  • Никогда не передавать пользовательский ввод напрямую в системные команды.
  • Фильтровать все входные данные: разрешать только буквы, цифры, дефис, подчёркивание.
  • Использовать Java API для работы с файлами вместо системных команд.

Тип 4: Уязвимости десериализации (Deserialization Exploits)

Где встречается: плагины, загружающие сериализованные Java-объекты (данные игроков, конфиги, кэш).

Принцип атаки: Java-сериализация позволяет сохранить объект в байты и восстановить его. Хакер создаёт вредоносный сериализованный объект и подсовывает его плагину. При десериализации выполняется вредоносный код.

Пример: Хакер сохраняет вредоносный объект в файл playerdata через уязвимость в плагине. При загрузке данных игрока сервер десериализует объект и выполняет код хакера.

Защита:

  • Не использовать стандартную Java-сериализацию для данных, полученных из ненадёжных источников.
  • Использовать JSON или YAML для хранения данных.
  • Обновлять Java (новые версии имеют встроенную защиту от некоторых десериализационных атак).

Тип 5: Уязвимости форматирования строк (Format String Vulnerabilities)

Где встречается: плагины чата, системы сообщений, плагины для табличек и книг.

Принцип атаки: Игрок вставляет в сообщение специальные символы форматирования (%s, %n, ${}), которые интерпретируются Java и могут вызвать краш сервера или утечку данных.

Пример: Игрок пишет в чат %s%s%s%s%s. Плагин использует String.format() без проверки. Java пытается подставить аргументы, которых нет, и выбрасывает исключение — сервер крашится.

Защита:

  • Экранировать символы % в пользовательском вводе (заменять на %%).
  • Не использовать String.format() с пользовательским вводом в качестве форматной строки.

Тип 6: Path Traversal (выход за пределы директории)

Где встречается: плагины, работающие с файловой системой (WorldEdit схематики, плагины для картинок, загрузки миров).

Принцип атаки: Хакер указывает имя файла с символами ../, чтобы выйти за пределы разрешённой папки и прочитать или записать системные файлы.

Пример: Плагин загружает схематику: schematics/ИМЯ.schem. Хакер указывает имя ../../server.properties. Плагин читает или перезаписывает конфигурационный файл сервера.

Защита:

  • Канонизировать путь: преобразовать относительный путь в абсолютный и проверить, что он начинается с разрешённой директории.
  • Фильтровать символы .. и / в именах файлов.

💡 Совет профи

Проводите аудит плагинов перед установкой. Проверьте исходный код (если открыт) на наличие Runtime.exec(), Statement.executeQuery(), ObjectInputStream. Если плагин имеет закрытый исходный код — проверьте отзывы и дату последнего обновления. Плагин, не обновлявшийся 2 года — почти гарантированно содержит уязвимости. И никогда не давайте плагинам права на выполнение системных команд без крайней необходимости.
← К списку статей

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

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

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

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