Логические уязвимости API: почему IDOR не находят сканеры и как его ищут на самом деле

2026-09-04

Самые дорогие взломы последних лет - не эксплойты и не 0-day, а логические уязвимости API: подставил чужой ID - получил чужие данные. Их не находит ни один сканер из коробки, потому что с точки зрения кода всё работает правильно. Разбираем, как устроен этот класс уязвимостей и как его ищут.

Что такое логическая уязвимость

Логическая уязвимость - это когда приложение работает ровно так, как написано в коде, но не так, как задумывал бизнес. Классические примеры:

  • ◇IDOR (insecure direct object reference): эндпоинт /orders/{id} проверяет, что пользователь залогинен, но не проверяет, что заказ - его. Перебор ID отдаёт чужие заказы, платежи, документы.
  • ◇Broken access control: обычный пользователь дергает админский эндпоинт, и тот отвечает - потому что проверка роли есть в интерфейсе, но не в API.
  • ◇Mass assignment: API принимает весь JSON-объект целиком, и в PATCH-запрос профиля можно дописать role: admin или balance: 100000.
  • ◇Workflow abuse: шаги бизнес-процесса вызываются в обход порядка - подтверждение платежа без самого платежа, применение промокода после отмены заказа.

Почему сканеры это не ловят

SAST ищет опасные конструкции в коде, DAST - известные сигнатуры в ответах. Но в IDOR нет опасной конструкции и нет сигнатуры: запрос корректный, ответ - валидный JSON со статусом 200. Понять, что произошла утечка, можно только зная контекст: этот пользователь не должен видеть этот объект.

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

Как это автоматизирует Izanagi

Izanagi - наш LLM-driven сканер логических уязвимостей API. Он делает то же, что делает пентестер, но сплошным покрытием: читает OpenAPI-спецификацию, строит гипотезы о ролевой модели и связях объектов, генерирует пары запросов «свой/чужой» под разными учётками и сравнивает ответы. Каждая находка - это доказанный PoC: конкретный запрос, конкретный чужой объект в ответе.

Ключевое отличие от классического DAST - модель понимает семантику API: что orders принадлежат users, что endpoint с put и полем role - кандидат на mass assignment, что цепочка «создать → отменить → применить скидку» стоит проверки. Пилот проходит на вашем стенде за 2–4 недели, результат - отчёт с диффом new/known/fixed против ваших прошлых пентестов.

Что сделать команде уже сейчас

  • ◇Проверка прав - на уровне объекта, не эндпоинта: не «пользователь залогинен», а «этот пользователь имеет доступ к этому объекту». В каждом обработчике.
  • ◇Белые списки полей на запись: PATCH и PUT принимают только явно разрешённые поля, а не весь объект.
  • ◇Тесты на чужие объекты: для каждого эндпоинта - автотест «пользователь A запрашивает объект пользователя B и получает 403». Это дешёвая и очень эффективная страховка в CI.
  • ◇Инвентаризация API: логические дыры чаще всего живут в забытых эндпоинтах - старых версиях, внутренних ручках, выставленных наружу, тестовых маршрутах.

FAQ

Чем это отличается от обычного пентеста API?
Пентест API покрывает и логику тоже, но выборочно - сплошная проверка всех эндпоинтов под всеми ролями руками не окупается. Izanagi закрывает именно сплошное покрытие логики, а ручной пентест остаётся для того, что автоматизации не поддаётся: сложные цепочки, специфика бизнеса. На практике лучший результат даёт связка.
Нужен ли вам исходный код?
Нет. Izanagi работает как внешний клиент API: нужны OpenAPI-спецификация (или трафик для её восстановления) и тестовые учётки с разными ролями. Стенд предпочтительнее прода.
Как выглядит пилот Izanagi?
2–4 недели на вашем стенде с фиксированным скоупом и критериями успеха, согласованными до старта. Результат - отчёт с доказанными находками (PoC на каждую) и диффом против известных вам уязвимостей: что новое, что уже знали, что закрыто.
Пилот Izanagi на вашем API

2–4 недели на вашем стенде: сплошная проверка логики API с доказанными PoC на каждую находку. Скоуп и критерии успеха фиксируются до старта.

Обсудить пилот