FlawOpen

flawopen.com/AI Security/lmcache-multiprocess-pickle-deserialization-cve-2026-105192

● CVE-2026-105192 · CVSS 9.8[2] · Kritisch
Sicherheitsforschung · FlawOpen

CVE-2026-105192: Unauthentifizierte Pickle-Deserialisierung im LMCache-Multiprozessmodus

CVE-2026-105192 ermöglicht einem nicht authentifizierten Gegenüber mit Zugriff auf den LMCache-Multiprozess-Transport eine unsichere Pickle-Deserialisierung. Prüfen Sie die Erreichbarkeit des ZMQ-Endpunkts, beschränken Sie den Zugriff und verfolgen Sie eine Herstellerkorrektur.[1], [2]

CVSS-VektorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H[2]
💡 Einfache Erklärung (ELI5)

LMCache nimmt ein versiegeltes Paket von einem Netzwerkpartner entgegen und öffnet es mit einem Verfahren, das versteckte Anweisungen ausführen kann. Das geschieht, bevor der Server prüft, welchen Nachrichtentyp das Paket vorgibt.[1], [2]

Kernkonzepte & Begriffe

CWE-502: unsichere Deserialisierung
Python-pickle kann beim Wiederherstellen von Objekten Verhalten ausführen und ist für Daten nicht vertrauenswürdiger Netzwerkpartner ungeeignet.[1], [2]
LMCache-Multiprozessmodus
LMCache-Komponenten kommunizieren dabei über ZeroMQ. Der CVE-Eintrag beschreibt einen nicht authentifizierten ROUTER-Endpunkt.[2], [5]
MessagePack-Erweiterung
Ein MessagePack-Erweiterungswert erreicht beim Dekodieren DeviceIPCWrapper.Deserialize, bevor der Anfragetyp ausgewählt wird.[2], [4], [3]
Angriffsfläche
Laut CVE-Eintrag bindet der Transport standardmäßig an localhost. Ein routbares --host oder ein erreichbares Clusternetz ändert die möglichen Absender.[2], [5]
Betroffene Versionen
Die Offenlegung nennt Versionen 0.3.9 bis 0.5.5 einschließlich 0.5.6-Release-Kandidaten und Entwicklungszweig (Stand 07.10.2026).[1], [2]
CWE-306: fehlende Authentifizierung für eine kritische Funktion
Der CVE-Datensatz ordnet auch CWE-306 zu, weil der ZeroMQ-ROUTER seine Peers nicht authentifiziert. Das ist eine separate Schwäche an der Transportgrenze, unabhängig von der unsicheren Pickle-Deserialisierung (CWE-502). Eine Gefährdung setzt weiterhin einen erreichbaren Endpunkt voraus; die Standardbindung an localhost ist allein nicht aus dem Netzwerk erreichbar.[2]

Framework-Zuordnungen

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

Schritt-für-Schritt Angriffsablauf

Schritt 1

Der Einsatz aktiviert den Multiprozess-Transport

Betroffen ist der Multiprozess- beziehungsweise verteilte Modus, nicht jede LMCache-Installation.[2], [1]

Schritt 2

Ein Gegenüber erreicht den ZMQ-Endpunkt

Laut CVE-Eintrag ist localhost voreingestellt; Betreiber können ein routbares --host setzen. Erreichbarkeit ist Voraussetzung.[2], [5]

Schritt 3

Das Dekodieren ruft pickle.loads auf

MessagePack-Erweiterungscode 1 erreicht DeviceIPCWrapper.Deserialize, das pickle.loads vor der Prüfung des Nachrichtentyps durch den Handler aufruft.[2], [4], [3]

Schritt 4

Der Prozess verarbeitet das rekonstruierte Objekt

Laut Eintrag gilt der Prozesskontext von LMCache; der offizielle Container läuft als root. Das beschreibt die Auswirkung, nicht die Erreichbarkeit einer konkreten Installation.[2], [3]

Einsatzbedingung und Reaktion

BedingungEinschätzung
Multiprozessmodus deaktiviertDieser CVE-Pfad ist nicht aktiv.
Multiprozessmodus nur an Loopback gebundenNetzwerkpartner sollten den Endpunkt nicht erreichen; Host-Netzwerk und lokale Vertrauensgrenzen prüfen.
Routbare Bindung oder offener Cluster-PortAls möglicherweise erreichbar behandeln, Zugriff beschränken und Prozessrechte prüfen.
Betroffene VersionenDie Offenlegung nennt Versionen 0.3.9 bis 0.5.5 einschließlich 0.5.6-Release-Kandidaten und Entwicklungszweig (Stand 07.10.2026).

Quellcode: Verwundbar vs. Sicher

Der CVE-Program-Eintrag ordnet CVE-2026-105192 JFrog zu und dokumentiert MessagePack-Erweiterung → DeviceIPCWrapper.Deserialize → pickle.loads, die standardmäßige localhost-Bindung, die Option --host und CVSS 9,8. Der Upstream-Code bestätigt den Deserialisierungsaufruf. Der Artikel enthält kein bewaffnetes Pickle und behauptet keine Herstellerkorrektur. Der Endpunkt muss erreichbar sein; die lokale Standardbindung allein macht ihn nicht aus dem Netzwerk erreichbar. Das temporäre Codebeispiel deaktiviert diesen Dekodierungspfad und ist kein direkt einsetzbarer LMCache-Patch; prüfen Sie die Betriebsauswirkung und isolieren Sie das Netz, bis eine unterstützte Korrektur vorliegt.[2], [1], [3], [4], [5]

VERWUNDBARE IMPLEMENTIERUNG
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
    return pickle.loads(data)
GEHÄRTETER SICHERHEITS-PATCH
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
    # Vorübergehende Fail-Closed-Eindämmung, kein Upstream-Patch.
    raise PermissionError("LMCache peer deserialization disabled pending vendor fix")

Checkliste für Engineering & Systemsicherheit

Quellen

← AI Security Directory →