Kai Ole Hartwig
6 Min. Lesezeit
Kritisch

LiteLLM CVE-2026-42271: MCP-Test-Endpunkte plus BadHost ergeben unauthentifizierte RCE (CVSS 10.0) — nachträglich aufgegriffen

Nachträglich aufgegriffen, bewusst kein 48h-Treffer: CVE-2026-42271 wurde bereits am 9. Juni 2026 offengelegt und am 8. Juni von CISA in den KEV-Katalog aufgenommen — aber die volle Tragweite wird erst im Zusammenspiel mit dem auf diesem Blog bereits behandelten CVE-2026-48710 (BadHost, Starlette-Host-Header-Bypass) sichtbar. Für sich genommen ist CVE-2026-42271 eine Command Injection in zwei LiteLLM-MCP-Test-Endpunkten (CVSS 8.7), die einen vollständigen Server-Konfigurations-Body inklusive Kommando, Argumenten und Umgebungsvariablen entgegennehmen — authentifizierte Nutzer können darüber beliebige Kommandos ausführen. Verkettet mit BadHost, das die Authentifizierung selbst aushebeln kann, ergibt sich eine kombinierte CVSS-Bewertung von 10.0: unauthentifizierte Remote Code Execution. CISA bestätigt aktive Ausnutzung. Fix: LiteLLM ≥1.83.7 mit Starlette ≥1.0.1 — beide Teile der Kette müssen geschlossen werden.

TL;DR — 90 Sekunden

Betroffen?

LiteLLM ≥1.74.2 und <1.83.7, insbesondere in Kombination mit Starlette vor 1.0.1 (BadHost, CVE-2026-48710). Die beiden Endpunkte POST /mcp-rest/test/connection und POST /mcp-rest/test/tools/list sind der Angriffspfad.

Risiko?

Command Injection (CVSS 8.7 einzeln) → verkettet mit BadHost zu unauthentifizierter RCE (CVSS 10.0 kombiniert). Aktiv ausgenutzt laut CISA-KEV-Eintrag.

Sofortmaßnahme?

LiteLLM auf ≥1.83.7 UND Starlette auf ≥1.0.1 aktualisieren — nur eine der beiden Komponenten zu patchen schliesst die Kette nicht vollständig.

Empfehlung?

Wer den bereits behandelten BadHost-Fund (CVE-2026-48710) gepatcht hat, aber LiteLLM nicht separat aktualisiert hat, bleibt über die MCP-Test-Endpunkte angreifbar — beide Advisories gehören zusammen geprüft.

Kritikalität?

kritisch (Hero-Badge) — kombinierte unauthentifizierte RCE, CISA-KEV-Eintrag, aktive Ausnutzung.

Was ist das Problem?

LiteLLM ist ein weit verbreitetes AI-Gateway/Proxy, das einheitlichen Zugriff auf verschiedene LLM-Provider bündelt und dabei auch das Model Context Protocol (MCP) unterstützt. Zwei Vorschau-Endpunkte, POST /mcp-rest/test/connection und POST /mcp-rest/test/tools/list, nehmen eine vollständige Server-Konfiguration im Request-Body entgegen — inklusive command-, args- und env-Feldern. Diese Felder werden unzureichend validiert, wodurch authentifizierte Nutzer beliebige Kommandos auf dem Host ausführen können.

Für sich genommen erfordert das einen authentifizierten Zugang. Die eigentliche Brisanz entsteht durch die Verkettung mit CVE-2026-48710 (BadHost): Starlette vor Version 1.0.1 rekonstruiert request.url fehlerhaft aus dem Host-Header, was unter bestimmten Bedingungen die Authentifizierung selbst aushebeln kann. Kombiniert ergibt sich ein Pfad zu vollständig unauthentifizierter Remote Code Execution — daher die kombinierte CVSS-Bewertung von 10.0.

Wer ist betroffen?

