Bußgeld-Kopfzeile

CVE-2025-62164 PoC: vLLM's Completions Data-Plane Bug, der Embeddings in eine Angriffsfläche verwandelt

Zusammenfassung

Mit der Weiterentwicklung der Infrastruktur für Large Language Models (LLM) verlagert sich die Angriffsfläche von den traditionellen Verwaltungsschnittstellen ("Control Plane") auf den eigentlichen Fluss der Inferenzdaten ("Data Plane").

CVE-2025-62164 stellt eine paradigmatische Schwachstelle in der vLLM, der Industriestandard-Engine für LLM-Serving mit hohem Durchsatz. Diese Schwachstelle ermöglicht es Angreifern, die /v1/erledigungen Endpunkt durch Einschleusen bösartiger zeitnahe Einbettung. Durch die Ausnutzung unsicherer Deserialisierungsmechanismen in der Ladelogik von PyTorch kann ein Angreifer eine Speicherbeschädigung auslösen, die zu Denial of Service (DoS) und potenzieller Remote Code Execution (RCE) führt - und das alles, ohne gültige API-Schlüssel zu benötigen (je nach Einsatzkonfiguration).

Diese Analyse schlüsselt die technische Ursache auf, liefert einen konzeptionellen Proof of Concept (PoC) und skizziert unmittelbare Abhilfeschritte für KI-Plattform-Ingenieure.

CVE-2025-62164-PoC-vLLMs-Completions-Data-Plane-Bug

Der Angriffsvektor: Warum Einbettungen gefährlich sind

Bei Standard-LLM-Interaktionen senden die Benutzer Text. Fortgeschrittene Inferenzmaschinen wie vLLM unterstützen jedoch Einbettungselemente (Tensordaten) direkt über die API. Dies ist für die Leistungsoptimierung und multimodale Arbeitsabläufe gedacht, aber es öffnet eine gefährliche Tür: Direkte Objektdeserialisierung.

Die Schwachstelle liegt darin, wie vLLM diese eingehenden Tensoren verarbeitet. Insbesondere vertraut die Engine implizit auf die Struktur der vom Benutzer bereitgestellten serialisierten Daten und geht davon aus, dass es sich um eine harmlose mathematische Darstellung handelt.

Der Pfad des angreifbaren Codes

Die kritische Schwachstelle besteht in vllm/einstiegspunkte/renderer.py innerhalb der upload_and_validate_embed Funktion.

Python

# Vereinfachte Darstellung der anfälligen Logik
torch importieren
importieren io
importiere pybase64

def _load_and_validate_embed(embed: bytes):
    # DANGER: Deserialisierung nicht vertrauenswürdiger Binärströme
    tensor = torch.load(
        io.BytesIO(pybase64.b64decode(embed, validate=True)),
        weights_only=True, # Das falsche Gefühl von Sicherheit
        map_location=torch.device("cpu"),
    )
    Tensor zurückgeben

Während weights_only=True die Ausführung von beliebigem Python-Code verhindern soll (eine häufige Pickle-Schwachstelle), ist es nicht ausreichend um Speicherkorruption beim Umgang mit bestimmten PyTorch-Tensortypen zu verhindern.

Technische Vertiefung: Sparse Tensors ausnutzen

Der Kern von CVE-2025-62164 nutzt eine Unterbrechung der Verbindung zwischen den Sicherheitsflags von PyTorch und seiner Handhabung von Spärliche Tensoren.

  1. Die PyTorch 2.8+ Verschiebung: Neuere Versionen von PyTorch überspringen standardmäßig die teuren Integritätsprüfungen für dünn besetzte Tensoren, um die Leistung zu verbessern.
  2. Die Umgehungsstraße: Ein Angreifer kann einen missgebildeten "Sparse COO" (Coordinate Format) Tensor konstruieren. Auch mit weights_only=True, fackel.laden wird diese Struktur deserialisiert.
  3. Beschädigung des Speichers: Da die Indizes des Sparse-Tensors während des Ladens nicht mit der deklarierten Größe abgeglichen werden, führen nachfolgende Operationen (wie das Konvertieren des Tensors in ein dichtes Format oder das Verschieben in den GPU-Speicher) zu einem Out-of-Bounds (OOB) Schreiben.

Dieses OOB-Schreiben bringt den Python-Interpreter sofort zum Absturz (DoS). Durch ausgeklügeltes Heap-Spraying und Manipulation des Speicherlayouts kann dieser primitive Angriff eskalieren, um die Kontrolle über den Befehlszeiger zu erlangen und einen RCE zu erreichen.

CVE-2025-62164 PoC-Haftung

Proof of Concept (PoC) Analyse

Haftungsausschluss: Dieser PoC ist nur für Bildungs- und Verteidigungszwecke gedacht.

1. Konstruktion der Nutzlast

