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
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étrica | Valor | Justificación |
|---|---|---|
| Vector de Ataque (AV) | Red | Activable remotamente vía API |
| Complejidad de Ataque (AC) | Baja | No se requieren condiciones especiales |
| Requisitos de Ataque (AT) | Ninguno | Sin condiciones previas de despliegue o ejecución |
| Privilegios Requeridos (PR) | Bajos | Llamador autenticado de la API de checkpoint/store |
| Interacción de Usuario (UI) | Ninguna | No se requiere acción del usuario |
| Confidencialidad del Sistema Vulnerable (VC) | Ninguna | Sin impacto directo en el componente vulnerable |
| Integridad del Sistema Vulnerable (VI) | Ninguna | Acceso de solo lectura |
| Disponibilidad del Sistema Vulnerable (VA) | Ninguna | Sin interrupción del servicio |
| Confidencialidad del Sistema Subsecuente (SC) | Alta | Acceso completo a datos de checkpoint de otros tenants |
| Integridad del Sistema Subsecuente (SI) | Ninguna | Sin capacidad de escritura o modificación |
| Disponibilidad del Sistema Subsecuente (SA) | Ninguna | Sin interrupción de servicios dependientes |
CVSS 3.1
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étrica | Valor | Justificación |
|---|---|---|
| Vector de Ataque | Red | Activable remotamente vía API |
| Complejidad de Ataque | Baja | No se requieren condiciones especiales |
| Privilegios Requeridos | Bajos | Llamador autenticado de la API de checkpoint/store |
| Interacción de Usuario | Ninguna | No se requiere acción del usuario |
| Alcance | Modificado | El impacto cruza los límites del tenant |
| Confidencialidad | Alta | Acceso completo a datos de checkpoint de otros tenants |
| Integridad | Ninguna | Acceso de solo lectura |
| Disponibilidad | Ninguna | Sin interrupción del servicio |
Paquetes Afectados
| Paquete | Distribución | Métodos Afectados | Versiones Afectadas |
|---|---|---|---|
langgraph-checkpoint-mongodb | PyPI | MongoDBSaver.list(), MongoDBSaver.alist() | Anteriores a 0.3.0 |
langgraph-store-mongodb | PyPI | MongoDBStore.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:
- Tu aplicación utiliza
langgraph-checkpoint-mongodbolanggraph-store-mongodb. - Tu aplicación invoca
MongoDBSaver.list(),MongoDBSaver.alist()oMongoDBStore.search()con un argumentofilter. - Cualquier parte de ese argumento
filterproviene 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. - Operas en un contexto multi-tenant donde el
filterse 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 $.
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
| Fecha | Descripción |
|---|---|
| 2026-06-05 | Publicación inicial del aviso |
