OWASP Top 10
Open Web Application Security Project (OWASP) публикует Top 10 — регулярно обновляемый список наиболее критичных рисков безопасности веб-приложений. Редакция 2021 года — текущий стандарт, на который ссылаются регуляторы безопасности по всему миру.
Как QA-инженеру, знание OWASP Top 10 позволяет систематически тестировать самые распространённые и опасные уязвимости.
A01:2021 — Broken Access Control (Нарушение контроля доступа)
Что это: Пользователи действуют за пределами разрешений — просматривают чужие данные, изменяют записи, повышают привилегии до админа.
Как тестировать: Менять ID пользователей в URL (/api/users/123 на /api/users/124), пробовать админ-эндпоинты обычным пользователем, тестировать горизонтальный доступ: может ли User A видеть заказы User B?
A02:2021 — Cryptographic Failures (Криптографические сбои)
Что это: Чувствительные данные не защищены — передаются в открытом виде, хранятся без шифрования, используются слабые алгоритмы.
Как тестировать: Проверить HTTPS везде, искать чувствительные данные в URL, проверить хеширование паролей (bcrypt/Argon2, не MD5), проверить флаги cookies (Secure, HttpOnly).
A03:2021 — Injection (Инъекция)
Что это: Недоверенные данные отправляются интерпретатору. SQL injection, XSS, command injection.
Как тестировать: Ввести ' OR 1=1 -- в поля логина, <script>alert('XSS')</script> в текстовые поля, спецсимволы во все параметры.
Ключевой принцип: Тестировать каждое поле ввода, URL-параметр, заголовок и значение cookie инъекционными пейлоадами.
A04:2021 — Insecure Design (Небезопасный дизайн)
Что это: Изъяны в самом дизайне, не баги реализации. Отсутствие моделирования угроз, небезопасная бизнес-логика.
Как тестировать: Можно ли использовать промокод многократно? Есть ли rate limit на сброс пароля? Могут ли боты автоматизировать регистрацию?
A05:2021 — Security Misconfiguration (Неправильная конфигурация)
Что это: Отсутствие hardening, лишние функции, дефолтные аккаунты, избыточные сообщения об ошибках.
Как тестировать: Дефолтные учётные данные, ненужные HTTP-методы, листинг директорий, открытые интерфейсы управления, версии серверов в заголовках.
A06:2021 — Vulnerable and Outdated Components (Уязвимые компоненты)
Что это: Использование библиотек и фреймворков с известными уязвимостями.
Как тестировать: npm audit, pip check, Snyk, Dependabot, проверка версий CDN-библиотек.
A07:2021 — Authentication Failures (Сбои аутентификации)
Что это: Слабости аутентификации — допускаются слабые пароли, нет защиты от брутфорса.
Как тестировать: Пробовать тривиальные пароли, 50+ неудачных попыток входа, проверить смену ID сессии после логина.
A08:2021 — Software and Data Integrity Failures (Нарушение целостности)
Что это: Код и инфраструктура без защиты целостности — небезопасные пайплайны CI/CD, небезопасная десериализация.
A09:2021 — Security Logging and Monitoring Failures (Сбои логирования)
Что это: Недостаточное логирование событий безопасности не позволяет обнаружить атаки.
Как тестировать: Спровоцировать неудачный логин — логируется ли? Попытка несанкционированного доступа — логируется с деталями?
A10:2021 — Server-Side Request Forgery (SSRF)
Что это: Атакующий заставляет сервер отправлять запросы к непредусмотренным ресурсам.
Как тестировать: В любом поле ввода URL пробовать внутренние адреса (http://localhost, http://169.254.169.254).
Упражнение: Протестировать 5 уязвимостей OWASP
Используя намеренно уязвимое приложение (OWASP Juice Shop), протестируйте 5 разных рисков из OWASP Top 10.
Подготовка
docker run --rm -p 3000:3000 bkimminich/juice-shop
Задание
Найдите и задокументируйте минимум одну уязвимость для каждой из категорий: A01 (Broken Access Control), A03 (Injection), A05 (Security Misconfiguration), A07 (Authentication Failures) и ещё один любой риск.
Подсказка: Где искать в Juice Shop
- A01: Попробуйте получить доступ к админ-разделу, посмотрите отзывы других пользователей
- A03: Поисковая строка — хорошая цель для инъекции
- A05: Проверьте заголовки ответов и сообщения об ошибках
- A07: Создайте аккаунт с очень слабым паролем
- API-вызовы: Откройте DevTools вкладку Network и наблюдайте запросы
Решение: 5 найденных уязвимостей
1. A01: Доступ к корзинам других пользователей
- Шаги: Залогиниться. Изменить basket ID в
/api/BasketItems. - Влияние: Любой аутентифицированный пользователь может видеть и изменять чужие корзины.
- Исправление: Сервер должен проверять принадлежность корзины пользователю.
2. A03: SQL Injection в поиске
- Шаги: Ввести
' OR 1=1--в поисковую строку. - Влияние: Возвращает все продукты, включая скрытые.
- Исправление: Параметризованные запросы.
3. A05: Подробные сообщения об ошибках
- Шаги: Отправить невалидный JSON на
/api/Users. - Влияние: Ответ содержит стектрейсы и детали фреймворка.
- Исправление: Возвращать пользователю общие сообщения.
4. A07: Нет требований к сложности пароля
- Шаги: Зарегистрироваться с паролем “1”. Приложение принимает.
- Исправление: Минимальные требования (8+ символов, смешанный регистр, цифры).
5. A02: Чувствительные данные в API обратной связи
- Шаги: Просмотреть
/api/Feedbacks. Email-адреса пользователей включены в ответ. - Исправление: Убрать email из публичного API ответа.
Профессиональные советы
- OWASP Juice Shop для практики: Намеренно уязвимое приложение со 100+ заданиями — лучший инструмент для обучения тестированию безопасности.
- Маппинг тестов на OWASP: Организуйте тест-кейсы по категориям OWASP для систематического покрытия.
- OWASP Testing Guide: Руководство WSTG содержит детальные процедуры тестирования для каждого риска.
- Фокус на A01 и A03: Broken Access Control и Injection — самые частые и опасные. Если время ограничено, тестируйте их тщательно.
- Автоматизируйте что можно: OWASP ZAP автоматически сканирует injection и misconfiguration. Фокусируйте ручное тестирование на контроле доступа и бизнес-логике.