Der Angreifer erstellt einen serialisierten PyTorch-Tensor, der die internen Konsistenzbedingungen verletzt.

Python

Fackel importieren
importieren io
base64 importieren

def generate_exploit_payload():
    buffer = io.BytesIO()
    
    # Erstellen eines Sparse Tensor, der beim Zugriff einen OOB-Schreibvorgang auslösen soll
    # Die spezifischen Indizes werden so gestaltet, dass sie außerhalb des zugewiesenen Speichers liegen
    # malformed_tensor = torch.sparse_coo_tensor(indices=..., values=..., size=...)
    
    # Zur Demonstration simulieren wir die Serialisierung
    # Bei einem echten Angriff enthält dieser Puffer den binären Beizenstrom
    torch.save(malformed_tensor, buffer)
    
    # Codierung für JSON-Transport
    return base64.b64encode(buffer.getvalue()).decode('utf-8')

2. Der Exploit-Antrag

Der Angreifer sendet diese Nutzlast an den Standardabschluss-Endpunkt.

POST http://target-vllm-instance:8000/v1/completions

JSON

{
  "model": "meta-llama/Llama-2-7b-hf",
  "prompt": {
    "embedding": ""
  },
  "max_tokens": 10
}

3. Das Ergebnis

  • Bester Fall: Der vLLM-Arbeitsprozess stößt auf einen Segmentierungsfehler und stürzt ab. Wenn der Orchestrator (z. B. Kubernetes) ihn neu startet, kann der Angreifer die Anforderung einfach erneut senden und so eine dauerhafte Dienstverweigerung verursachen.
  • Schlimmster Fall: Durch die Beschädigung des Speichers werden Funktionszeiger überschrieben, so dass der Angreifer Shellcode im Kontext des Containers ausführen kann.

Folgenabschätzung

  • Verfügbarkeit (hoch): Dies ist ein trivialer DoS, der einfach auszuführen ist. Eine einzige Anfrage kann einen Inferenzknoten zum Absturz bringen. In Cluster-Umgebungen kann ein Angreifer die Knoten durchlaufen, um den gesamten Cluster zu beeinträchtigen.
  • Vertraulichkeit und Integrität (kritisch): Wenn RCE erreicht wird, erhält der Angreifer Zugriff auf die Umgebungsvariablen (die oft Hugging Face-Token, S3-Schlüssel oder WandB-Schlüssel enthalten) und die in den Speicher geladenen proprietären Modellgewichte.

Sanierung und Schadensbegrenzung

1. Unverzüglich aufrüsten

Die Sicherheitslücke wird in vLLM v0.11.1.

  • Aktion: Aktualisieren Sie Ihre Docker-Images oder PyPI-Pakete sofort auf die neueste Version.
  • Logik reparieren: Der Patch implementiert eine strenge Validierungslogik, die unsichere Tensorformate zurückweist, bevor sie mit dem Speicherallokator interagieren.

2. Eingangssanitisierung (WAF/Gateway-Ebene)

Wenn Sie nicht sofort aufrüsten können, müssen Sie den Angriffsvektor am Gateway blockieren.

  • Aktion: Konfigurieren Sie Ihr API-Gateway (Nginx, Kong, Traefik) so, dass es eingehende JSON-Teile überprüft.
  • Die Regel: Blockieren Sie jede Anfrage an /v1/erledigungen wo die Aufforderung Feld enthält ein Objekt mit einer einbetten. Schlüssel.

3. Netzsegmentierung

Stellen Sie sicher, dass Ihr Inferenzserver nicht direkt dem öffentlichen Internet ausgesetzt ist. Der Zugriff sollte durch einen Backend-Dienst vermittelt werden, der die Eingaben bereinigt und die Authentifizierung übernimmt.

Schlussfolgerung

CVE-2025-62164 ist ein Weckruf für die KI-Sicherheit. Wir können "Modelle" und "Einbettungen" nicht länger als träge Daten behandeln. In der Ära der KI, Daten sind Codeund ihre Deserialisierung erfordert den gleichen Grad an Kontrolle wie die Ausführung einer binären ausführbaren Datei.

Für Teams, die Pen-Tests auf einer KI-Infrastruktur durchführen (wie Penligent.ai), sollte die Überprüfung auf exponierte Serialisierungsendpunkte in Inferenzmaschinen nun ein Standardbestandteil des Aufgabenbereichs sein.

Anmerkung des Autors: Halten Sie Ihre KI-Infrastruktur sicher. Validieren Sie immer Eingaben, vertrauen Sie niemals serialisierten Daten und halten Sie Ihre vLLM-Versionen auf dem neuesten stabilen Release.

vLLM's Completions Data-Plane Bug, der Einbettungen in eine Angriffsfläche verwandelt
Teilen Sie den Beitrag:
Verwandte Beiträge