KomponenteBetroffene VersionSichere Version
LiteLLM≥1.74.2, <1.83.7≥1.83.7
Starlette (Dependency)vor 1.0.1≥1.0.1

Beide Komponenten müssen aktualisiert werden, um die Kette vollständig zu schliessen: LiteLLM allein schliesst nur die Command-Injection-Endpunkte, Starlette allein schliesst nur den Host-Header-Bypass. Wer bereits den separat behandelten BadHost-Fund (Starlette-Seite) gepatcht, aber LiteLLM nicht auf ≥1.83.7 gezogen hat, bleibt über die MCP-Test-Endpunkte für authentifizierte Angreifer verwundbar.

Auswirkungen

Der kombinierte Pfad — unauthentifizierte Remote Code Execution auf einem AI-Gateway — ist maximal kritisch: LiteLLM-Instanzen bündeln typischerweise API-Keys für mehrere LLM-Provider, Routing-Konfigurationen und häufig auch Zugriff auf nachgelagerte interne Systeme. Ein erfolgreicher Angriff bedeutet vollständige Kompromittierung des Gateway-Hosts, Zugriff auf alle verwalteten Provider-Keys und potenziell einen Sprungpunkt ins interne Netzwerk. Selbst ohne die Verkettung mit BadHost bleibt die Command Injection für authentifizierte Nutzer ein ernstes Risiko in Umgebungen mit mehreren Nutzern unterschiedlicher Vertrauensstufen.

Mitigation / Sofortmassnahmen

Hinweis: Basierend auf der zitierten Berichterstattung und dem CISA-KEV-Eintrag — konkrete Versionsstände gegen die offiziellen LiteLLM- und Starlette-Release-Notes abgleichen.

Operativer Entscheidungsblock

Schritt 1 — beide Komponenten aktualisieren

 

# LiteLLM-Version prüfen
pip show litellm | grep Version
# auf sichere Version aktualisieren
pip install --upgrade litellm>=1.83.7
# Starlette-Version separat prüfen und aktualisieren
pip show starlette | grep Version
pip install --upgrade starlette>=1.0.1

 

Schritt 2 — MCP-Test-Endpunkte am Reverse Proxy blocken (bis zum Patch)

 

# Beispiel nginx: die beiden Vorschau-Endpunkte sperren
location ~ ^/mcp-rest/test/(connection|tools/list) {
    deny all;
}

 

Schritt 3 — Netzwerkzugriff einschränken

 

# LiteLLM-Gateway nicht direkt öffentlich exponieren
# Zugriff auf bekannte, vertrauenswürdige Quell-IPs beschränken (Firewall/Security-Group)

 

Schritt 4 — Proxy-Credentials rotieren

 

# nach Verdacht auf Kompromittierung:
# alle über LiteLLM verwalteten Provider-API-Keys rotieren
# LiteLLM-eigene Master-/Proxy-Keys neu generieren

Detection / Prüfung

Version prüfen

 

pip show litellm starlette | grep -E "Name|Version"

 

Logs auf Zugriffe der Test-Endpunkte prüfen

 

grep -E "POST /mcp-rest/test/(connection|tools/list)" access.log | awk '{print $1, $7}' | sort -u

 

Auf Host-Header-Anomalien prüfen (BadHost-Seite)

 

grep -i "^Host:" access.log | sort | uniq -c | sort -rn | head -20

 

Laufzeit-Indikatoren

 

- unerwartete Subprozess-Ausführungen vom LiteLLM-Prozess ausgehend
- ausgehende Verbindungen von der LiteLLM-Instanz zu unbekannten Zielen
- Requests an die MCP-Test-Endpunkte von Quellen ausserhalb bekannter Nutzer/Systeme

Betreiberempfehlung

Mid-Market

Beide Komponenten (LiteLLM und Starlette) in einem Schritt aktualisieren — ein Teil-Patch schliesst die Kette nicht. Falls Sie den BadHost-Beitrag bereits umgesetzt haben, jetzt gezielt LiteLLM separat prüfen.

