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

61 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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).