TGViewer
Standoff Bug Bounty Tips Standoff Bug Bounty Tips @standoff_bb_tips · 1.66K subscribers
Post #130 1.09K
🥷🏿 Path Traversal в Nginx: байпас авторизации через $request_uri

Представь — у тебя есть валидный JWT, но только права обычного юзера. А что если одним HTTP-запросом получить админские права? Или вообще обойтись без токена там, где он нужен?

💡 Идеальные условия

▪️API с микросервисной архитектурой
▪️Kubernetes + Nginx ingress (Kong, Apache APISIX, F5 NGINX)
▪️URL вида api.example.com/service-name/endpoint или api.example.com/customer-service, а не user.example.com или customer.example.com
▪️Централизованная аутентификация/авторизация (например, JWT проверяется именно на ingress, а не каждым сервисом)

⤵️ Пошаговый гайд

1. Проверяем архитектуру — ищем Nginx в ошибках, отправив запрос к несуществующему сервису:

curl --path-as-is https://api.example.com/sdalksjdeiu1/customer-serivice/endpoint1


2. Тестируем нормализацию ../ и ..%2F:
curl --path-as-is https://api.example.com/sdalksjdeiu1/../customer-serivice/endpoint1
curl --path-as-is https://api.example.com/sdalksjdeiu1/..%2F/customer-serivice/endpoint1
curl --path-as-is https://api.example.com/sdalksjdeiu1/..%252Fcustomer-serivice/endpoint1


3. Находим публичный сервис:
▪️Ищем эндпоинты без аутентификации
▪️Обычно это /health, /status, /public-api

4. Эксплуатируем:

4.1. Возьми рабочий запрос к защищенному сервису, например /protected-service/protected?a=1 и измени на /public-service/..%2Fprotected-service/protected?a=1, но отправь его без токена.

4.2. Сделайте токен недействительным и отправь запрос из п. 4.1.

4.3. Подожди и сделай токен просроченным и отправь запрос из пункта 4.1.

👉 Что важно помнить

▪️Если авторизация децентрализована (каждый сервис сам решает, пускать ли), уязвимость не сработает.

▪️Если всё централизовано и ingress ошибается в нормализации — шанс на баг есть.

🔥 Повышение привилегий

В приложении реализован централизованный контроль доступа, который проверяет, к какой группе/роли принадлежит юзер.

✨ В этой ситуации попробуй следующие шаги:

2.1. Найди эндпоинт, к которому ты не можешь получить доступ.

2.2. Возьми действительный запрос с доказательством аутентификации (например, JWT).

2.3. Отправь запрос к эндпоинту из п. 2.1, но используя path traversal, описанный ранее.
  • ❤‍🔥 7
  • 🔥 5
  • 😱 2
More from @standoff_bb_tips
  1. Oct 11, 2026Что скрывается в имени HTML-тега? Может быть, JavaScript? Gareth Heyes из PortSwigger пока…
  2. Oct 4, 2026Хочешь прокачать своего багбаунти-агента ❓ Обрати внимание на Model-Context-Protocol (MCP)…
  3. Oct 3, 2026Эксплуатация багов, связанных с ошибками в бизнес-логике 🤔 Логические баги — это когда ко…
  4. Sep 7, 2026Post #255
  5. Sep 5, 2026Мы накидали 6 разных вариантов атак для простого GET-запроса на редактирование профиля ⤵️…
  6. Aug 15, 2026Stored XSS через картинку: проверь Content-Type override 😵‍💫 Иногда загрузка изображений…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →