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. Фокусируйте ручное тестирование на контроле доступа и бизнес-логике.