Resumen Ejecutivo

Se ha identificado una vulnerabilidad de inyección NoSQL en las bibliotecas langgraph-checkpoint-mongodb y langgraph-store-mongodb. Los métodos MongoDBSaver.list() y MongoDBStore.search() aceptan un parámetro filter que se incorpora directamente a las consultas MongoDB sin validación suficiente. Dado que las claves de operadores de consulta MongoDB (aquellas con prefijo $) no son rechazadas durante la construcción del filtro, un llamador con control sobre la entrada del filtro puede incrustar operadores de consulta MongoDB directamente en la consulta, comprometiendo el aislamiento de datos entre tenants.

Detalles CVSS

CVSS 4.0

code
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N
Puntuación Base: 7.1 (Alto)
MétricaValorJustificación
Vector de Ataque (AV)RedActivable remotamente vía API
Complejidad de Ataque (AC)BajaNo se requieren condiciones especiales
Requisitos de Ataque (AT)NingunoSin condiciones previas de despliegue o ejecución
Privilegios Requeridos (PR)BajosLlamador autenticado de la API de checkpoint/store
Interacción de Usuario (UI)NingunaNo se requiere acción del usuario
Confidencialidad del Sistema Vulnerable (VC)NingunaSin impacto directo en el componente vulnerable
Integridad del Sistema Vulnerable (VI)NingunaAcceso de solo lectura
Disponibilidad del Sistema Vulnerable (VA)NingunaSin interrupción del servicio
Confidencialidad del Sistema Subsecuente (SC)AltaAcceso completo a datos de checkpoint de otros tenants
Integridad del Sistema Subsecuente (SI)NingunaSin capacidad de escritura o modificación
Disponibilidad del Sistema Subsecuente (SA)NingunaSin interrupción de servicios dependientes

CVSS 3.1

code
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
Puntuación Base: 7.7 (Alto)
MétricaValorJustificación
Vector de AtaqueRedActivable remotamente vía API
Complejidad de AtaqueBajaNo se requieren condiciones especiales
Privilegios RequeridosBajosLlamador autenticado de la API de checkpoint/store
Interacción de UsuarioNingunaNo se requiere acción del usuario
AlcanceModificadoEl impacto cruza los límites del tenant
ConfidencialidadAltaAcceso completo a datos de checkpoint de otros tenants
IntegridadNingunaAcceso de solo lectura
DisponibilidadNingunaSin interrupción del servicio

Paquetes Afectados

PaqueteDistribuciónMétodos AfectadosVersiones Afectadas
langgraph-checkpoint-mongodbPyPIMongoDBSaver.list(), MongoDBSaver.alist()Anteriores a 0.3.0
langgraph-store-mongodbPyPIMongoDBStore.search()Anteriores a 0.4.0

Preguntas Frecuentes

Como saber si estoy afectado

Es probable que estés afectado si se cumplen TODAS las siguientes condiciones:

  1. Tu aplicación utiliza langgraph-checkpoint-mongodb o langgraph-store-mongodb.
  2. Tu aplicación invoca MongoDBSaver.list(), MongoDBSaver.alist() o MongoDBStore.search() con un argumento filter.
  3. Cualquier parte de ese argumento filter proviene de entrada controlada por el usuario, por ejemplo, parámetros de consulta HTTP, campos del cuerpo de la solicitud o argumentos de herramientas de agentes.
  4. Operas en un contexto multi-tenant donde el filter se utiliza para imponer aislamiento de datos por usuario o por tenant.

Si el argumento filter se construye íntegramente a partir de valores de servidor de confianza, el riesgo práctico es menor, aunque se recomienda igualmente actualizar.

Como corregir el problema

Actualiza a las versiones corregidas de langgraph-checkpoint-mongodb y langgraph-store-mongodb. Si no puedes actualizar de inmediato, aplica la siguiente mitigación: en el código de tu aplicación, antes de pasar cualquier entrada controlada por el usuario al parámetro filter, elimina o escapa los metacaracteres de consulta MongoDB, como el símbolo $.

python
def sanitize_filter(user_filter: dict) -> dict:
    return {
        k: v for k, v in user_filter.items()
        if not k.startswith("$")
    }

Agradecimientos

Se agradece a Kenichi Kawaguchi por la divulgación responsable de este problema a través del programa GitHub Security Advisory en el repositorio langchain-mongodb.

Historial de Revisiones

FechaDescripción
2026-06-05Publicación inicial del aviso