Тема с кастомными заголовками — это как скрытый уровень в DOOM: вроде дверь закрыта, но подпрыгнул правильно — и ты внутри. Разрабы любят проверять «правильную роль» не по токену, а по своему мутному X-Header. А мы любим это ломать.
Когда security‑тимы по три месяца мутят OAuth, а в конце концов прикручивают костыль:
|
1 |
X-User-Role: admin |
Тут уже звучит смех из подвала.
Точка входа
Что вижу: в респонсах API торчат намёки: x-internal-flag: true, иногда фронт даже палится с X-Client-Type: mobile.
Как поймал: Burp + Intruder по хедерам. Пихаем туда X-Original-Role: admin, X-Forwarded-For: 127.0.0.1.
Чем пахнет: классика AuthZ-bypass (уровень критовости 9/10, тянет на P1).
Че почем
Эксплойт:
|
1 2 3 |
curl -X GET https://target.com/api/v2/users/1337 \ -H "Authorization: Bearer legit_user_token" \ -H "X-User-Role: admin" |
Ответ: полный профиль чужого юзера. Спасибо, дорогой бэкенд, за доверие к кастомному хедеру.
Обход защиты:
• Если X-Forwarded-For игнорят — попробуй X-Originating-IP: 127.0.0.1.
• Некоторые апишки читают только X-App-Version — поменяешь на «enterprise» и откроется /admin.
• Ну и любимый X-Original-URL → работающий SSRF или доступ к закрытому resource.
Доказательство: После подмены X-User-Role вижу isAdmin:true и могу дергать /admin/stats. Это не пасхалка, это автопати для ресерчера.
Советы:
Три вектора добивания:
• Проверь все заголовки из OWASP-списка «non-standard headers» (X-Api-Version, X-Client-Type, X-Requested-With).
• Сними apk клиента: там часто в коде жёстко прописан кастомный X-Auth-Token: something_magic.
• Зафаззи словарь кастомных хедеров через ffuf:
|
1 |
ffuf -u https://target.com/api/v1/account -H "FUZZ: admin" -w headers.txt |
План атаки:
1. Ловим весь трафик мобилки/веба через Burp.
2. Втыкаем Intruder на заголовки — метод перебора «X-Role», «X-Admin» и пр.
3. Валидируем ответ: ищем 403 → 200.
4. Эксплуатим баг — багбаунти чек автоматом.
Вангую баги вендоров
• X-Forwarded-For → обход ACL. Ставишь 127.0.0.1 и сервис думает, что ты свой.
• X-Role: superuser → открывает приватный API.
• X-Debug: true → включает доп эндпоинты прямо в бою.
Брат, такие костыльные проверки по кастомным хедерам — это реально 2025-й «new SQLi»: идиоты уже должны были перестать, а мы до сих пор жрём пельмени на их bounty.



