Skip to main content
LadeStack LogoLadeStack
Security in Web Apps 12 мин чтения 17 ноября 2024 г.

OWASP Top 10: Полное руководство по нейтрализации уязвимостей веб-приложений (Редакция 2025)

Детальный инженерный разбор официальных категорий OWASP Top 10:2025: безопасность цепочек поставок ПО, анализ первопричин, безопасное кодирование и эшелонированная оборона.

Архитектура безопасности веб-приложений OWASP Top 10:2025

1. За рамками формального чек-листа: Безопасность как архитектурный фундамент

OWASP Top 10:2025 — это общепризнанный международный стандарт классификации наиболее критических рисков безопасности современных веб-систем, API и cloud-native архитектур. Однако серьезная ошибка многих инженерных команд — восприятие OWASP Top 10 как исчерпывающего чек-листа соответствия.

Успешное прохождение автоматического сканера не гарантирует безопасность продукта. OWASP Top 10 — это классификатор архитектурных сбоев с высоким уровнем ущерба. Надежная защита требует реализации концепции эшелонированной обороны (Defense-in-Depth), безопасного жизненного цикла разработки (Secure SDLC), непрерывного моделирования угроз (Threat Modeling) и строгой валидации на всех границах технологического стека.

+--------------------------------------------------------------------------+
|                  Многоуровневая эшелонированная оборона                  |
+------------------------------------+-------------------------------------+
                                     |
    Уровень 1: Сеть и периметр       v
    [ WAF / Защита от DDoS / TLS 1.3 / Ограничение скорости запросов ]
                                     |
    Уровень 2: Транспорт и шлюз      v
    [ API Gateway / Валидация OAuth 2.0 & OIDC / Взаимный TLS (mTLS) ]
                                     |
    Уровень 3: Приложение и логика   v
    [ Строгая валидация ввода / Параметризованные SQL-запросы / RBAC & ABAC ]
                                     |
    Уровень 4: Данные и хранилище    v
    [ Шифрование полей / Минимальные привилегии БД / Управление ключами Vault ]

2. Официальные категории OWASP Top 10:2025 и инженерные меры защиты

Ниже приведен детальный разбор всех десяти категорий официального стандарта OWASP Top 10:2025 (A01:2025 — A10:2025) с анализом первопричин, примерами безопасного кода и превентивными инженерными практиками.


A01:2025 – Broken Access Control (Нарушение контроля доступа)

Нарушение контроля доступа сохраняет позицию #1 в редакции 2025 года. Уязвимость возникает, когда политики авторизации отсутствуют, некорректно настроены или делегированы логике клиентской стороны, что позволяет злоумышленникам получать несанкционированный доступ к конфиденциальным данным или выполнять привилегированные административные действия. В стандарте 2025 года подделка запросов на стороне сервера (SSRF) официально включена в эту категорию как механизм обхода контроля доступа к внутренним сетям и сервисам метаданных (IMDS).

  • Типичные первопричины:
    • Небезопасные прямые ссылки на объекты (IDOR): доверие переданным клиентом идентификаторам без проверки принадлежности тенанту.
    • Отсутствие контроля доступа на уровне функций: открытие административных эндпоинтов (/admin/deleteUser) без проверки ролей.
    • Доступ к метаданным через SSRF: выполнение исходящих сетевых запросов по произвольным URL без блокировки частных IP-диапазонов (RFC 1918) и сервиса метаданных облачных инстансов (IMDS).
  • Безопасная архитектура: Централизованные проверки авторизации (RBAC или ABAC), строго привязанные к слою запросов к базе данных.
// БЕЗОПАСНО: Ограничение выборки контекстом тенанта и пользователя в SQL-запросе
async function getUserInvoice(invoiceId: string, authenticatedUserId: string, authenticatedTenantId: string) {
  // Никогда не запрашивайте данные только по invoiceId; всегда связывайте с tenant_id и user_id
  const invoice = await db.query(
    `SELECT id, amount, status, created_at 
     FROM invoices 
     WHERE id = $1 AND user_id = $2 AND tenant_id = $3`,
    [invoiceId, authenticatedUserId, authenticatedTenantId]
  );

  if (!invoice.rows.length) {
    throw new NotFoundOrForbiddenException('Ресурс не найден или доступ запрещен');
  }

  return invoice.rows[0];
}

