Безопасность веба и API
Чтение JavaScript с ИИ для поиска endpoints
Фронтенд на JavaScript перечисляет API, с которым говорит приложение. Модель ИИ читает бандлы и выносит endpoints и параметры, а вы проверяете каждый.
API описывают свою форму через OpenAPI и introspection в GraphQL. Модель ИИ читает схему и планирует тесты авторизации, которые вы проверяете.
Современные приложения это тонкий фронтенд над API, и настоящие баги часто именно в API. Хорошая новость для тестировщика в том, что API склонны описывать сами себя: REST-API отдают спецификации OpenAPI, а GraphQL-API отвечают на introspection-запросы. И то и другое даёт карту, которую может прочитать модель. Этот пост продолжает тестирование частых веб-багов и ведёт к сборке hackbot.
OWASP API Security Top 10 ставит авторизацию на первое место. Первыми стоит выучить два: broken object level authorization, где вы дотягиваетесь до объекта другого пользователя, и broken function level authorization, где вы вызываете админское действие как обычный пользователь. Оба это API-версия багов контроля доступа из прошлого поста, и оба частые, потому что у API много endpoints, и один из них обычно забывает про проверку.
| Риск | Короткое имя | Что вы тестируете |
|---|---|---|
| Авторизация объекта | BOLA | Поменять id объекта между аккаунтами |
| Авторизация функции | BFLA | Вызвать привилегированную операцию под пользователем с малыми правами |
| Mass assignment | - | Отправить поля, которые клиент никогда не показывает |
Многие API публикуют свою спецификацию. Частые расположения это /openapi.json, /swagger.json, /v1/openapi.json или страница документации, которая её загружает. Скачайте её, и у вас в одном файле каждый путь, метод, параметр и схема.
curl -s https://api.example.com/openapi.json -o openapi.jsonОтдайте спецификацию модели и попросите перечислить endpoints, отметить те, что читают или пишут объекты пользователей, и выделить те, чьи имена намекают на админскую или внутреннюю роль. Этот проход по чтению превращает длинный документ OpenAPI в ранжированный список того, что тестировать первым.
GraphQL-API обычно отвечает на introspection-запрос, который возвращает всю его схему: каждый тип, поле, query и mutation. Когда introspection включён, вы получаете всю поверхность атаки одним запросом.
curl -s https://api.example.com/graphql -H 'Content-Type: application/json' \
-d '{"query":"{ __schema { queryType { name } mutationType { name } types { name kind } } }"}'Передайте схему модели и попросите сгруппировать queries и mutations, выбрать те, что трогают данные других пользователей, и назвать аргументы каждого. Спецификация GraphQL описывает introspection, а в OWASP Web Security Testing Guide есть раздел о тестировании GraphQL.
По любой из карт попросите у модели короткий план тестов: для каждого endpoint с объектами, какие два аккаунта взять и какой id поменять; для каждой привилегированной операции, из какой сессии с малыми правами её попробовать. Модель хорошо превращает схему в такой чек-лист. Сказать, действительно ли проверка отсутствует, она не может, поэтому каждый случай вы прогоняете через свой proxy с подконтрольными аккаунтами и читаете результат. Mutation, которая позволяет обычному пользователю изменить чужую запись, это чистая BOLA, доказанная двумя сессиями.
Находки в API легко доказать и легко завысить. Доказывайте их подконтрольными аккаунтами, по одной переменной за раз, и сохраняйте полный request и response по каждому. Для BOLA доказательство это два request: ваш объект, потом объект второго аккаунта, возвращённый в вашу сессию. Для BFLA это успешный привилегированный вызов из сессии, которой он не положен. Держите внутренние данные, до которых вы дошли, в минимуме, нужном, чтобы показать impact, и описывайте только то, что продемонстрировали.
API соблазняют заскриптовать сотни запросов. Сначала проверьте правила программы по автоматизации и частоте запросов, держите объём низким на боевой цели и гоняйте тяжёлые итерации на локальной копии. API, который вы молотите, это API, чей владелец замечает вас не с той стороны.
Теперь вы прошли весь цикл руками. Следующие три поста собирают небольшой агент, который проходит шаги recon и тестирования за вас, под вашим подтверждением. Начните с архитектуры hackbot.
Безопасность веба и API
Фронтенд на JavaScript перечисляет API, с которым говорит приложение. Модель ИИ читает бандлы и выносит endpoints и параметры, а вы проверяете каждый.
Безопасность веба и API
Методика для IDOR, XSS, SSRF и сломанной аутентификации: модель ИИ как читатель и второе мнение, плюс как проверить находку и избежать ложных срабатываний.
Безопасность веба и API
Вставьте запрос, ответ или spec OpenAPI. Модель называет недостающую проверку и пишет тест для вашего proxy, без отказа. Трафик шлёт ваш proxy.