OWASP Top 10: главные уязвимости веб-приложений 2026
OWASP Top 10 — список самых критичных уязвимостей веб-приложений, обновляемый каждые 3–4 года международной некоммерческой организацией OWASP (Open Worldwide Application Security Project). Документ стал индустриальным стандартом: на нём строятся курсы безопасности, требования к разработчикам, политики compliance, чеклисты pentest’ов. Без понимания OWASP Top 10 невозможно писать безопасный код в 2026 году.
В этой статье — обзор актуальной редакции OWASP Top 10, разбор каждой категории с примерами уязвимостей, методы защиты на уровне кода и инфраструктуры, инструменты для автоматизированной проверки и типичные ошибки разработчиков в борьбе с этими рисками.
Что такое OWASP Top 10
OWASP Top 10 — список из 10 категорий уязвимостей, наиболее часто встречающихся и наиболее опасных в веб-приложениях. Список формируется на основе анализа тысяч реальных приложений по всему миру, с учётом частоты эксплуатации, потенциального ущерба и сложности обнаружения.
Документ обновляется каждые 3–4 года. Действующая редакция датируется 2021 годом; обновление до версии 2025 находится в активной разработке и ожидается к концу 2025–2026 года с учётом новых угроз: AI-prompt injection, supply chain attacks, vulnerabilities в LLM-приложениях.
OWASP Top 10 — не исчерпывающий список всех угроз, а priority guide. Помимо него существуют: OWASP Mobile Top 10 (для мобильных приложений), OWASP API Security Top 10 (для API), OWASP LLM Top 10 (для AI-приложений), и десятки других специализированных документов.
A01:2021 — Broken Access Control
Главная угроза по версии 2021 года. Возникает, когда пользователь может выполнять действия или получать доступ к данным, которые ему не должны быть доступны.
Типичные сценарии
- Изменение параметра в URL: /api/orders/123 → /api/orders/124, получение чужого заказа
- Прямой доступ к admin-endpoint через знание URL
- Privilege escalation: обычный пользователь получает права администратора
- Отсутствие проверки авторизации в JWT при изменении user_id
- CORS-настройки, разрешающие неавторизованные кросс-доменные запросы
Защита
- Принцип deny by default: доступ запрещён, если явно не разрешён
- Проверка авторизации на сервере для каждого ресурса, не только в UI
- Использование непредсказуемых идентификаторов (UUID вместо последовательных ID)
- Логирование попыток несанкционированного доступа
- Регулярные access control audits через automated и manual тестирование
A02:2021 — Cryptographic Failures
В прошлой редакции называлось «Sensitive Data Exposure». Касается всех аспектов работы с чувствительными данными и криптографией: пароли, токены, персональные данные, финансовая информация.
Типичные сценарии
- Хранение паролей в открытом виде или в слабом хеше (MD5, SHA-1)
- Передача данных по HTTP вместо HTTPS
- Использование устаревших протоколов TLS (SSL 3.0, TLS 1.0)
- Жёстко закодированные секреты в коде или конфигах
- Слабые алгоритмы шифрования (DES, RC4)
- Использование статических salts или предсказуемых IV
Защита
- Хранение паролей через bcrypt, scrypt, Argon2 (с правильными параметрами)
- HTTPS на всех страницах, HSTS-заголовок
- TLS 1.2+ только (предпочтительно TLS 1.3)
- Современные алгоритмы шифрования: AES-256, ChaCha20-Poly1305
- Secrets management через HashiCorp Vault, AWS Secrets Manager
- Регулярная ротация ключей
- Шифрование чувствительных данных at rest
A03:2021 — Injection
SQL injection, NoSQL injection, OS command injection, LDAP injection. Возникает, когда пользовательский ввод вставляется в команды или запросы без правильного экранирования.
Классический пример SQL injection
// Уязвимый код:
query = "SELECT * FROM users WHERE name = '" + userInput + "'";
// Атака: userInput = "' OR '1'='1"
// Результат: вернёт всех пользователей
Защита
- Prepared statements / parameterized queries. Главный способ защиты.
- ORM. Современные ORM (Sequelize, Prisma, SQLAlchemy, Hibernate) делают это автоматически.
- Input validation. Whitelist-валидация — что разрешено, а не что запрещено.
- Stored procedures с параметрами. Для legacy-кода.
- Least privilege для DB-пользователя. Приложение не должно иметь DROP TABLE прав.
- WAF (Web Application Firewall) как дополнительный слой защиты.
A04:2021 — Insecure Design
Новая категория 2021 года. Касается фундаментальных проблем в дизайне приложения, не связанных с реализацией. Можно идеально написать код, но если архитектура небезопасна — все стены могут оказаться картонными.
Примеры insecure design
- Отсутствие rate limiting на чувствительных операциях (вход, сброс пароля)
- Бизнес-логика, позволяющая отрицательные значения в платежах
- Восстановление пароля через знание ответа на «секретный вопрос» с публичными ответами
- Отсутствие многофакторной аутентификации для admin-аккаунтов
- Отсутствие threat modeling на этапе проектирования
Защита
- Threat modeling на этапе дизайна (STRIDE, PASTA, OCTAVE)
- Secure design patterns (defense in depth, principle of least privilege)
- Reference architectures с проверенной безопасностью
- Security reviews для критических фич
- Использование стандартизированных решений (OAuth для auth, SSO) вместо собственных
A05:2021 — Security Misconfiguration
Неправильная конфигурация серверов, фреймворков, баз данных, облачной инфраструктуры. Часто результат «дефолтных» настроек, оставленных без изменения.
Типичные ошибки
- Default credentials (admin/admin, root/password)
- Включённые ненужные функции и порты
- Подробные сообщения об ошибках в production (stack traces)
- Open S3 buckets, незащищённые БД
- Устаревшие версии ПО с известными уязвимостями
- Отключённые security headers (HSTS, CSP, X-Frame-Options)
- Verbose error messages, раскрывающие внутренние детали
Защита
- Hardening guides для каждого компонента стека
- Infrastructure as Code с security-проверками
- Automated security scans (Trivy, Snyk, Tenable, Qualys)
- Минимизация attack surface (только нужные сервисы)
- Security headers (CSP, HSTS, X-Frame-Options, X-Content-Type-Options)
- Регулярные patch management
A06:2021 — Vulnerable and Outdated Components
Использование библиотек, фреймворков, операционных систем с известными уязвимостями. Особенно опасно с supply chain attacks: вредоносный код в популярной зависимости.
Известные инциденты
- Log4Shell (CVE-2021-44228) — критическая уязвимость в Log4j, затронувшая миллионы приложений
- Heartbleed в OpenSSL
- Equifax data breach через уязвимость в Apache Struts
- SolarWinds supply chain attack
- Множественные npm-пакеты с malware (event-stream, ua-parser-js)
Защита
- Software Composition Analysis (SCA): Snyk, Dependabot, Renovate
- SBOM (Software Bill of Materials) для tracking всех зависимостей
- Регулярное обновление зависимостей (не ждать критических уязвимостей)
- Использование только проверенных репозиториев
- Подписи и верификация пакетов (sigstore, npm provenance)
- Vendoring критических зависимостей
A07:2021 — Identification and Authentication Failures
Проблемы с механизмами идентификации и аутентификации пользователей. Поднялась с A2 в 2017 до A7 в 2021 — означает, что отрасль научилась лучше с этим работать, но проблема всё ещё актуальна.
Типичные сценарии
- Permitting brute force attacks (нет rate limiting)
- Permitting weak passwords («12345», «password»)
- Plain text storage паролей
- Незащищённые механизмы восстановления пароля
- Session ID в URL
- Reusing session ID после авторизации
- Не invalidate session при logout
Защита
- Multi-factor authentication (MFA) обязательно для критических аккаунтов
- Rate limiting на login-endpoint
- Strong password policies (NIST 800-63B рекомендует passphrases вместо complexity)
- Password hashing через bcrypt/Argon2
- Secure session management (httpOnly, Secure, SameSite cookies)
- Session timeout и regeneration
- OAuth 2.0 / OpenID Connect для SSO
- Защита от credential stuffing (проверка через haveibeenpwned API)
A08:2021 — Software and Data Integrity Failures
Новая категория 2021. Касается доверия к данным и коду без должной верификации.
Примеры
- Подгрузка JS-библиотек с CDN без SRI (Subresource Integrity)
- Установка плагинов из непроверенных источников
- Auto-update без проверки подписи
- Insecure deserialization
- CI/CD pipelines без проверки целостности артефактов
Защита
- Digital signatures для всех артефактов
- Subresource Integrity (SRI) для внешних CDN
- Code signing для бинарных файлов
- Trusted package repositories
- Защита CI/CD pipeline’a от компрометации
- Использование supply chain security tools (Sigstore, in-toto)
A09:2021 — Security Logging and Monitoring Failures
Отсутствие или недостаточность логирования событий безопасности. Без логов невозможно ни обнаружить атаку в реальном времени, ни расследовать инцидент постфактум.
Что должно логироваться
- Все попытки авторизации (успешные и неуспешные)
- Изменения привилегий и доступа
- Доступ к чувствительным данным
- Изменения конфигурации
- Платёжные транзакции
- Подозрительные паттерны (множественные попытки логина с одного IP)
Защита
- Централизованное логирование (Elasticsearch, Loki, Datadog, Splunk)
- SIEM-системы для корреляции событий
- Алерты на подозрительные паттерны
- Защита логов от tampering
- Удержание логов согласно compliance-требованиям
- Periodic security log review
A10:2021 — Server-Side Request Forgery (SSRF)
Уязвимость, при которой атакующий заставляет сервер делать запросы к внутренним или внешним ресурсам, к которым у атакующего нет прямого доступа.
Сценарий атаки
Приложение позволяет загружать изображения по URL: ?url=https://example.com/image.jpg
Атакующий передаёт: ?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/ (AWS metadata service).
Сервер делает запрос внутри AWS-сети и возвращает атакующему AWS-credentials. Это была причина массивного Capital One breach в 2019 году.
Защита
- Whitelist разрешённых доменов для outbound-запросов
- Отключение redirects при необходимости
- Network segmentation: приложение не имеет доступа к metadata-сервисам
- Использование IMDSv2 в AWS (требует session token)
- Disable unused URL schemes (file://, gopher://, dict://)
OWASP Top 10 для LLM-приложений
В 2023 году OWASP выпустила отдельный список для AI-приложений, обновляемый в 2025 году. Топ-10 для LLM:
- LLM01: Prompt Injection. Манипуляция модели через специально сконструированный ввод.
- LLM02: Insecure Output Handling. Использование вывода LLM без валидации (например, выполнение SQL, сгенерированного моделью).
- LLM03: Training Data Poisoning. Загрязнение данных, на которых обучается модель.
- LLM04: Model Denial of Service. Перегрузка модели специально сконструированными запросами.
- LLM05: Supply Chain Vulnerabilities. Уязвимости в моделях, фреймворках, плагинах.
- LLM06: Sensitive Information Disclosure. Утечка конфиденциальных данных через ответы модели.
- LLM07: Insecure Plugin Design. Уязвимости в плагинах и инструментах, расширяющих LLM.
- LLM08: Excessive Agency. LLM с слишком широкими правами действий.
- LLM09: Overreliance. Чрезмерное доверие выводу LLM без верификации.
- LLM10: Model Theft. Кража или копирование модели через адаптацию через API.
С ростом использования AI этот список становится таким же критичным, как классический OWASP Top 10.
Инструменты для автоматизированной проверки
| Категория | Инструменты |
|---|---|
| SAST (Static Application Security Testing) | SonarQube, Snyk Code, Checkmarx, Semgrep, CodeQL |
| DAST (Dynamic) | OWASP ZAP, Burp Suite, Acunetix, Invicti |
| SCA (Software Composition Analysis) | Snyk, Dependabot, Renovate, WhiteSource (Mend), Trivy |
| Container security | Trivy, Grype, Snyk Container, Docker Scout |
| Infrastructure as Code security | Checkov, tfsec, Bridgecrew, Snyk IaC |
| Secrets scanning | GitGuardian, TruffleHog, Gitleaks |
| Cloud security | Prisma Cloud, Wiz, AWS Security Hub, Defender for Cloud |
| SBOM generation | Syft, CycloneDX, SPDX tools |
| LLM security | Garak, Prompt Bench, Lakera |
Большинство команд используют связку: SAST в IDE (для быстрой обратной связи), SCA в CI/CD (для зависимостей), DAST в staging (для дин. тестирования), runtime protection в production.
Типичные ошибки разработчиков
- Игнорирование security в спринтах. «Сначала фичи, потом безопасность» — типичный антипаттерн. Security-debt накапливается быстрее, чем разрешается.
- Полагание на «security by obscurity». Скрытие endpoint’ов вместо настоящей защиты. Любой обнаружится через автоматические сканеры.
- Custom crypto. Написание собственных алгоритмов шифрования или хеширования. Используйте проверенные библиотеки.
- Игнорирование security headers. CSP, HSTS, X-Frame-Options — простые в настройке, но недооцениваемые механизмы защиты.
- Privileged secrets в коде. API-ключи, токены, пароли в репозитории. Используйте secrets management.
- Слепое доверие input’у. «Это поле из нашей формы, безопасно». Атакующий может отправить что угодно.
- Отсутствие rate limiting. Это копеечная защита от brute-force и DoS, но многие забывают.
- Verbose error messages в production. Stack traces, SQL queries в ответах — подсказки для атакующего.
- Полагание только на WAF. Web Application Firewall — слой защиты, не замена secure coding.
- Игнорирование dependency updates. Запуск систем с библиотеками, в которых известные CVE.
- Отсутствие security training для разработчиков. Команды без понимания OWASP воспроизводят одни и те же уязвимости.
- «Security — это только pentest перед релизом». Security должна быть в каждом коммите, не разовым мероприятием.
Часто задаваемые вопросы
Как часто проводить security-аудит?
Automated сканирование — каждый коммит. Manual security review — каждый крупный релиз. Внешний pentest — раз в год или при существенных архитектурных изменениях. Bug bounty — постоянно, если бюджет позволяет.
Достаточно ли пройти OWASP Top 10 для соответствия GDPR / PCI DSS / других compliance?
Нет. OWASP Top 10 — необходимый минимум, но не достаточный. Регуляторные требования содержат дополнительные специфические требования: data residency, breach notification, audit logging.
Как обучать команду по OWASP?
Платформы вроде OWASP WebGoat, Hack The Box, PortSwigger Web Security Academy дают практические упражнения. Regular code reviews с фокусом на security также эффективны. Annual security training — обязательный минимум.
Что делать, если обнаружили уязвимость в своём проекте?
Зависит от критичности. Критическая (RCE, утечка данных) — немедленный hotfix, уведомление пользователей. Средняя — фикс в следующем релизе. Низкая — backlog. Документируйте через CVE если уязвимость в open-source.
Помогает ли AI в обнаружении уязвимостей?
Помогает. Инструменты типа Snyk Code, Semgrep, GitHub Copilot Code Review используют ML для обнаружения паттернов уязвимостей. Не заменяют human review, но повышают coverage и скорость.
OWASP Top 10 покрывает мобильные приложения?
Не полностью. Для мобильных приложений существует отдельный OWASP Mobile Top 10 со специфическими угрозами: insecure storage, jailbreak-detection, certificate pinning.
Заключение
OWASP Top 10 — не «чеклист на пять минут», а карта основных территорий безопасности веб-приложений. Команды, которые систематически защищаются от каждой категории, исключают 90%+ типовых атак. Команды, игнорирующие документ, рано или поздно становятся новостью в техническом сообществе — и не в хорошем смысле. В 2026 году с ростом атак, AI-инструментов для эксплуатации уязвимостей, supply chain attacks дисциплинированная работа по OWASP Top 10 — не опция, а условие выживания серьёзного веб-проекта. Это базовая гигиена, которая должна быть встроена в процессы разработки, а не накладываться поверх готового кода.