Critical LangChain Core Vulnerability Exposes Secrets via Serialization Injection
Mis à jour :
Vulnérabilité critique dans LangChain Core
Une faille de sécurité majeure, nommée “LangGrinch” et référencée CVE-2025-68664, a été découverte dans la bibliothèque LangChain Core. Cette vulnérabilité, notée 9.3/10 sur l’échelle CVSS, permettrait à des attaquants d’exfiltrer des informations sensibles et d’influencer les réponses des modèles de langage (LLM).
Le problème réside dans les fonctions dumps() et dumpd() qui ne gèrent pas correctement les dictionnaires contenant une clé interne ‘lc’ lors de la sérialisation. Cela permet à des données contrôlées par un utilisateur d’être interprétées comme des objets LangChain légitimes lors de la désérialisation, ouvrant la voie à l’exécution d’actions non autorisées.
Points Clés :
- Nature de la vulnérabilité : Injection de sérialisation due à une mauvaise gestion des clés internes ‘lc’.
- Impact : Vol de secrets (variables d’environnement), injection de code arbitraire via des templates (Jinja2), et manipulation des réponses des LLM via des injections de prompt.
- Vecteur d’attaque courant : Champs de réponse des LLM comme
additional_kwargsouresponse_metadata, contrôlables par injection de prompt lors des opérations de streaming. - Vulnérabilité similaire : Une faille identique (CVE-2025-68665, CVSS 8.6) a été identifiée dans LangChain.js.
Vulnérabilités (avec CVE) :
- CVE-2025-68664 : Vulnérabilité critique dans LangChain Core (Python).
- CVE-2025-68665 : Vulnérabilité de sérialisation dans LangChain.js.
Versions affectées (Python - langchain-core) :
= 1.0.0, < 1.2.5 (Corrigé dans 1.2.5)
- < 0.3.81 (Corrigé dans 0.3.81)
Versions affectées (JavaScript - LangChain.js) :
- @langchain/core >= 1.0.0, < 1.1.8 (Corrigé dans 1.1.8)
- @langchain/core < 0.3.80 (Corrigé dans 0.3.80)
- langchain >= 1.0.0, < 1.2.3 (Corrigé dans 1.2.3)
- langchain < 0.3.37 (Corrigé dans 0.3.37)
Recommandations :
- Mise à jour : Installer immédiatement les versions corrigées des bibliothèques LangChain Core et LangChain.js.
- Sécurité : Considérer les sorties des LLM comme des entrées non fiables et mettre en place des mécanismes de validation et de sécurité appropriés.
- Configuration par défaut : Les correctifs introduisent de nouvelles valeurs par défaut plus restrictives :
- Utilisation d’une liste blanche (
allowed_objects) pour spécifier les classes autorisées à la sérialisation/désérialisation. - Blocage par défaut des templates Jinja2.
- Désactivation par défaut du chargement automatique des secrets depuis l’environnement (
secrets_from_env=False).
- Utilisation d’une liste blanche (
