Vulnerabilidad crítica de LangChain Core expone información mediante inyección de serialización

Se ha dado a conocer una vulnerabilidad de seguridad crítica en LangChain Core que podría ser explotada por un atacante para robar secretos sensibles e incluso manipular las respuestas de los modelos de lenguaje de gran tamaño (LLM) mediante inyección de prompts.

LangChain Core (es decir, langchain-core) es un paquete central de Python dentro del ecosistema LangChain que proporciona las interfaces fundamentales y abstracciones independientes del modelo para desarrollar aplicaciones basadas en LLM.

La falla, identificada como CVE-2025-68664, cuenta con una puntuación CVSS de 9.3 sobre 10.0. El investigador de seguridad Yarden Porat fue quien reportó el problema el 4 de diciembre de 2025, y la vulnerabilidad ha sido bautizada con el nombre de LangGrinch.

“Existe una vulnerabilidad de inyección de serialización en las funciones dumps() y dumpd() de LangChain”, indicaron los mantenedores del proyecto en un aviso de seguridad. “Estas funciones no escapan correctamente los diccionarios que contienen claves ‘lc’ al serializar diccionarios de formato libre.”

“La clave ‘lc’ es utilizada internamente por LangChain para marcar objetos serializados. Cuando los datos controlados por el usuario incluyen esta estructura de clave, se tratan como un objeto legítimo de LangChain durante la deserialización, en lugar de considerarse datos planos del usuario.”

De acuerdo con Porat, investigador de Cyata, el núcleo del problema radica en que ambas funciones no neutralizan adecuadamente los diccionarios controlados por el usuario que contienen claves “lc”. Dicho marcador representa objetos de LangChain dentro del formato interno de serialización del framework.

“Una vez que un atacante logra que un flujo de orquestación de LangChain serialice y luego deserialice contenido que incluye una clave ‘lc’, se puede instanciar un objeto arbitrario inseguro, lo que potencialmente activa múltiples rutas favorables para el atacante”, explicó Porat.

Esto puede derivar en distintos escenarios, como la extracción de secretos desde variables de entorno cuando la deserialización se realiza con “secrets_from_env=True” (configuración que anteriormente estaba habilitada por defecto), la instanciación de clases dentro de espacios de nombres confiables preaprobados —como langchain_core, langchain y langchain_community— e incluso la posible ejecución de código arbitrario a través de plantillas Jinja2.

Además, este fallo de escape permite la inyección de estructuras de objetos de LangChain mediante campos controlados por el usuario, como metadata, additional_kwargs o response_metadata, utilizando técnicas de inyección de prompts.

El parche publicado por LangChain introduce valores predeterminados más restrictivos en las funciones load() y loads(), mediante un parámetro de lista blanca llamado “allowed_objects”, que permite definir qué clases pueden ser serializadas o deserializadas. Asimismo, las plantillas Jinja2 quedan bloqueadas por defecto y la opción “secrets_from_env” ahora se establece en “False”, deshabilitando la carga automática de secretos desde el entorno.

Las siguientes versiones de langchain-core se ven afectadas por CVE-2025-68664:

  • >= 1.0.0, < 1.2.5 (corregido en 1.2.5)
  • < 0.3.81 (corregido en 0.3.81)

Cabe destacar que existe una vulnerabilidad de inyección de serialización similar en LangChain.js, que también se origina por no escapar correctamente objetos con claves “lc”, lo que facilita la extracción de secretos y la inyección de prompts. Esta falla ha sido registrada como CVE-2025-68665, con una puntuación CVSS de 8.6.

Afecta a los siguientes paquetes npm:

  • @langchain/core >= 1.0.0, < 1.1.8 (corregido en 1.1.8)
  • @langchain/core < 0.3.80 (corregido en 0.3.80)
  • langchain >= 1.0.0, < 1.2.3 (corregido en 1.2.3)
  • langchain < 0.3.37 (corregido en 0.3.37)

Dada la gravedad de la vulnerabilidad, se recomienda encarecidamente a los usuarios actualizar a una versión corregida lo antes posible para garantizar una protección adecuada.

“El vector de ataque más común se da a través de campos de respuesta del LLM como additional_kwargs o response_metadata, los cuales pueden ser manipulados mediante inyección de prompts y luego serializados o deserializados durante operaciones en streaming”, concluyó Porat. “Este es un claro ejemplo de la intersección entre la IA y la seguridad clásica, donde muchas organizaciones se ven sorprendidas. La salida de un LLM debe considerarse una entrada no confiable.”

Gracias por apoyar el libre conocimiento con tu donación!
Bitcoin: bc1q4sw9260twfcxatj8mjp7358cyvrf8whzlelyhj
Ethereum: 0xFb93D2a3c9d1A0b83EE629c2dE1725BCa192e581
Litecoin: LbFduJmHvQXcpCnwfUT7aJ4DYoWSL3iQw8
Dogecoin: D7QQVqNR5rk215A4zd2gyzV9P2bLQtZHFV
Transferencia bancaria en México:
Cuenta CLABE: 646180224401848086 Nombre: Masterhacks LATAM Banco: STP

Unete a nuestros grupos:
Telegram: https://t.me/masterhacks_net
Canal de WhatsApp https://whatsapp.com/channel/0029VaBBLCn5vKAH9NOWCl3K

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *