FlawOpen

flawopen.com/Teardowns/cve-2026-105752-vllm-harmony-cache-salt-omission

● CVE-2026-105752 · CVSS 3.1 · Niedrig
Sicherheitsforschung · FlawOpen

CVE-2026-105752: fehlendes cache_salt in vLLM

Eine GPT-OSS-Werkzeugfortsetzung in vLLM Responses konnte cache_salt auslassen und einen ungesalzenen Prefix-Cache-Namensraum verwenden. Aktualisieren Sie auf vLLM 0.30.0 oder neuer und erhalten Sie mandantenspezifische Salts in jeder Fortsetzung.[1], [5]

💡 Einfache Erklärung (ELI5)

Stellen Sie sich Unterlagen jedes Kunden in Schließfächern mit privaten Farbmarkierungen vor. Die erste Anfrage erhält die richtige Markierung, doch ein Werkzeug verliert sie beim Zurückgeben der Unterlagen für den nächsten Schritt. Ein gemeinsames Regal kann per Cache-Treffer anzeigen, ob vermutete Seiten bereits dort liegen; die Seiten selbst gibt es nicht heraus.[1]

Kernkonzepte & Begriffe

Prefix caching
Verwendet Modell-Schlüssel/Wert-Blöcke für gleiche Präfixe erneut.[6]
cache_salt
Wert im Hash des ersten Blocks zur Trennung von Caches mit unterschiedlichen Salts.[6]
Harmony continuation
Nächste Modelleingabe nach einer Harmony-Antwort, auch nach einem Werkzeugaufruf.[1]
Membership oracle
Signal für einen vermuteten Präfix, ohne dessen Inhalt offenzulegen.[1]
CWE-524
Verwendung eines Caches mit sensiblen Informationen; primäre Einstufung der Meldung.[1]

Framework-Zuordnungen

  • CWE-Referenz für die in diesem Leitfaden beschriebene Schwachstelle: CWE-524

Ursachenanalyse

Die vLLM-Meldung beschreibt GPT-OSS Harmony unter POST /v1/responses. Die erste Engine-Eingabe übergab request.cache_salt an tokens_input; nach einem integrierten oder MCP-Werkzeugaufruf nutzte die Fortsetzung tokens_input(token_ids) ohne Salt. Der Helper speichert das Salt nur, wenn es übergeben wird. Mit automatischem Prefix-Caching in einer gemeinsamen Bereitstellung nutzte die Fortsetzung daher den ungesalzenen Namensraum. Die Meldung nennt Versionen vor 0.30.0, bestätigt das Verhalten auf 0.25.1 und sagt, dass die untere Grenze nicht feststeht. Das Ergebnis ist ein Cache-Mitgliedschaftssignal über cached_tokens_per_turn, keine direkte Offenlegung beliebigen Prompt-Texts. CWE-200 wird ebenfalls als Auswirkung genannt; hier ist CWE-524 die einzige primäre Schwachstelle.[1], [3], [4]

Schritt-für-Schritt Angriffsablauf

Schritt 1

Ein gemeinsamer Dienst erfüllt die Voraussetzungen

Nötig sind eine betroffene Version, GPT-OSS Harmony Responses, Prefix-Caching und ein Werkzeug; das Opfer setzt cache_salt und erreicht eine Fortsetzung.[1]

Schritt 2

Die erste Engine-Eingabe erhält das Salt

Der erste tokens_input-Aufruf enthält request.cache_salt und ordnet das Präfix dem gesalzenen Namensraum des Aufrufers zu.[1]

Schritt 3

Die Werkzeugfortsetzung verliert das Salt

Nach dem Werkzeugergebnis ruft die Fortsetzung tokens_input(token_ids) ohne das ursprüngliche Salt auf; das Präfix kann im gemeinsamen ungesalzenen Namensraum landen.[1]

Schritt 4

Ein Cache-Zähler kann Mitgliedschaft offenbaren

Ein Mitnutzer, der das Präfix rekonstruiert, kann cached_tokens_per_turn zur Mitgliedschaftsprüfung nutzen, aber keinen beliebigen Prompt abrufen.[1]

Schritt 5

Der Renderer erhält das Salt in jedem Turn

Die gemergte Renderer-Refaktorierung erhält cache_salt beim Harmony-Rendering und übergibt es jeder neuen Engine-Eingabe; aktualisieren Sie auf 0.30.0+.[1], [3], [7]

Quellcode: Verwundbar vs. Sicher

Die vLLM-Meldung beschreibt GPT-OSS Harmony unter POST /v1/responses. Die erste Engine-Eingabe übergab request.cache_salt an tokens_input; nach einem integrierten oder MCP-Werkzeugaufruf nutzte die Fortsetzung tokens_input(token_ids) ohne Salt. Der Helper speichert das Salt nur, wenn es übergeben wird. Mit automatischem Prefix-Caching in einer gemeinsamen Bereitstellung nutzte die Fortsetzung daher den ungesalzenen Namensraum. Die Meldung nennt Versionen vor 0.30.0, bestätigt das Verhalten auf 0.25.1 und sagt, dass die untere Grenze nicht feststeht. Das Ergebnis ist ein Cache-Mitgliedschaftssignal über cached_tokens_per_turn, keine direkte Offenlegung beliebigen Prompt-Texts. CWE-200 wird ebenfalls als Auswirkung genannt; hier ist CWE-524 die einzige primäre Schwachstelle. Upstream excerpts, not a literal line-by-line diff.[1], [3], [4], [7]

Quelltextauszug: vLLM Responses Harmony-Renderer (Auszüge verschiedener Revisionen)

VERWUNDBARE IMPLEMENTIERUNG
# Der ursprüngliche Anfragepfad verwendete ein Salt, die Fortsetzung nach dem Tool-Aufruf jedoch nicht.
engine_input = tokens_input(token_ids, cache_salt=request.cache_salt)

# Nach einem Tool-Ergebnis baute die Fortsetzung die Eingabe so neu auf:
engine_input = tokens_input(token_ids)
GEHÄRTETER SICHERHEITS-PATCH
# Das Anfrage-Salt im Harmony-Rendering-Kontext beibehalten.
cache_salt = cast(str | None, engine_input.get("cache_salt"))
engine_input = self.online_renderer.render_responses_harmony_messages(
    context.messages,
    cache_salt=cache_salt,
    tok_params=tok_params,
)

# Der Renderer übergibt das Salt, sobald er eine Eingabe für die Engine erstellt.
engine_input = tokens_input(prompt["prompt_token_ids"], cache_salt=cache_salt)

Checkliste für Engineering & Systemsicherheit

Quellen