Авторские курсы Михаила Тарасова

Bypass CORS через Wildcard: как сломать браузерную защиту через звёздочку

Bypass CORS через Wildcard: как сломать браузерную защиту через звёздочку

API на api.target.com отвечает заголовком Access-Control-Allow-Origin: *. Вместе с этим светится Access-Control-Allow-Credentials: true. Пахнет обходом CORS, как дешёвое пиво на хакерской тусовке.

Как поймал:
— Инструмент: curl -v https://api.target.com/user/profile + Burp Suite для анализа хедеров.
— Метод: Увидел wildcard (*) в Allow-Origin и проверил, поддерживает ли API куки/токены через withCredentials.

Чем пахнет:
— Класс: CORS Misconfiguration → кража данных через кросс-доменные запросы.
— Вероятность: 9/10. Админы лепят * на проде, чтобы «всё работало», не врубаясь в последствия.

Че почем

Эксплойт:
Создаёшь страницу на своём домене evil.com:

Итог: Куки юзера улетают на твой сервер, пока он смотрит котиков на твоём сайте.

Обход защиты:
— Если есть CSP: Поднимай свой домен как evil.target.com (если wildcard на уровне домена).
— Если API требует токен: Используй утечку через pre-flight или найди эндпоинт без OPTIONS.
— Если заголовок не *: Проверь на рефлексию Origin: отправь Origin: https://evil.com и лови Allow-Origin: https://evil.com.

Доказательство:
Скриншот логов с утекшими данными юзера: {"email": "victim@target.com", "balance": 1337}«Видишь личные данные? Это не мем — это твой новый аккаунт».

Советы

3 вектора для добивания:

  1. Кража через JSONP: Если API поддерживает callback параметры, делай запрос:

  1. Атака на субдомены: Если Allow-Origin: *.target.com, регистрируй pwned.target.com через дырявый DNS.

  2. Сбор через fetch: Используй fetch с mode: cors для особо хитрых API, где xhr блочат.

План атаки:

  1. Сканируешь заголовки через curl -I на предмет Access-Control-*.

  2. Проверяешь связку Allow-Origin: * + Allow-Credentials: true.

  3. Разворачиваешь PoC на своём домене (evil.com) с кодом для перехвата.

  4. Если успех — сливаешь сессионные куки или токены через запросы к /profile/account/payments.

Бонус от деда

Если в хедерах Server: Nginx/1.14.0:
— Гугли типичные миссконфиги CORS в Nginx (add_header Access-Control-Allow-Origin *;).
— Эксплойт: Даже если фикс есть, проверь старые субдомены через waybackurls — там wildcard живёт вечно.

Мемная аналитика:
«CORS Wildcard — как поставить замок на дверь, но оставить ключ под ковриком с надписью ‘Бери, кто хочешь’».

Итог:
— Уязвимость: Неправильная настройка CORS-политики с wildcard и поддержкой credentials.
— Фикс: Указывать конкретные домены в Allow-Origin, отключать Credentials для wildcard.
— Но пока админы думают, что ‘*’ — это про звёзды на небе, греби данные юзеров на баг-баунти.

Мои курсы