Skip to content

Security: paulmann/regru-control

Security

SECURITY.md

Политика безопасности

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

Версия Поддержка
1.x да

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

Не открывайте публичный issue. Напишите владельцу репозитория приватно (контакт указан в профиле GitHub) и приложите: версию, шаги воспроизведения, ожидаемое и фактическое поведение. Ответ — в течение 72 часов.

Модель угроз

Панель хранит доступы к регистратору и хостингам, поэтому рассматривается как секретный административный инструмент, а не публичный сервис.

Угроза Защита
Утечка пароля REG.RU из БД/бэкапа libsodium secretbox; ключ только в .env (0600), вне БД и git
Утечка паролей из хранилища шифрование с привязкой к id записи; список API не содержит паролей
Кража API-токена хранится только SHA-256; plaintext показывается один раз; scope-ограничение; отзыв
Подбор пароля панели Argon2id, лимит попыток, блокировка аккаунта, задержка ответа
CSRF SameSite=Strict cookie + X-CSRF-Token; Bearer-запросы не подвержены CSRF
XSS строгий CSP без unsafe-inline; данные в DOM попадают только текстовыми узлами (h())
Кликджекинг X-Frame-Options: DENY, frame-ancestors 'none'
Утечка через логи редакция ключей password/secret/token/…, тела запросов не логируются
Перебор API лимит на токен/IP, 429 с Retry-After
Компрометация REG.RU API белый список IP в настройках REG.RU; локальный предохранитель 1100 запросов/час
Злоупотребление раскрытием секретов отдельный scope secrets:read; каждое чтение в audit_log (актор, IP, время)

Что НЕ является угрозой в рамках модели

  • Доступ администратора к серверу: он и так может прочитать .env и БД.
  • Атака на сам REG.RU API или его TLS.
  • Утечка через браузер пользователя, заражённый расширениями.

Обязательные настройки при развёртывании

  1. APP_ENV=production, APP_DEBUG=0.
  2. APP_KEY — 32 случайных байта, chmod 600 .env.
  3. SESSION_SECURE=1 и HTTPS.
  4. Ограничение доступа к панели в nginx: allow только доверенным сетям/адресам, deny all для остальных; каталоги backend/, frontend/, var/, docs/ и dotfiles закрыты.
  5. Разрешить в REG.RU API только IP сервера.
  6. Резервные копии — вне веб-корня, с теми же правами, что и .env.
  7. Cron-синхронизация — под отдельным пользователем сайта, без доступа к shell.

Реакция на инцидент

  1. Отозвать все API-токены: regru token:list → token:revoke --id.
  2. Сменить пароль панели и пароль REG.RU API; в настройках REG.RU обновить белый список IP.
  3. Сменить APP_KEY только вместе с перешифровкой: без старого ключа пароли в БД не восстановить. Если ключ скомпрометирован — считайте все сохранённые пароли раскрытыми и смените их у провайдеров/панелей.
  4. Проверить audit_log за период, особенно credential.reveal, hosting.reveal, auth.login, token.create.
  5. Восстановить БД из проверенной резервной копии при признаках изменения данных.

Ограничения

  • Приложение не защищает от вредоносного кода с правами пользователя сайта (site_user): он читает .env.
  • Приватность: при включённом внешнем rerank/embedding у поисковых провайдеров данные могут уходить с сервера — это не относится к панели, но учитывайте при интеграциях.
  • REG.RU не возвращает пароли панелей для всех типов услуг; если API их не отдал, пароль можно сохранить вручную — он будет зашифрован так же.

There aren't any published security advisories