Die URL-Rekonstruktion von Starlette erzeugt eine gefährliche Diskrepanz zwischen dem Pfad, der geroutet wird, und dem Pfad, der autorisiert wird. Wenn eine HTTP-Anfrage eintrifft, identifiziert der Router den Ziel-Endpunkt korrekt anhand der rohen Anfragezeile. Wenn die Anwendung jedoch später request.url prüft, um zu entscheiden, ob ein Benutzer autorisiert ist, setzt Starlette diese URL neu zusammen, indem es den Host-Header mit dem Anfragepfad verkettet und das Ergebnis erneut analysiert .
Ein Angreifer kann dies ausnutzen, indem er eine Anfrage an einen geschützten Endpunkt wie /admin/secure mit einem sorgfältig präparierten Host-Header sendet, zum Beispiel:
Host: legitimate.com/health?x=
Der Router leitet die Anfrage korrekt an den Handler für /admin/secure weiter – doch wenn die Autorisierungs-Middleware request.url.path untersucht, sieht sie stattdessen /health. Verwendet die Middleware eine Positivliste (Allowlist), die /health als öffentlichen Health-Check-Endpunkt einstuft, schlüpft der Angreifer ungehindert durch. Die Autorisierungsprüfung wird lautlos umgangen; kein Token, kein Passwort, keine Benutzerinteraktion ist erforderlich .
Der Sicherheitshinweis von X41 D-Sec bestätigt die verblüffende Einfachheit: „Es reicht aus, ein einzelnes Zeichen in den HTTP-Host-Header einzufügen, um den Server zu täuschen“ . Die spezifischen Zeichen, die diese Verwirrung auslösen, sind Schrägstriche, Fragezeichen und Rautenzeichen – normale URL-Trennzeichen, die Starlette nie validiert hat
.
Die Reichweite der Schwachstelle ist erschütternd. Starlette ist der verborgene Motor hinter nahezu jedem großen Python-basierten KI-Bereitstellungs- und Orchestrierungswerkzeug und wird rund 325 Millionen Mal pro Woche heruntergeladen . Alle nachgelagerten Projekte, die Starlette in einer Version vor 1.0.1 einsetzen, sind betroffen:
Die bestätigten betroffenen Versionen umfassen Starlette >= 0.8.3 bis < 1.0.1, was bedeutet, dass Systeme mit seit Jahren stabilen Releases potenziell alle verwundbar sind .
Die offizielle Bewertung des Schweregrads von CVE-2026-48710 hat in der Sicherheitscommunity eine deutliche Kontroverse ausgelöst:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N bewertet die Auswirkungen auf Vertraulichkeit und Integrität als „Gering“, beschränkt den Geltungsbereich (Scope) auf „Unverändert“ und meldet keine Auswirkungen auf die Verfügbarkeit CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:NDrei Faktoren untermauern das Argument der Forscher, dass 6,5 gefährlich niedrig angesetzt ist:
SC:H/SI:H-Metriken aus CVSS v4.0 endlich erfasst wird Starlette Version 1.0.1, veröffentlicht am 22. Mai 2026, enthält den endgültigen Patch. Die Fehlerbehebung wird im GitHub Security Advisory GHSA-86qp-5c8j-p5mr und im X41-Advisory X41-2026-002 dokumentiert .
Der Patch implementiert zwei Kernschutzmaßnahmen:
Host-Header wird nun anhand der in RFC 9112 §3.2 und RFC 3986 §3.2.2 spezifizierten Grammatik validiert, bevor er zur Konstruktion von request.url verwendet wird scope["server"] zurück – das tatsächliche Server-Verbindungstupel – und nicht auf den vom Angreifer bereitgestellten Wert. Infolgedessen gibt request.url.path konsistent den tatsächlich gerouteten Pfad wieder Das FastAPI-Projekt hat die Wirksamkeit der Korrektur bestätigt und das sofortige Upgrade von starlette auf >=1.0.1 empfohlen .
Das Upgrade des Starlette-Pakets ist der entscheidende erste Schritt, aber eine umfassende Verteidigung erfordert mehrere Ebenen:
Sofort patchen. Führen Sie in jeder virtuellen Umgebung, jedem Container-Image und jeder Deployment-Pipeline, die KI-Infrastruktur betreibt, folgenden Befehl aus:
pip install --upgrade starlette
Starten Sie alle betroffenen Dienste neu. Dies gilt sowohl für direkte Starlette-Installationen als auch für Instanzen von FastAPI, vLLM, LiteLLM und MCP-Servern .
Abhängigkeiten prüfen und festsetzen. FastAPI und andere Frameworks erzwingen möglicherweise nicht automatisch die minimale Starlette-Version. Fordern Sie explizit starlette>=1.0.1 in requirements.txt, pyproject.toml, poetry.lock oder gleichwertigen Lock-Dateien an. Führen Sie pip list | grep starlette.
Jede Komponente im KI-Stack scannen. Jeder Python-Dienst, der HTTP bereitstellt – benutzerdefinierte FastAPI-Apps, LLM-Inferenz-Endpunkte, Agenten-Orchestrierungsebenen, Modellbewertungs-Panels und OpenAI-kompatible Proxys – kann eine verwundbare Starlette-Version enthalten. Führen Sie eine vollständige Infrastrukturprüfung durch .
Reverse-Proxys und WAFs härten. Konfigurieren Sie nginx, Envoy, HAProxy, Cloudflare oder AWS ALB so, dass fehlerhafte Host-Header abgelehnt oder bereinigt werden, bevor sie an Python-Anwendungen weitergeleitet werden. Dies bietet eine mehrschichtige Verteidigung (Defense-in-Depth), die eine Ausnutzung selbst dann blockiert, wenn sich das Patchen der Anwendung verzögert .
Pfad-Sicherheitsprüfungen von request.url.path wegmigrieren. Die Ursache war die Diskrepanz zwischen dem Routing-Pfad und request.url.path. Wo immer möglich, sollte die Autorisierungs-Middleware auf die Verwendung von request.scope["path"] umgestellt werden. Dieser Wert leitet sich vom rohen ASGI-Scope ab und kann nicht durch den Host-Header manipuliert werden . X41 D-Sec empfiehlt, Pfad-basierte Autorisierung gänzlich zu vermeiden und stattdessen auf Endpunkt-eigene Authentifizierungsmechanismen zu setzen
.
Auf Verwundbarkeit testen. Es wurde ein Online-Scanner veröffentlicht, mit dem Organisationen überprüfen können, ob ihre Server verwundbar sind . In Kombination mit gründlichen Penetrationstests an Authentifizierungsgrenzen kann dies übersehene Angriffsflächen aufdecken.
Für Debian-basierte Bereitstellungen wird CVE-2026-48710 im Debian Security Tracker mit dem Schweregrad „important“ (wichtig) geführt. Entsprechende gepatchte starlette-Punkt-Releases sind für die betroffenen Suites verfügbar . Wenden Sie die korrigierende
apt-Transaktion aus dem bullseye-security- oder einem gleichwertigen Repository an und laden Sie die betroffenen systemd-Unit-Dateien neu .
Comments
0 comments