Skip to content

Security: TheIIIrd/mc-izba

Security

SECURITY.md

Политика безопасности

Как сообщить об уязвимости

Не открывайте публичный issue. Воспользуйтесь приватным каналом GitHub: вкладка Security → Report a vulnerability в этом репозитории.

Опишите, что происходит, как это воспроизвести и чем это грозит. Ответ постараюсь дать в течение недели.

Что считается уязвимостью

izba скачивает исполняемый код из сети и запускает его. Уязвимостью здесь считается любая возможность:

  • заставить izba скачать файл с хоста вне списка разрешённых;
  • обойти сверку контрольной суммы или подсунуть файл с неверной суммой;
  • записать файл за пределы каталога проекта при распаковке архива;
  • добиться выполнения произвольного кода через конфиг, аргументы командной строки или ответ API;
  • незаметно ослабить настройки безопасности сервера — в первую очередь online-mode, RCON и query.

Что уязвимостью не является

  • Вредоносный плагин или мод. Плагин — это произвольный код с правами процесса сервера, песочницы в Minecraft нет. izba показывает, что устанавливает, и проверяет контрольные суммы, но не анализирует содержимое.
  • Осознанно отключённая защита. server.online_mode = false, включённый RCON, запуск с -force — это выбор пользователя, о рисках которого izba предупреждает.
  • Уязвимости в самом Minecraft, Paper или JVM. Сообщайте о них соответствующим проектам. Здесь уместен запрос на предупреждение о затронутых версиях, как это сделано для Log4Shell.

Границы доверия

Стоит понимать, откуда в системе берётся код и данные:

Источник Уровень доверия
Mojang, PaperMC, Adoptium доверенные, но ответы проверяются по хешу
Архивы из сети недоверенные данные: пути, ссылки и размеры проверяются при распаковке
Плагины и моды недоверенный код, исполняется с правами сервера
izba.toml доверенный, но валидируется (опасные флаги JVM отвергаются)

Меры в коде

  • Единственная точка выхода в сеть — пакет internal/netx, только https и только хосты из зашитого списка. Каждый редирект проверяется отдельно.
  • Загрузка без контрольной суммы невозможна: такой вызов возвращает ошибку. Файл с несовпавшей суммой удаляется, не оставаясь даже временным.
  • При распаковке отвергаются .., абсолютные пути, зарезервированные имена Windows, символические и жёсткие ссылки; действуют лимиты на число файлов и распакованный объём.
  • Запуск от root блокируется, порты ниже 1024 запрещены на уровне конфига.
  • Флаги удалённой отладки JVM (-agentlib:jdwp, -Dcom.sun.management.jmxremote) отвергаются валидацией; переменные JAVA_TOOL_OPTIONS и _JAVA_OPTIONS вычищаются из окружения сервера.
  • online-mode=false, появившийся в server.properties мимо конфига, останавливает запуск: это расценивается как регрессия безопасности.

Проверка релизов

Каждый релиз собирается в GitHub Actions и снабжается подтверждением происхождения. Проверить, что бинарник собран именно из этого репозитория:

gh attestation verify izba-linux-amd64 --repo <владелец>/izba

Контрольные суммы всех файлов релиза лежат в SHA256SUMS.

Поддерживаемые версии

Проект находится в ранней стадии. Исправления выпускаются только для последнего релиза.

There aren't any published security advisories