visilii's blog

Блог о программировании, инфосеке и чём-то ещё
Гостевая книга | Ссылки

OWASP Top10, человеческим языком - часть 1

March 11, 2025 — visilii

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

Я вовсе не претендую на роль хорошего технического писателя (или вообще на роль хорошего писателя), однако можно попытаться!

В идеале эта статья перерастёт в серию статей, описывающих строгие, технические понятия и термины человеческим языком и с изрядной долей отсебятины. Тегом этой рубрики будет no-bs. :]


OWASP (Open Web Application Security Project) - это независимый открытый проект, собирающий статистику и систематизирующий информацию по безопасности веб-приложений. Каждые несколько лет OWASP компилируют перечень из 10 типов уязвимостей, чаще всего встречающихся “в природе”. Последний такой перечень на момент написания статьи - OWASP Top 10 2021, однако на первую половину 2025 запланирован анонс выпуска обновленного списка.

Также OWASP публикуют аналогичные рейтинги для уязвимостей языковых моделей (OWASP Top 10 for Large Language Model Applications) и для уязвимостей, специфичных для API (OWASP API Security Top 10). В данной статье они рассматриваться не будут.

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

Первые 5 пунктов топа:

  1. Недостатки контроля доступа (Broken Access Control) - A01:2021

  2. Провал криптографической защиты (Cryptographic Failure) - A02:2021

  3. Внедрение (Injection) - A03:2021

  4. Небезопасный дизайн (Insecure Design) - A04:2021

  5. Некорректная настройка параметров безопасности - A05:2021


А01:2021 - Недостатки контроля доступа

Эта уязвимость возникает, когда пользователь получает возможность выполнять действия, которые не предусмотрены выданными ему разрешениями; например, обходить ограничения путём изменения URL-адреса, получать данные чужого профиля по UUID, повышать привилегии (возможность запускать программы с правами администратора, войдя с правами обычного пользователя). Она не требует выполнения стороннего кода (это пункт 3), только неверной реализации системы со стороны разработчика.

Любопытно, что этот тип уязвимостей подскочил с 5 места в 2017 году на первое - в 2021.

Пример вымышленный: личный кабинет пользователя банка расположен по адресу https://example.com/account?id=123. Заменив 123 на 456, пользователь получает доступ к чужому ЛК.

Пример реальный: в 2018 году исследователь Артём Московски нашёл уязвимость в сервисе генерации CD-ключей Steam - передавая специальные параметры на эндпоинт /partnercdkeys/assignkeys, аутентифицированный пользователь с доступом к площадке для разработчиков мог скачивать ранее сгенерированные CD-ключи для игр, к которым у него нет доступа.

A02:2021 - Провал криптографической защиты

Ранее фигурировал под названием “Разглашение конфиденциальных данных” (Sensitive Data Exposure).

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

Учитывая то, что криптография многими почитается почти за магию (включая, в некоторой степени, и вашего покорного), такое положение дел не вызывает удивления. Думаю, эта уязвимость ещё нескоро покинет первую десятку.

Пример вымышленный: сервер хэширует пароли при помощи MD5. Некая уязвимость позволила злоумышленнику выкачать БД, после чего он расшифровал пароли при помощи радужных таблиц.

Пример реальный: форма логина на дочернем домене сайта для взрослых не была защищена HTTPS. Банально? Да. Уязвимость? Ещё какая.

A03:2021 - Внедрение

Классика. Выполнение пользовательского кода из-за неверной валидации/экранирования или обработки пользовательского ввода. Наиболее распространённые разновидности - SQL-инъекция1, выполнение кода оболочки системы (command injection), XSS… Тысячи их! Результат - завладение конфиденциальными данными, их порча или банальный отказ в обслуживании (DoS).

Эта уязвимость стара, как мир, но может принимать неожиданно сложные формы. В качестве реального примера можно привести недавнюю уязвимость в Postgres CVE-2025-1094. Она позволяла атакующим использовать сложность стандарта Unicode и формировать особую последовательность байт, которая обходила экранирование ввода PostgreSQL и давала возможность выполнять произвольные SQL-запросы и даже код оболочки.

A04:2021 - Ненадёжный дизайн

Это нововведение OWASP 2021. Эта категория объединяет под собой все случаи, когда уязвимостью оказывается не недостаток реализации (как в случае с остальными уязвимостями), а изъян в изначальной структуре/дизайне проекта. Это довольно общая категория, и, как отмечено на сайте OWASP,

“Надёжный дизайн может иметь недостатки в реализации, приводящие к уязвимостям. Ненадёжный дизайн нельзя исправить идеальной реализацией по определению - необходимые условия безопасности, защищающие от атак, не были заложены изначально.”

Пример вымышленный, с сайта OWASP: использование контрольных вопросов как способа восстановления пароля. Не только владелец аккаунта может знать ответ на контрольный вопрос.

Пример реальный: в 2017 году американское кредитное бюро Equifax было взломано. Хакеры смогли извлечь данные 148 млн. американцев. Хотя главной причиной являлась критическая уязвимость в Apache Struts 2, получить эту информацию хакеры смогли благодаря системе ACIS, которая свободно разглашала версию Apache Structs, используемую фирмой.

Другим примером может послужить старый-добрый Telnet, не предусматривающий совершенно никакого шифрования или аутентификации при передаче данных. Это не Cryptographic Failure, так как шифрование не было заложено в протокол при его создании.

A05:2021 - Некорректная настройка параметров безопасности

Отношение к безопасности как “настроил и забыл” может привести к этой уязвимости. Оставленные по умолчанию учётные данные админа, неиспользуемые открытые порты/учётные записи/функции, отключённые обновления безопасности…

Пример вымышленный: владелец сервера оставил включённым directory listing веб-сервера, что позволило злоумышленнику найти и получить доступ к бэкапу БД, хранящемуся в директории сайта.

Пример реальный: червь Mirai, заражающий IoT-устройства со стандартными учётными данными. Был обнаружен в 2016 и до сих пор активен, породив целое семейство малвари благодаря открытому исходному коду.

Доп. материалы


  1. obligatory xkcd↩︎

Теги: инфобез, no-bs

badge: proud member of the 250KB Club badge: proud member of the darktheme.club
previous no ai webring siteno ai webringrandom no ai webring sitenext no ai webring site
Free Website Counter
Free Website Counter

Домен предоставлен FreeDNS