FlawOpen

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

● CVE-2026-105192 · CVSS 9.8[2] · Critique
Recherche · FlawOpen

CVE-2026-105192 : désérialisation pickle sans authentification dans le mode multiprocessus de LMCache

CVE-2026-105192 permet à un pair non authentifié qui atteint le transport multiprocessus de LMCache de déclencher une désérialisation pickle non sûre. Vérifiez si le point de terminaison ZMQ est routable, limitez son accès et surveillez la publication d’un correctif.[1], [2]

Vecteur CVSSCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H[2]
💡 Explication en Langage Simple (ELI5)

LMCache reçoit un colis scellé d’un pair réseau et l’ouvre avec un mécanisme capable d’exécuter des instructions cachées. La faille intervient avant que le serveur vérifie le type de message annoncé par le colis.[1], [2]

Concepts Clés et Termes

CWE-502 : désérialisation non sûre
pickle de Python peut exécuter du comportement lors de la reconstruction d’objets. Il ne convient pas aux données d’un pair réseau non fiable.[1], [2]
Mode multiprocessus de LMCache
Mode où les composants LMCache communiquent par transport ZeroMQ. La fiche CVE décrit un point de terminaison ROUTER sans authentification.[2], [5]
Extension MessagePack
Une valeur d’extension MessagePack atteint DeviceIPCWrapper.Deserialize pendant le décodage, avant la sélection du type de requête.[2], [4], [3]
Frontière d’exposition
Selon la fiche CVE, le transport est lié à localhost par défaut. Un --host routable ou un réseau de cluster accessible change les émetteurs possibles.[2], [5]
Versions concernées
La divulgation indique les versions 0.3.9 à 0.5.5, ainsi que les préversions 0.5.6 et la branche de développement, au 07/10/2026.[1], [2]
CWE-306 : absence d’authentification pour une fonction critique
Le registre CVE attribue également CWE-306, car le ROUTER ZeroMQ n’authentifie pas ses pairs. Il s’agit d’une faiblesse distincte à la frontière du transport, séparée de la reconstruction pickle non sûre (CWE-502). L’exposition dépend toujours d’un endpoint accessible ; l’écoute par défaut sur localhost n’est pas accessible à distance à elle seule.[2]

Correspondances de référentiels

  • Référence CWE pour la faiblesse décrite dans ce guide : CWE-306 CWE-502

Déroulement de l'Attaque Étape par Étape

Étape 1

Le déploiement active le transport multiprocessus

Le problème concerne le mode multiprocessus/distribué, pas toutes les installations de LMCache.[2], [1]

Étape 2

Un pair peut atteindre le point de terminaison ZMQ

La fiche CVE indique localhost par défaut ; l’opérateur peut définir un --host routable. L’accessibilité est une condition préalable.[2], [5]

Étape 3

Le décodage appelle pickle.loads

L’extension MessagePack de code 1 atteint DeviceIPCWrapper.Deserialize, qui appelle pickle.loads avant que le gestionnaire valide le type de message.[2], [4], [3]

Étape 4

Le processus traite l’objet reconstruit

La fiche indique que l’exécution hérite des privilèges du processus LMCache ; le conteneur officiel fonctionne en root. Cela décrit l’impact, pas l’exposition d’un déploiement donné.[2], [3]

Configuration et réponse

ConfigurationÉvaluation
Mode multiprocessus désactivéCe chemin CVE n’est pas activé.
Mode multiprocessus limité à loopbackLes pairs distants ne devraient pas atteindre le point de terminaison ; vérifiez le réseau hôte et les limites de confiance locales.
Liaison routable ou port de cluster exposéConsidérez le service potentiellement joignable ; restreignez l’accès et évaluez les privilèges du processus.
Versions concernéesLa divulgation indique les versions 0.3.9 à 0.5.5, ainsi que les préversions 0.5.6 et la branche de développement, au 07/10/2026.

Code Source : Vulnérable vs Sécurisé

La fiche CVE Program attribue CVE-2026-105192 à JFrog et décrit le chemin extension MessagePack → DeviceIPCWrapper.Deserialize → pickle.loads, la liaison localhost par défaut, l’option --host routable et CVSS 9,8. Le code amont confirme l’appel au désérialiseur. Cet article ne fournit pas de pickle armé et ne prétend pas qu’un correctif fournisseur existe. Le point de terminaison doit être joignable ; une liaison locale par défaut ne rend pas à elle seule le déploiement accessible à distance. L’exemple temporaire désactive ce chemin de décodage et n’est pas un correctif LMCache prêt à l’emploi ; évaluez l’impact et isolez le réseau dans l’attente d’une version prise en charge.[2], [1], [3], [4], [5]

IMPLÉMENTATION VULNÉRABLE
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
    return pickle.loads(data)
PATCH SÉCURISÉ ET ROBUSTE
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
    # Mesure de confinement temporaire en échec fermé, pas un correctif upstream.
    raise PermissionError("LMCache peer deserialization disabled pending vendor fix")

Liste de Contrôle de Sécurité pour l'Ingénierie

Sources

← AI Security Directory →