CVE-2026-48710MediumCVSS: 6.5Sicherheitslücke in Starlette: Host-Header-Validierung umgangen (CVE-2026-48710)
In Starlette vor Version 1.0.1 wird der HTTP-Host-Header vor der Rekonstruktion von request.url nicht validiert. Dadurch kann der von request.url.path gelesene Pfad vom tatsächlich angeforderten Pfad abweichen, was Sicherheitsbeschränkungen in Middleware und Endpoints umgehbar macht. Betroffene Nutzer sollten auf Starlette 1.0.1 oder neuer aktualisieren.
METADATEN
- Entdeckt:
- 26.05.2026
- Patch verfügbar:
- Ja
BETROFFENE SYSTEME
- •encode starlette < 1.0.1
Zusammenfassung
Starlette, ein leichtgewichtiges ASGI-Framework, ist anfällig für eine Sicherheitslücke, die durch eine fehlende Validierung des HTTP Host-Request-Headers entsteht. Vor Version 1.0.1 wurde der Host-Header ungeprüft verwendet, um request.url zu rekonstruieren. Da der Routing-Algorithmus auf dem rohen HTTP-Pfad basiert, während request.url aus dem Host-Header aufgebaut wird, kann ein manipulter Header dazu führen, dass request.url.path vom tatsächlich angeforderten Pfad abweicht.
Dies eröffnet Angreifern die Möglichkeit, Sicherheitsbeschränkungen in Middleware und Endpoints zu umgehen, die ihre Entscheidungen auf request.url und nicht auf den rohen Pfad aus scope stützen. Die Schwachstelle ist unter der Bezeichnung „BadHost“ bekannt und wurde von mehreren Sicherheitsforschenden unabhängig dokumentiert.
Technische Details
Die Schwachstelle liegt in der Rekonstruktion der URL aus dem Host-Header. Starlette leitet den Pfad für request.url aus dem Host-Header ab, während das Routing auf dem rohen HTTP-Pfad der Anfrage basiert. Ein bösartig formatierter Host-Header kann diese beiden Werte auseinanderlaufen lassen, sodass request.url.path nicht dem tatsächlich angeforderten Pfad entspricht.
Sicherheitsrelevante Middleware oder Endpoints, die auf request.url zurückgreifen (anstatt den Pfad direkt aus scope["path"] zu lesen), können dadurch umgangen werden. Ab Version 1.0.1 validiert Starlette den Host-Header anhand der Grammatik aus RFC 9112 §3.2 bzw. RFC 3986 §3.2.2 bei der Konstruktion von request.url und fällt bei ungültigen Werten auf scope["server"] zurück.
Betroffene Systeme
Betroffen sind alle Installationen von Starlette, die älter als Version 1.0.1 sind (encode/starlette < 1.0.1). Da Starlette als ASGI-Framework häufig die Grundlage für Webanwendungen und APIs bildet, sind sämtliche darauf aufbauenden Dienste potenziell betroffen, sofern sie request.url für sicherheitsrelevante Entscheidungen verwenden.
Empfehlungen und Maßnahmen
- Upgrade durchführen: Starlette auf Version 1.0.1 oder neuer aktualisieren, da ab dieser Version der
Host-Header validiert wird. - Code prüfen: Middleware und Endpoints daraufhin überprüfen, ob Sicherheitsbeschränkungen auf
request.urlbasieren; wo möglich den rohen Pfad ausscopeverwenden. - Abhängigkeiten nachziehen: Alle Projekte aktualisieren, die Starlette als transitive oder direkte Abhängigkeit nutzen.
- Referenzen beobachten: Die offiziellen Advisory-Quellen (GHSA, PyPA Advisory Database) im Blick behalten, um weitere Details und potenzielle Workarounds zu erhalten.
Quellen
- https://github.com/Kludex/starlette/security/advisories/GHSA-86qp-5c8j-p5mr
- https://github.com/Kludex/starlette/commit/764dab0dcfb9033d75442d7a359645c9f94648c6
- https://badhost.org
- https://github.com/pypa/advisory-database/tree/main/vulns/starlette/PYSEC-2026-161.yaml
- https://ostif.org/disclosing-the-badhost-vulnerability-in-starlette
- https://www.secwest.net/starlette
- https://www.x41-dsec.de/lab/advisories/x41-2026-002-starlette
REFERENZEN
- https://github.com/Kludex/starlette/security/advisories/GHSA-86qp-5c8j-p5mr
- https://github.com/Kludex/starlette/commit/764dab0dcfb9033d75442d7a359645c9f94648c6
- https://badhost.org
- https://github.com/pypa/advisory-database/tree/main/vulns/starlette/PYSEC-2026-161.yaml
- https://ostif.org/disclosing-the-badhost-vulnerability-in-starlette
- https://www.secwest.net/starlette
- https://www.x41-dsec.de/lab/advisories/x41-2026-002-starlette