Skip to content

Security: Balbuto/Setup-and-Test-Server-Ubuntu-24

Security

SECURITY.md

Security Policy

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

Версия Поддерживается
3.3
3.2 ⚠️ — обновитесь, битый Docker GPG keyring при сбое сети
3.1 ❌ — обновитесь, критические баги в apt
3.0 ❌ — обновитесь, критические баги в apt
2.x
1.x

Сообщение об уязвимости

Нашли уязвимость? Не открывайте публичный issue.

Напишите: создайте приватный issue / discussion в репозитории, или свяжитесь с мейнтейнером напрямую.

Опишите:

  • что именно уязвимо
  • как воспроизвести
  • возможное влияние

Мы постараемся ответить в течение 7 дней.

Модель угроз

Этот скрипт запускается с root-правами и:

  • меняет sysctl / limits
  • ставит пакеты через apt
  • скачивает и исполняет внешние тест-скрипты
  • ставит Docker

Что сделано для безопасности:

  1. Верификация внешних скриптов — HTTPS-only, TLS 1.2+, SHA256, ручное подтверждение
  2. Docker — официальный apt-репозиторий с GPG, не curl | sh
  3. UFW-manager — git clone + diff перед запуском
  4. Бэкапы — все /etc файлы бэкапятся перед изменением
  5. IPv6 — не трогается по умолчанию, есть откат
  6. Sysctl — консервативный SAFE профиль по умолчанию
  7. APT: стоп при ошибке — v3.2: если apt update/install упал, настройка прерывается, а не идёт дальше ставить Docker/sysctl на сломанной системе
  8. APT: apt-lock wait — ждёт освобождения dpkg lock, защита от race с unattended-upgrades
  9. Docker GPG keyring — v3.3: при сбое загрузки ключа битый файл удаляется, а не остаётся молча "как будто рабочий" до следующего запуска

Что НЕ защищено:

  • Тест-скрипты (yabs.sh, bench.sh и др.) — вы сами подтверждаете их запуск. Если автор скомпрометирован — вы запустите вредоносный код с root. Зашивайте SHA256 хэши, см. docs/TESTS.md
  • UFW-manager — сторонний репозиторий, проверяйте git diff перед запуском
  • apt-пакеты — доверяем Ubuntu / Docker репозиториям
  • Скрипт сам по себе не подписан. Проверяйте SHA256 server-setup.sh при скачивании с GitHub

История уязвимостей / критических багов

v3.2 — битый Docker GPG keyring при сбое сети

Исправлено в v3.3

install_docker_apt() проверял наличие ключа через [[ ! -f /etc/apt/keyrings/docker.gpg ]]. Если curl не мог скачать ключ (нет сети, таймаут, DNS), gpg --dearmor всё равно создавал пустой 0-байтовый файл по указанному -o пути. При повторном запуске скрипт видел, что файл "уже существует", и больше никогда не пытался его перекачать — apt-репозиторий Docker переставал получать обновления без явного сообщения об ошибке в консоли.

Это не RCE и не даёт постороннему исполнить код, но приводит к тихой деградации: apt-get update на репозитории Docker будет либо падать с NO_PUBKEY, либо (в худшем случае у некоторых версий apt) молча игнорировать пакеты из этого источника.

Митигация: обновитесь до v3.3, либо вручную проверьте и, если нужно, пересоздайте ключ:

ls -la /etc/apt/keyrings/docker.gpg
# если 0 байт:
rm -f /etc/apt/keyrings/docker.gpg
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

v3.0 / v3.1 — APT RCE-подобное поведение

Исправлено в v3.2

  • APT_QUIET как строка + глобальный IFS ломал аргументы apt, пакеты ставились некорректно
  • При ошибке apt скрипт продолжал выполнение, ставил sysctl, писал "Docker установлен" с пустой версией
  • Нет проверки apt-lock — гонка с unattended-upgrades на свежей системе
  • Нет диагностики — только "см. /var/log/server-setup.log"

CVE: нет. Это баг, не уязвимость, но приводил к частично настроенной системе с ложным "✅ Готово!".

Митигация: обновитесь до v3.2. Если гоняли v3.0/v3.1 — проверьте:

dpkg -l mc net-tools ncdu iftop docker-ce
sysctl net.ipv4.tcp_congestion_control
# должно быть: bbr
cat /etc/sysctl.d/99-server.conf
# должен быть только один файл, без дублей 99-server-safe.conf / 99-xray-highload.conf

v3.0 — sysctl конфликт

Исправлено в v3.1

SAFE и HIGHLOAD писали в разные файлы, оба грузились одновременно sysctl --system.

Исправление: единый файл /etc/sysctl.d/99-server.conf, старые файлы авто-удаляются.

Рекомендации

  1. Всегда читайте скрипт перед запуском с root
  2. Проверяйте SHA256 при скачивании:
    sha256sum server-setup.sh
    # v3.3: 82c409a0af074cc2d62c0f4fcf38f483e5234a0cf236c77b4d29b6ab2f7e9195
  3. Зафиксируйте SHA256 хэши тест-скриптов в run_multitest() после первого прогона
  4. Используйте SAFE sysctl профиль, если не уверены что нужен HIGHLOAD
  5. Не запускайте на продакшене без снапшота / бэкапа
  6. Проверяйте git log / git diff для UFW-manager перед запуском
  7. При ошибке apt — читайте хвост лога, который скрипт выводит в консоль (v3.2+), чините причину, запускайте снова

Зависимости

Скрипт скачивает код с:

  • download.docker.com — Docker GPG key
  • github.com/vernette/censorcheck
  • github.com/itdoginfo/russian-iperf3-servers
  • yabs.sh
  • bench.sh
  • ipregion.vrnt.xyz
  • ip.check.place / check.place
  • github.com/Balbuto/ufw-manager

Все через HTTPS, с верификацией. Список может меняться — смотрите run_multitest() в актуальной версии.

There aren't any published security advisories