A02:2025 – Security Misconfiguration (Неправильная настройка безопасности)

Поднявшись на 2-е место в редакции 2025 года, неправильная настройка безопасности отражает растущую сложность мультиоблачных сред, контейнеров и микросервисных сетей, где небезопасные параметры по умолчанию открывают критические бреши.

  • Типичные первопричины:
    • Сохранение стандартных паролей администратора в базах данных или промежуточном ПО в production.
    • Подробные сообщения об ошибках, отображающие внутренние трассировки стека (stack trace), структуру БД или переменные окружения.
    • Открытые хранилища объектов (S3 buckets), поды Kubernetes с root-привилегиями или отсутствие заголовков безопасности.
  • Эффективные меры защиты:
    • Автоматизация укрепления инфраструктуры с помощью кода (Terraform, OpenTofu, Pulumi).
    • Полное удаление эндпоинтов отладки и стектрейсов из production-сборок; маппинг ошибок на универсальные ID.
    • Развертывание строгого набора HTTP-заголовков безопасности:
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'none';
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Referrer-Policy: strict-origin-when-cross-origin
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

A03:2025 – Software Supply Chain Failures (Сбои в цепочке поставок ПО)

Ключевая новая категория редакции 2025 года, существенно расширяющая прежний пункт «Уязвимые и устаревшие компоненты». Охватывает риски по всей цепочке создания ПО: внедрение вредоносных пакетов, скомпрометированные зависимости, зараженные конвейеры CI/CD, атаки типа Dependency Confusion и отсутствие отслеживаемости артефактов сборки.

  • Типичные первопричины:
    • Установка непроверенных сторонних библиотек или пакетов с тайпосквоттингом из открытых реестров (npm, PyPI).
    • Выполнение шагов CI/CD с незафиксированными плавающими тегами (например, uses: actions/checkout@v4 вместо SHA коммита).
    • Отсутствие автоматизированного создания спецификаций программного обеспечения (SBOM) и мониторинга уязвимостей.
  • Эффективные меры защиты:
    • Обязательное использование криптографически верифицированных lockfile (package-lock.json, pnpm-lock.yaml) с проверкой контрольных сумм.
    • Внедрение непрерывного анализа состава ПО (SCA) в CI/CD (Trivy, Snyk, Dependabot).
    • Фиксация внешних действий CI/CD по полному 40-значному SHA коммита.
    • Генерация машиночитаемых SBOM (CycloneDX / SPDX) и электронная подпись релизных артефактов через Sigstore/Cosign.
# Пример шага GitHub Actions с фиксацией SHA коммита и сканированием уязвимостей
- name: Checkout Code
  uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Run Trivy Vulnerability Scanner
  uses: aquasecurity/trivy-action@d43c1f16c00cfd3978dde6c07f4bbcf9eb6993ca
  with:
    scan-type: 'fs'
    ignore-unfixed: true
    severity: 'CRITICAL,HIGH'

A04:2025 – Cryptographic Failures (Криптографические сбои)

Связана с неспособностью защитить конфиденциальные данные при передаче, в состоянии покоя или в процессе обработки с помощью современных криптографических алгоритмов и безопасного управления ключами.

  • Типичные первопричины:
    • Использование устаревших или взломанных алгоритмов хеширования (MD5, SHA1) для паролей или контроля целостности.
    • Применение небезопасных режимов симметричного шифрования (например, AES в режиме ECB вместо режима GCM с аутентификацией).
    • Жестко закодированные ключи в исходном коде или хранение секретов в открытом виде.
  • Эффективные меры защиты:
    • Пароли: Хеширование исключительно современными memory-hard алгоритмами: Argon2id (рекомендуется), scrypt или bcrypt с высоким фактором сложности.
    • Данные в передаче: Принудительное использование TLS 1.3 с Forward Secrecy; запрет устаревших шифронаборов.
    • Данные в покое: Применение AES-256-GCM или ChaCha20-Poly1305 с конвертным шифрованием и регулярной ротацией ключей через облачный KMS или HashiCorp Vault.

