# 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.` для пользовательского контента. - **Сеть:** 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).