Обсудить проект

Shadow APIs и Zombie Endpoints: атакуй то, о чём разработчик забыл

27.08.2026

Сегодняшняя тема — про кладбища, которые сами себя не хоронят. Shadow APIs и Zombie Endpoints — это твой персональный сундук с сокровищами, потому что там всё то, что забыли задокументировать, задеприкейтить и, самое смешное, выключить. Погнали копать.

Точка входа: два разных мертвеца

Тут важно не путать терминологию, а то в отчёте засмеют:

  • Shadow API — эндпоинт, который вообще никогда не попадал в официальный реестр. Появился на скорую руку под фичу, тестовый харнесс или временную интеграцию, не зарегистрирован в API-гейтвее, живёт мимо централизованной аутентификации и логирования.
  • Zombie API — легаси-эндпоинт, который когда-то был легальным, прошёл рефакторинг или миграцию на v2, но handler/controller/lambda-функция всё ещё жива и отвечает, потому что никто не почистил DNS, конфиг балансировщика или reverse-proxy правило.

Разница простая: shadow — это «мы забыли задокументировать», zombie — это «мы забыли выключить». Обе твари одинаково вкусны для атакующего, потому что обе выпадают из мониторинга и security-процессов.

Что бросилось в глаза: root cause 2026 года

Свежий разбор утечек этого августа прямым текстом называет причину: провал происходит на уровне object-level авторизации, а не шифрования или периметра — и главный виновник это заброшенные и shadow-эндпоинты, которые «всё ещё аутентифицированы, но давно не мониторятся». Плюс горячая жара по CVE:

  • Azure API Management, CVE-2026-35425 — RCE через improper access control, эксплуатируется авторизованными атакующими удалённо, патч в июле 2026.
  • Cisco в бюллетенях CISA за август 2026 продолжает светить критические дыры в SD-WAN-компонентах (CVE-2026-18248, CVSS 9.1), которые тоже завязаны на управляющие API-интерфейсы.

Общий вайб: компании гоняют DAST по продакшн-эндпоинтам из документации, а всё, что «вне документации», остаётся вне скана. Классический blind spot, который никто не закрывает системно.

Векторы атаки: где копать лопатой

Забудь про Swagger — если он есть, это уже не shadow, это витрина. Настоящее золото прячется в другом:

  • Старые версии API/api/v1/... рядом с продовым /api/v3/.... v1 часто без rate-limit, без свежих auth-мидлваров, с дырявой валидацией.
  • JS-бандлы и мобильные аппы — декомпиль APK/IPA или разбери минифицированный JS, там частенько остаются захардкоженные URL на internal/staging/debug-эндпоинты, которые давно должны были умереть.
  • Поддомены и staging-окруженияapi-dev., api-staging., internal-api., test-api. — DNS-записи живут годами после того, как сервис давно должен быть выключен.
  • CI/CD артефакты — Swagger/OpenAPI спеки, залитые в публичный S3/GitHub, часто содержат эндпоинты, которых нет в текущей продовой доке.
  • Реверс-инжиниринг ошибок — 404 vs 403 vs 405 на разных путях дают утечку: если endpoint отвечает 405 Method Not Allowed на GET, значит POST/PUT где-то жив, даже если его нет в доке.
  • TLS-фингерпринтинг — пассивный анализ JA3/JA4-хэшей и SNI на внутреннем трафике вскрывает rogue и deprecated API, которые не декларированы в реестре, без расшифровки трафика вообще.

Инструменты и команды для боевого прогона

Burp Suite — основа основ, ты знаешь мою позицию 😎.

  1. Content discovery / brute-force путей:
ffuf -w api-wordlist.txt -u https://target.com/api/FUZZ -mc all -fc 404

Гоняй списки типа api/v1, api/v2, internal, debug, admin, legacy, _old, deprecated.

  1. Burp Suite + Param Miner / JS Miner — сканируй JS-файлы прямо в браузере на предмет URL-паттернов /api/, fetch(, axios., XMLHttpRequest. JS Miner вытаскивает эндпоинты, зашитые в код фронта, автоматом.
  2. Пассивное сканирование через прокси — настрой Burp как outbound-proxy для мобильного приложения (или эмулятора), лови все API-запросы, включая те, что не в публичной доке.
  3. Diff между версиями API-спеки — если у тебя есть доступ к историческим Swagger/OpenAPI файлам (git history, wayback machine, CI-артефакты), сравни: любой эндпоинт, что был раньше и пропал из текущей доки, но всё ещё отвечает 200 — это твой zombie.
  4. Ручная проверка старых версий с текущим токеном:
GET /api/v1/users/123/export HTTP/1.1
Host: target.com
Authorization: Bearer <актуальный_токен>

Если legacy-эндпоинт всё ещё принимает свежий токен, но не прогоняет через актуальную auth-логику (например, забытую RBAC-проверку) — это прямой путь к IDOR или privilege escalation.

Лайфхаки для защитников (зашей в отчёт клиенту)

  • Живой инвентарь API через автоматический discovery в CI/CD, сверяй source-level определения с конфигом гейтвея, флагай расхождения.
  • SAST + DAST в связке: SAST находит эндпоинты в коде и проверяет auth-логику, DAST фаззит рантайм и гоняет проверки на broken object-level authorization.
  • Безопасный деприкейт: при выводе API из эксплуатации — удаляй DNS-записи, правила балансировщика, и обязательно проверяй негативными тестами, что эндпоинт реально недоступен, а не просто «убран из доки».
  • Мониторинг аномалий: скачки времени отклика и нагрузки на «несуществующие» эндпоинты — это красный флаг shadow API в проде.

Короче, Shadow API и Zombie Endpoint — это не мистика, это обычная человеческая лень плюс отсутствие процесса lifecycle-менеджмента. Разработчик забыл — ты помнишь. WAF не спасёт от того, чего WAF даже не видит в своём реестре. Иди фаззь пути, разбирай JS-бандлы и проверяй легаси-версии API — там до сих пор тусуются рут-права, которые никто не удосужился отобрать.