CSPT — техника, известная с 2007 года, но не все багхантеры с ней знакомы. Давайте это исправим!
Представьте страницу профиля, которая всегда возвращает один и тот же HTML, но в URL есть параметр
id. Скрипт на клиенте делает запрос к API по этому id, например: example.com/profile?id=10 → браузер делает запрос к example.com/api/users/10 и подставляет данные.
Часто багхантеры пытаются найти IDOR, меняя
id, но мало кто смотрит, что браузер делает отдельный запрос к API. А если подставить путь с traversal-паттернами, например id=../../hello? Если браузер запросит
example.com/hello — значит есть возможность управлять путями в запросах с клиента!🤔 Почему это важно?
Потому что теперь вы можете заставить браузер жертвы делать запросы по произвольным путям, что открывает путь для цепочек уязвимостей — например, XSS через поддельный ответ API.
➡️Анализ ответа
Если мы перехватим запрос и проверим ответ, то можем увидеть что-то вроде:
{
"id": 10,
"name": "John Doe",
"pic": "images.example.com/pic-12345.jpg"
}Что бы мы могли сделать, если бы могли контролировать ответ на этот запрос? По сути, мы могли бы создать ссылку, которая при нажатии жертвы отправляла бы запрос в API, который затем возвращал бы контент, который мы контролируем.
Ценность контроля над этим контентом зависит от того, что с ним делает приложение. В нашем примере
pic используется как src тега <img>, а значит, появляется возможность эксплуатации XSS.➡️Open redirects
Если на сервере есть open redirect, можно заставить браузер сходить на внешний контролируемый ресурс и вернуть вредоносный контент.
Пример:
/profile?id=../../redirect%3Furl%3Dxss.example.com
— теперь ответ API контролируем мы, и можно пытаться эксплуатировать ту же самую XSS.
💡 Автоматизация
Chrome-расширение Gecko перехватывает все запросы, анализирует URL вкладки и проверяет, отражается ли часть текущего URL в запросах — признак CSPT:
▪️Сервис-воркер слушает запросы (
chrome.webRequest.onBeforeRequest)▪️Проверяет совпадения путей и параметров
▪️Хранит данные в локальном хранилище
▪️Показывает результаты в DevTools-панели и через всплывающее окно
▪️Поддерживает частичное совпадение, чтобы ловить случаи с расширениями файлов и вариациями путей