A05:2025 – Injection (Инъекции)

Инъекции возникают, когда ненадежные данные пользователя интерпретируются исполняющим движком (SQL, NoSQL, командная оболочка ОС, LDAP, XPath или GraphQL) как команды или управляющие структуры запроса.

  • Типичные первопричины:
    • Конкатенация строк при формировании SQL-запросов ("SELECT * FROM users WHERE name = '" + input + "'").
    • Передача неочищенного пользовательского ввода напрямую в вызовы системного shell (child_process.exec("ping " + host)).
  • Эффективные меры защиты:
    • Исключительное использование параметризованных запросов (Prepared Statements) или ORM с контролем типов.
    • Строгая валидация входящих данных на границах системы с помощью схем (Zod, JSON Schema).
    • Контекстно-зависимое экранирование вывода при рендеринге в HTML, JavaScript или CSS.
// БЕЗОПАСНО: Параметризованный SQL-запрос с подготовленными выражениями
const result = await pool.query(
  'SELECT id, email, role FROM users WHERE email = $1 AND active = $2',
  [sanitizedEmail, true]
);

A06:2025 – Insecure Design (Небезопасная архитектура)

Категория охватывает фундаментальные архитектурные изъяны и ошибки бизнес-логики, которые невозможно устранить простыми патчами кода, поскольку безопасность была проигнорирована на стадии проектирования.

  • Типичные первопричины:
    • Отсутствие ограничений в критических бизнес-процессах (сброс пароля или подтверждение OTP без лимита запросов).
    • Предположение, что внутренняя микросервисная сеть априори доверенная (отсутствие принципов Zero Trust).
    • Отсутствие защиты от автоматизированных атак на ценные финансовые операции или регистрацию аккаунтов.
  • Эффективные меры защиты:
    • Проведение моделирования угроз STRIDE (Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, Elevation of Privilege) на этапе проектирования.
    • Реализация принципа безопасных настроек по умолчанию (Secure Defaults): закрытие доступа при сбоях (fail-closed) и обязательная MFA.

A07:2025 – Authentication Failures (Сбои аутентификации)

Уточненное название прежней категории «Сбои идентификации и аутентификации». Сфокусирована на уязвимостях протоколов проверки подлинности, перехвате сессий и проверке учетных данных.

  • Типичные первопричины:
    • Допуск слабых паролей без проверки энтропии или сверки с базами утечек (HaveIBeenPwned).
    • Небезопасное управление сессиями: предсказуемые токены, отсутствие ротации, неудаление сессий при выходе.
    • Отсутствие многофакторной аутентификации (MFA) для учетных записей с административными правами.
  • Эффективные меры защиты:
    • Обязательное внедрение MFA через TOTP (RFC 6238) или аппаратные ключи FIDO2/WebAuthn.
    • Генерация криптографически стойких случайных токенов сессий (не менее 128 бит энтропии) в куках HttpOnly; Secure; SameSite=Strict.
    • Требование потока Authorization Code с PKCE (S256) для OAuth 2.0 / OpenID Connect.

A08:2025 – Software or Data Integrity Failures (Сбои целостности ПО или данных)

