flawopen.com/AI Security/lmcache-multiprocess-pickle-deserialization-cve-2026-105192
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]
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
Déroulement de l'Attaque Étape par Étape
Configuration et réponse
| Configuration | Évaluation |
|---|---|
| Mode multiprocessus désactivé | Ce chemin CVE n’est pas activé. |
| Mode multiprocessus limité à loopback | Les 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é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. |
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]
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
return pickle.loads(data)
@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
- ✓Inventoriez les déploiements LMCache et repérez ceux en mode multiprocessus ou distribué ; consignez les versions des paquets et conteneurs.[1], [2]
- ✓Vérifiez l’adresse réelle de liaison ZMQ et les routes réseau. Un réseau privé ne suffit pas si des charges ou locataires non fiables peuvent atteindre le point de terminaison.[2], [5]
- ✓En attendant un correctif fournisseur, désactivez le transport multiprocessus si possible ou limitez-le à loopback si un seul hôte suffit. Pour le multi-nœud requis, filtrez le port aux pairs explicitement fiables ; cela réduit l’exposition sans rendre pickle sûr. Pour tout futur déploiement routable, exigez des pairs ZMQ authentifiés (par exemple CURVE ou un HMAC par message) et remplacez pickle par un format de données validé ; une liste d’autorisation du pare-feu n’est pas une authentification.
- ✓Exécutez le service avec un compte dédié non privilégié et retirez les capacités inutiles du conteneur ; la fiche CVE indique que le conteneur officiel fonctionne en root.[2]
- ✓Surveillez les avis de sécurité et versions LMCache. N’effectuez la mise à niveau que vers une version corrigeant explicitement
CVE-2026-105192; les éléments examinés n’identifient pas de version corrigée.[1], [2] - ✓Recherchez les connexions inattendues au port du transport multiprocessus (5555 par défaut selon la fiche CVE) et évaluez l’exposition avant de conclure à une compromission.[2], [5]
Sources
- JFrog Security Research: CVE-2026-105192 mechanics and mitigations
- CVE Program record CVE-2026-105192 (JFrog CNA record)
- LMCache upstream: DeviceIPCWrapper deserialization source
- LMCache upstream: MessagePack extension decoding
- LMCache upstream: multiprocess ZeroMQ transport
- The Hacker News: critical LMCache pickle deserialization disclosure