A05: Security Misconfiguration

Часто система уязвима не из-за бага в коде, а из-за неаккуратных настроек.

Security Misconfiguration — небезопасная конфигурация: настройки по умолчанию, лишние функции, подробные сообщения об ошибках и открытые сервисы, облегчающие атаку.

Эта категория особенно коварна, потому что код может быть идеальным, а сервер при этом отдаёт всем стек-трейс с путями к файлам или работает с дефолтным паролем admin/admin.

Типичные ошибки конфигурации

  • Дефолтные учётные данные, которые не сменили (admin/admin, root без пароля).
  • Подробные сообщения об ошибках в проде: стек-трейсы, версии ПО, пути файлов.
  • Включённый режим отладки (DEBUG) на боевом сервере.
  • Открытые порты и сервисы, которые не используются.
  • Каталоги с листингом файлов, доступные бэкапы и .git-папки.
  • Отсутствие заголовков безопасности (о них — отдельный урок).

Подробные ошибки — подарок атакующему

Сообщение «ошибка в файле /app/db/connection.py, строка 42, пароль БД неверный» рассказывает злоумышленнику об архитектуре. На проде пользователь должен видеть нейтральное «Что-то пошло не так», а детали — только в защищённых логах.

Пользователю: "Произошла ошибка. Попробуйте позже."
В лог (только для нас): полный стек-трейс, идентификатор запроса

Hardening: усиление конфигурации

Hardening — приведение системы в защищённое состояние: убрать лишнее, закрыть ненужное, сменить дефолты. Это рутинный, но обязательный процесс.

Как защищаться

  • Отключите DEBUG и подробные ошибки на проде.
  • Смените все дефолтные пароли и удалите тестовые аккаунты.
  • Закройте неиспользуемые порты, эндпоинты и сервисы (сокращайте поверхность атаки).
  • Запретите листинг каталогов; уберите доступ к .git, бэкапам, дампам.
  • Автоматизируйте конфигурацию (infrastructure as code), чтобы окружения были одинаковыми и воспроизводимыми.
# Пример: отключить листинг каталогов и закрыть служебные пути
# (конфиг веб-сервера; смысл — не отдавать лишнее)
autoindex off;
location ~ /\.git { deny all; }

Частые ошибки разработчиков

  • Оставляют DEBUG=True на проде, и сайт отдаёт стек-трейсы всем подряд.
  • Деплоят с дефолтными паролями «временно», и это «временно» остаётся навсегда.
  • Забывают про .git, .env и бэкапы, доступные по прямому URL.

Итог

  • Misconfiguration — уязвимость в настройках, а не в коде.
  • На проде: без DEBUG, без подробных ошибок, без дефолтных паролей.
  • Hardening и сокращение поверхности атаки — постоянная практика.
Проверьте себя
1. Почему подробные сообщения об ошибках опасны на проде?
AОни замедляют сайт
BОни раскрывают злоумышленнику архитектуру: пути, версии, структуру
CОни занимают место в логах
DОни не опасны
2. Что такое hardening?
AШифрование диска
BПриведение системы в защищённое состояние: убрать лишнее, сменить дефолты
CУвеличение мощности сервера
DРезервное копирование