Категория связана с предположениями об обновлениях ПО, критических конвейерах данных и сериализованных объектах без предварительной криптографической верификации их подлинности.

  • Типичные первопричины:
    • Небезопасная десериализация: прием и развертывание бинарных сериализованных объектов из недоверенных сетевых источников.
    • Механизмы автообновления, загружающие исполняемые файлы по незашифрованному HTTP или без проверки цифровой подписи.
    • Принятие неподписанных токенов JWT (alg: "none") или уязвимость к атакам подмены алгоритма (RS256 vs HS256).
  • Эффективные меры защиты:
    • Полный запрет бинарной десериализации недоверенных данных; переход на строгий парсинг JSON с валидацией схем.
    • Обязательная проверка цифровых подписей и хеш-сумм внешних исполняемых файлов и образов контейнеров.
    • Явный белый список допустимых криптографических алгоритмов в библиотеках валидации JWT.

A09:2025 – Security Logging and Alerting Failures (Сбои ведения журналов и оповещения)

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

  • Типичные первопричины:
    • Отсутствие фиксации критических событий (неудачные входы, отказы в доступе, повышение привилегий).
    • Запись конфиденциальных учетных данных (паролей, сессионных токенов, платежных данных) в логи.
    • Хранение журналов исключительно на локальных дисках серверов, где атакующие могут удалить цифровые улики.
  • Эффективные меры защиты:
    • Ведение структурированных JSON-журналов с метками времени, типом события, ID актора, IP клиента и трейс-идентификатором.
    • Потоковая передача логов в режиме реального времени в централизованную неизменяемую SIEM-систему (Elasticsearch, Splunk, Datadog).
    • Настройка автоматических правил оповещения в реальном времени при аномалиях (> 10 неудачных входов за 60 секунд с подсети).

A10:2025 – Mishandling of Exceptional Conditions (Некорректная обработка исключительных ситуаций)

Новая важнейшая категория, введенная в стандарте OWASP Top 10:2025 (заняла 10-е место после включения SSRF в категорию нарушения контроля доступа). Она посвящена уязвимостям, возникающим из-за ненадлежащей обработки ошибок, необработанных исключений, неожиданных граничных условий и перехода системы в состояние открытого доступа при сбое (fail-open).

  • Типичные первопричины:
    • Состояние открытого доступа при сбое (Fail-Open): когда фильтр аутентификации или авторизации падает на неожиданном входе (например, null pointer или поврежденный токен), система пропускает проверки безопасности и перенаправляет запрос дальше.
    • Состояния гонки (Race Conditions) и рассинхронизация: конкурентные запросы, использующие окно между проверкой и использованием (TOCTOU) для двойного списания баланса или обхода лимитов.
    • Исчерпание ресурсов: отсутствие квот по памяти, процессору или тайм-аутов соединений при неограниченных операциях ввода-вывода (DoS).
  • Эффективные меры защиты:
    • Внедрение архитектуры с закрытием доступа при сбое (Fail-Closed Architecture): любое необработанное исключение должно приводить к немедленному запрету доступа (HTTP 500/403).
    • Блокировка строк на уровне базы данных (SELECT FOR UPDATE) или распределенные блокировки (Redis Redlock) для предотвращения гонок при изменении состояния.
    • Строгие квоты ресурсов, ограничение размера тела запроса и сокетные тайм-ауты на всех внешних сетевых операциях.
// БЕЗОПАСНО: Middleware авторизации, реализующий принцип закрытия доступа при сбое (Fail-Closed)
export async function enforcePolicyMiddleware(req: Request, res: Response, next: NextFunction) {
  let isAuthorized = false; // По умолчанию доступ закрыт (Fail-Closed)

  try {
    const user = extractAuthenticatedUser(req);
    isAuthorized = await policyEngine.evaluate(user, req.path, req.method);
  } catch (error) {
    // Безопасно логируем сбой вместе с ID трассировки
    logger.error('Критический сбой механизма оценки политик безопасности', { error, path: req.path });
    isAuthorized = false; // Явно гарантируем, что флаг авторизации остается false
  }

  if (!isAuthorized) {
    return res.status(403).json({ error: 'Доступ запрещен: политика безопасности отклонила запрос' });
  }

  next();
}

3. Историческое сравнение: OWASP Top 10 2021 и 2025

