9839dbeede
- структура по 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
4.5 KiB
4.5 KiB
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, отдельный originfiles.<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).