Enterprise

Dependency-Scan über alle Services, die Starlette oder LiteLLM einsetzen — beide sind häufig transitive Abhängigkeiten in grösseren Python-/ASGI-Stacks und werden leicht übersehen. Netzwerksegmentierung für AI-Gateways wie LiteLLM: kein direkter öffentlicher Zugriff, sondern hinter Auth-Proxy und Allowlist.

KI-Plattform-Betrieb

LiteLLM als zentrales Gateway bündelt Provider-Keys für den gesamten Stack — ein Kompromiss hier hat überproportionale Auswirkung. Master-/Proxy-Keys regelmässig rotieren, unabhängig vom aktuellen Patch-Status, als generelle Hygienemassnahme.

Entscheidungsblock

Heute handeln, wenn: LiteLLM <1.83.7 unabhängig vom Starlette-Status. Beobachten, wenn: beide Komponenten bereits auf sicherer Version.

Häufige Fragen zu CVE-2026-42271

Ist das dasselbe wie der bereits behandelte BadHost-Fund?+

Nein, aber eng verwandt: BadHost (CVE-2026-48710) ist der Starlette-seitige Auth-Bypass; CVE-2026-42271 ist die LiteLLM-seitige Command Injection. Erst zusammen ergeben sie die unauthentifizierte RCE-Kette mit CVSS 10.0.

Warum wird ein Juni-Fund jetzt nachträglich aufgegriffen?+

Weil die kombinierte Tragweite (unauthentifizierte RCE via Verkettung) über den bereits behandelten BadHost-Einzelfund hinausgeht und für LiteLLM-Betreiber eine eigene, konkrete Handlungsanweisung braucht — nicht, weil es sich um einen 48h-Fund handelt.

Reicht es, nur LiteLLM zu aktualisieren?+

Nein — das schliesst nur die Command-Injection-Endpunkte. Ohne Starlette ≥1.0.1 bleibt der Host-Header-Bypass offen, über den die Authentifizierung selbst umgangen werden kann.

Betrifft mich das, wenn ich LiteLLM nur intern nutze?+

Das reduziert das Risiko (kein Remote-Zugriff von aussen), schliesst es aber nicht: die Command Injection erfordert nur einen authentifizierten Nutzer, und interne Bedrohungen (kompromittierte interne Accounts) bleiben relevant.

Gibt es Hinweise, wie die aktive Ausnutzung konkret abläuft?+

Laut zitierten Quellen liegen zum jetzigen Zeitpunkt keine detaillierten Informationen zum genauen Ausnutzungsmuster vor — CISA bestätigt lediglich aktive Ausnutzung ohne weitere Details.

Fazit

CVE-2026-42271 ist ein Lehrbeispiel dafür, warum Einzel-CVE-Betrachtung zu kurz greifen kann: für sich genommen eine Command Injection mit Authentifizierungs-Voraussetzung, in Kombination mit einem bereits bekannten Framework-Bug aber vollständig unauthentifizierte RCE. Wer den BadHost-Beitrag bereits umgesetzt hat, sollte jetzt gezielt prüfen, ob LiteLLM selbst auf der sicheren Version steht — die Kette ist nur geschlossen, wenn beide Glieder gepatcht sind.

Quellen

Ich schliesse die komplette LiteLLM/Starlette-RCE-Kette — Versions-Audit, Endpunkt-Absicherung, Key-Rotation inklusive.

Versions-Audit von LiteLLM und Starlette über alle Services, Absicherung der MCP-Test-Endpunkte am Reverse Proxy, Netzwerksegmentierung für AI-Gateways, sowie Rotation aller über LiteLLM verwalteten Provider-Keys.

Plattform-Betrieb statt Beratung auf Papier: Ich prüfe, patche und härte Ihre KI-Gateway-Infrastruktur laufend — inklusive verketteter Schwachstellen über mehrere Advisories hinweg.

