Skip to content

Security: yellow444/epgu

Security

docs/security.md

Безопасность

Криптографические операции

Операция Инструмент Примечание
Хранение закрытого ключа КриптоПро CSP, контейнер xxx.000 Монтируется в /var/opt/cprocsp/keys/app/
Подпись api_key для ЕСИА pycades.Signer + CADESCOM_CADES_BES, detached base64 → urlsafe base64
Метка времени TSA TSAAddress CAdES-T при необходимости
Валидация XML lxml.XMLSchema по piev_epgu.xsd Только для /push/chunked
TLS к ЕПГУ httpx, CA из test_ca_rtk3.cer (тест) В проде — корневые ФСБ/Минцифры

JWT (accessTkn ЕСИА)

  • Получается в обмен на подпись API-key.
  • Хранится в глобальной переменной процесса (ACCESS_TKN_ESIA).
  • Используется как Authorization: Bearer ... для всех вызовов svcdev_host.
  • На фронтенде декодируется только для отображения exp (никакой верификации — JWT подписывает ЕСИА).

Угрозы и меры

Угроза Оценка Меры
Утечка KeyPin через env высокая Использовать Docker secrets / Vault в prod
Утечка приватного ключа (volume) высокая Шифровать том, ограничить FS-права, не коммитить xxx.000
CSRF на backend средняя CORS сейчас *; в prod — whitelisting + CSRF-токен при необходимости
MITM к ЕПГУ низкая Только HTTPS + корневой CA
Повторная подача/replay средняя ЕПГУ отвечает дедупликацией по orderId; на стороне системы — идемпотентные ключи
Отсутствие аудита средняя Логировать все операции подписания с указанием пользователя/ключа
XXE / billion laughs средняя lxml.etree.fromstring без отключения внешних сущностей — рассмотреть XMLParser(resolve_entities=False)
Логирование PII средняя Не логировать тело заявления/PII в prod; маскировать

Рекомендации к коду

  • Включить XMLParser(resolve_entities=False, no_network=True) для защиты от XXE.
  • Перенести глобальное состояние в защищённое хранилище (Redis с TTL на токен).
  • Добавить проверку срока действия ACCESS_TKN_ESIA и авто-обновление.
  • Ограничить allow_origins и allow_methods CORS.
  • Хранить аудит операций подписания (кто, когда, какой сертификат, хэш данных).

Сертификаты CA

  • В backend-образ устанавливается test_ca_rtk3.cer (certenroll.test.gosuslugi.ru).
  • Для прод-контура заменить на действующие корневые сертификаты ЕСИА.

There aren't any published security advisories