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Резервное копирование