Какие уязвимости ищут в коде
Когда речь идет о веб‑приложениях, разработчикам и CTO важно понимать не «общие уязвимости», а именно те десять классов проблем, которые чаще всего приводят к утечкам персональных данных, финансовым потерям, штрафам и дискредитации продукта. OWASP Top‑10‑2021 как раз и фокусируется на таких рисках, которые реально встречаются в production‑среде и которые должен закрывать ваш код, архитектура и процессы.
Топ-10 угроз по OWASP 2021
A01:2021 — Нарушение контроля доступа (Broken Access Control)
Когда пользователь получает больше, чем ему положено: просматривает чужие данные, редактирует заказы других клиентов или выполняет административные действия. Часто это просто манипуляция идентификаторами в URL или API, но последствия — несанкционированный доступ к ПДн, финансовым операциям и критичным функциям.
A02:2021 — Недостатки криптографии (Cryptographic Failures)
Хранение и передача чувствительных данных без корректного шифрования или с использованием слабых алгоритмов и ключей. Это открывает путь к чтению номеров карт, персональных данных и токенов, даже если пакетный перехват или доступ к логам и базам происходит «в тихом режиме».
A03:2021 — Инъекции (Injection)
Внедрение произвольного кода (SQL, NoSQL, OS‑команд, LDAP‑запросов) через входные данные пользователя. Атакующий может читать, изменять или удалять данные в базах, выполнять команды на сервере и получать доступ к закрытой бизнес‑логике.
A04:2021 — Небезопасный дизайн (Insecure Design)
Ошибки на уровне архитектуры и логики, когда сама схема приложения не предусматривает нормального контроля рисков: слабые ограничения по частоте действий, непродуманные денежные схемы, отсутствие верификации критичных операций. Это не «баг в коде», а заложенный бизнес‑риск, который потом очень сложно закрыть патчами.
A05:2021 — Неправильная конфигурация безопасности (Security Misconfiguration)
Открытые debug‑режимы, стандартные пароли, лишние порты, подробные stack‑трейсы и API‑документы, которые достаются в интернет. Всё это даёт злоумышленнику «карту» системы и сильно упрощает поиск точки входа и эксплуатации уже существующих уязвимостей.
A06:2021 — Уязвимые и устаревшие компоненты (Vulnerable and Outdated Components)
Использование библиотек, фреймворков и сторонних модулей с известными уязвимостями или без регулярного обновления. Уязвимость часто живёт не в вашем коде, а в зависимостях, но ответственность перед пользователями и регуляторами всё равно лежит на вашей организации.
A07:2021 — Ошибки идентификации и аутентификации (Identification and Authentication Failures)
Слабые схемы логина, неправильная работа с паролями, сессиями, токенами и MFA‑механизмами. В результате атакующий может подменить пользователя, перехватить сессию или подобрать учётные данные — и действовать от имени легального клиента или сотрудника.
A08:2021 — Нарушения целостности ПО и данных (Software and Data Integrity Failures)
Отсутствие контроля за тем, что именно загружается и выполняется: неподписанные обновления, модифицированные пакеты, подмена скриптов или образов. Это прямой путь к бэкдорам, скрытому майнингу и подмене логики приложения без ведома разработчиков.
A09:2021 — Ошибки логирования и мониторинга безопасности (Security Logging and Monitoring Failures)
Плохая регистрация событий, отсутствие детекта подозрительной активности и уведомлений. Система не даёт уязвимость сама по себе, но позволяет атаке пройти незамеченной — и бизнес узнаёт о масштабном инциденте уже тогда, когда ущерб нанесен, а доказательства искажены.
A10:2021 — Подделка запросов на стороне сервера (Server‑Side Request Forgery, SSRF)
Когда сервер выполняет сетевые запросы к внутренним ресурсам на основе несанкционированных данных пользователя. Это может привести к доступу к метаданным, административным интерфейсам, внутренним API и базам, даже если они не должны быть доступны извне.
Уязвимости бизнес‑логики и архитектурные ошибки
Помимо классических технических багов вроде SQL‑инъекций существует еще один опасный пласт проблем — уязвимости бизнес‑логики и архитектуры. Их редко находит автоматическое сканирование, потому что здесь ошибка не в конкретной функции, а в том, как работает процесс целиком.
Представьте интернет‑магазин. Пользователь оформляет заказ и попадает на страницу /order/123. Если достаточно просто изменить ID в URL на /order/122, чтобы увидеть чужой заказ с персональными данными, — это классический пример уязвимости бизнес‑логики и некорректного контроля доступа. Формально код может быть написан «чисто», но сама логика проверки прав отсутствует или реализована неверно.
К архитектурным уязвимостям относятся и такие сценарии, как:
- отсутствие разделения прав между сервисами и модулями
- хранение критичных секретов (ключи, токены) в общедоступных местах
- неправильно спроектированные потоки аутентификации и авторизации
- небезопасная обработка сессий и токенов в распределённых системах
Такие проблемы редко подсветит статический анализатор. Их выявляет только ручной анализ кода и архитектурный ревью: эксперт смотрит, как устроены основные сценарии (регистрация, оплата, изменение прав доступа, работа с балансом), строит модель угроз и проверяет, где пользователь или интеграционный сервис может выйти за рамки своих полномочий.