Категория 2021 Категория 2025 Основные структурные изменения
A01:2021 – Broken Access Control A01:2025 – Broken Access Control Сохраняет 1-е место; поглощает SSRF как механизм обхода прав доступа.
A05:2021 – Security Misconfiguration A02:2025 – Security Misconfiguration Поднялась на 2-е место из-за сложности мультиоблаков, контейнеров и сетей микросервисов.
A06:2021 – Vulnerable and Outdated Components A03:2025 – Software Supply Chain Failures Переработана для охвата рисков цепочки поставок, CI/CD и внедрения спецификаций SBOM.
A02:2021 – Cryptographic Failures A04:2025 – Cryptographic Failures Сместилась на 4-е место; сохраняет фокус на защите данных, современных шифрах и KMS.
A03:2021 – Injection A05:2025 – Injection Сместилась на 5-е место; параметризация запросов и валидация схем остаются обязательными.
A04:2021 – Insecure Design A06:2025 – Insecure Design Заняла 6-е место; требует моделирования угроз STRIDE до написания кода.
A07:2021 – Identification and Authentication Failures A07:2025 – Authentication Failures Упрощенное название; обязательная MFA (TOTP/WebAuthn), энтропия сессий и протокол PKCE.
A08:2021 – Software and Data Integrity Failures A08:2025 – Software or Data Integrity Failures Фокус на неподписанных артефактах, опасной десериализации и верификации сборки.
A09:2021 – Security Logging and Monitoring Failures A09:2025 – Security Logging and Alerting Failures Переименована для акцента на активном оповещении в реальном времени.
A10:2021 – Server-Side Request Forgery (SSRF) A10:2025 – Mishandling of Exceptional Conditions Новая 10-я категория по обработке ошибок и fail-open состояниям. SSRF перенесен в A01.

4. Ограничения автоматических сканеров

Инструменты динамического (DAST) и статического (SAST) анализа обеспечивают важный базовый мониторинг, но не способны защитить систему в одиночку:

  1. Уязвимости бизнес-логики: Сканеры не способны понять, имеет ли аутентифицированный пользователь законное право менять баланс или менять идентификатор тенанта.
  2. Контекстно-слепая авторизация: Автоматические инструменты с трудом различают публичные данные и закрытые объекты конкретного тенанта.
  3. Усталость от предупреждений: Сотни низкоприоритетных предупреждений отвлекают разработчиков от критических архитектурных изъянов.

Комплексная безопасность строится на объединении автоматических проверок с экспертным моделированием угроз, строгим рецензированием кода и периодическим независимым пентестингом.


Итоговый чек-лист OWASP Top 10:2025

  • A01 Нарушение контроля доступа: Изоляция тенантов на уровне запросов к БД; фильтрация исходящих запросов SSRF.
  • A02 Неправильная настройка безопасности: Базовое укрепление с IaC; скрытие отладочных данных; заголовки CSP и HSTS.
  • A03 Сбои в цепочке поставок ПО: Проверка lock-файлов; фиксация шагов CI/CD по SHA коммита; генерация SBOM.
  • A04 Криптографические сбои: Хеширование Argon2id/bcrypt; принудительный TLS 1.3; конвертное шифрование данных.
  • A05 Инъекции: Обязательные параметризованные SQL-запросы; строгая валидация по схемам; запрет конкатенации.
  • A06 Небезопасная архитектура: Интеграция моделирования STRIDE; безопасные настройки транзакций по умолчанию.
  • A07 Сбои аутентификации: Обязательная MFA; высокоэнтропийные куки HttpOnly; Secure; SameSite=Strict.
  • A08 Сбои целостности ПО или данных: Запрет бинарной десериализации; подпись релизных образов через Cosign.
  • A09 Сбои ведения журналов и оповещения: Структурированные JSON-журналы; отправка в SIEM; автоматические алерты.
  • A10 Некорректная обработка исключительных ситуаций: Fail-closed обработка исключений; блокировки конкурентности; квоты ресурсов.

Официальные источники (Проверено в октябре 2026 г.)

More Engineering Articles