Files
glchat/SECURITY.md
T
grendervill 9839dbeede chore(repo): структура репозитория, лицензия AGPL-3.0 и политика безопасности
- структура по AGENT.md §12: cmd/, internal/, web/, deploy/, queries/, docs/
- LICENSE: полный текст AGPL-3.0-or-later
- NOTICE: атрибуция референсов (Spacebar, Fermo) и сторонних компонентов
- SECURITY.md и .well-known/security.txt: правила раскрытия уязвимостей
- .env.example: все переменные окружения с дефолтами
- .gitignore/.dockerignore/.editorconfig/.gitattributes/.gitleaks.toml
2026-09-19 18:20:52 +03:00

4.5 KiB
Raw Blame History

Security Policy

glchat — self-hosted инстанс: его безопасность зависит от того, как он развёрнут и обновляется. Ниже — что считается уязвимостью, как сообщить о ней и какие механизмы защиты уже встроены.

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

Не открывайте публичный issue. Напишите на security@gl.mhspx.su (PGP-ключ публикуется по запросу) и укажите:

  • версию (GET /api/v1/meta → version), ОС и способ установки;
  • шаги воспроизведения и ожидаемое/фактическое поведение;
  • оценку влияния (что можно прочитать/изменить/сломать);
  • при наличии — PoC и логи (без секретов и персональных данных).

Ответ в течение 72 часов; исправление критичных проблем — вне очереди функциональных задач. Пожалуйста, дайте время на выпуск исправления до публичного раскрытия (90 дней или по согласованию).

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

Исправления безопасности выпускаются для последнего стабильного релиза (канал stable) и текущего beta. Перед обновлением всегда делайте бэкап: glchat backup.

Встроенные механизмы защиты

  • Пароли: только Argon2id с pepper (pepper хранится вне БД); обратимое шифрование паролей запрещено; локальная проверка по словарю утечек.
  • PII: email, TOTP-секреты и OAuth-токены — AES-256-GCM (master key в env), поиск по email — blind index (HMAC-SHA-256).
  • Сессии: в БД только хэши токенов; ротация при входе и step-up; «выйти везде»; автоматический отзыв при смене пароля.
  • 2FA TOTP обязательна для инстанс-администраторов; step-up для чувствительных действий; passkeys — после MVP.
  • Загрузки: MIME allow-list + проверка magic bytes, лимиты размера и пикселей, запрет SVG и исполняемых типов, отдача не-изображений как attachment, отдельный origin files.<domain> для пользовательского контента.
  • Сеть: TLS везде, HSTS, CSP без unsafe-eval, строгая проверка Origin, точный CORS-allowlist, rate limiting, fail2ban (sshd, glchat-auth, recidive), UFW + правила DOCKER-USER + nftables-лимиты.
  • Секреты: генерируются установщиком, лежат в .env с правами 600, не логируются.
  • Бэкапы: age-шифрование; приватный ключ по умолчанию не хранится на сервере.

Область ответственности владельца инстанса

  • Сохранность приватного age-ключа бэкапов и master key (без них данные не восстановить и не расшифровать).
  • Обновление ОС и контейнеров, проверка отчётов glchat security-check.
  • Настройка внешнего firewall провайдера, если он есть.
  • Своевременный разбор отчётов fail2ban и аудит-лога.

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

  • Данные, доступные инстанс-администратору на серверах инстанса: это документированное поведение (AGENT.md §7.19). Чужие DM и приватные /ls сообщения администратору недоступны — их утечка является уязвимостью.
  • Атаки, требующие физического доступа к серверу или root-прав.
  • Отсутствие E2EE: продукт явно не использует E2EE (только TLS + DTLS-SRTP).