Über den Autor

[Translate to English:] Foto von Kai Ole Hartwig.

Kai Ole Hartwig

Freelance DevSecOps consultant · OnlyOle Consulting

Programming since 2002 – self-taught, set up my own business with KO-Web in 2012. Over 100 projects, with a focus on security, performance, automation and quality. Today freelance: DevSecOps consulting, training and software development.

Starlette, FastAPI, MCP, Model Context Protocol, vLLM, LiteLLM, ASGI, Python, BadHost, CVE-2026-48710, Host-Header-Injection, Auth-Bypass, Path-Confusion, CWE-444, X41 D-Sec, OSTIF, Anthropic MCP, OAuth Discovery, AI Agents, Mittelstand, DevSecOps, Supply Chain Security

BadHost CVE-2026-48710 (Starlette/MCP)

Vorfall-Analyse zur BadHost-Schwachstelle (CVE-2026-48710): Starlette rekonstruiert request.url aus dem Host-Header per String-Konkatenation, das ASGI-Routing greift aber auf scope['path'] zu. Eine path-basierte Auth-Middleware liest damit einen anderen Pfad als der Router entscheidet. MCP-Server sind besonders exponiert, weil die Spezifikation unauthentifizierte OAuth-Discovery-Endpunkte erzwingt. Disclosure 22.05.2026, Fix in Starlette 1.0.1.

LiteLLM, CVE-2026-42203, Jinja2 SSTI, Server-Side Template Injection, /prompts/test, BSI-Warnung, KI-Proxy-Härtung, MCP-Backend, Mittelstand, DevSecOps

Die zweite LiteLLM-Lücke in 14 Tagen: CVE-2026-42203 (Jinja2-SSTI in /prompts/test) und warum Proxy-Endpunkte hinter API-Keys nicht das Ende der Geschichte sind

BSI-Warnung 07.05.2026 zu LiteLLM CVE-2026-42203: SSTI im /prompts/test-Endpunkt, post-auth RCE für jeden Proxy-User. Fix in 1.83.7-stable, schließt auch die Schwester-CVE -42208. Operative Maßnahmen für KI-Agenten- und MCP-Backend-Stacks.

LangGraph, LangChain, CVE-2026-28277, CVE-2025-67644, CVE-2026-27022, Checkpointer, SQLite, Redis, RediSearch, msgpack, Deserialisierung, SQL-Injection, RCE, KI-Agenten, Agent-Frameworks, self-hosted, get_state_history, DevSecOps, Supply Chain, Mittelstand

LangGraph Checkpointer-Kette (CVE-2026-28277)

Drei am 12.06.2026 von Check Point Research offengelegte LangGraph-Lücken treffen die Gedächtnisschicht (Checkpointer) zustandsbehafteter KI-Agenten. CVE-2025-67644 (CVSS 7.3): SQL-Injection im SQLite-Checkpointer über Metadaten-Filterschlüssel. CVE-2026-28277 (6.8): unsichere msgpack-Deserialisierung beim Checkpoint-Laden. Verkettet ergeben sie RCE im Laufzeitkontext des Agenten — die SQLi schiebt eine gefälschte Checkpoint-Zeile mit angreiferkontrolliertem BLOB ein, den der Decoder rekonstruiert. CVE-2026-27022 (6.5): RediSearch-Query-Injection im Redis-Checkpointer (Zugriffskontroll-Bypass). Vorbedingung: selbst-gehostet, exponierter get_state_history()-Pfad, nutzerkontrollierter Filter; LangSmith-gehostet nicht betroffen. Architektur-Lehre: Ein KI-Agent ist eine privilegierte Identität — Patch schließt die Stelle, Filter-Allowlist + abgedichteter Schreibpfad + minimale Rechte schließen die Klasse. Fix: langgraph 1.0.10 / -sqlite 3.0.1 / -redis 1.0.1.