FlawOpen

flawopen.com/AI Security/langroid-neo4j-cypher-injection-cve-2026-55615

● CVE-2026-55615 · CVSS v4 9.2[1] · Crítica
Investigación · FlawOpen

Langroid CVE-2026-55615: inyección prompt-to-Cypher

Langroid enviaba Cypher del modelo a Neo4j sin validarlo. Actualice a 0.65.5; los permisos de la base siguen siendo el límite de seguridad.[1], [2], [4]

Vector CVSSCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N[1]
💡 Explicación en Lenguaje Sencillo (ELI5)

Una bibliotecaria recibe una pregunta en lenguaje corriente y entrega las instrucciones de base de datos resultantes directamente a un empleado con poder. Si una nota hostil modifica la pregunta, el empleado sigue las instrucciones. CVE-2026-55615 permitía que contenido no confiable influyera en el Cypher que Langroid enviaba a Neo4j.[1]

Conceptos Clave y Términos

Cypher
Lenguaje de consulta de Neo4j para leer y cambiar datos de grafos. Otros procedimientos dependen de la configuración y de los permisos de la cuenta.[1]
Neo4jChatAgent
Agente de Langroid que convierte tareas en lenguaje natural a Cypher y las envía a Neo4j mediante herramientas de lectura o creación.[1], [3]
Prompt injection
Entrada no confiable cambia el comportamiento del modelo. Las consultas creadas por el modelo deben tratarse como entrada no confiable.[1]
Least-privilege database role
Identidad de base de datos limitada a los datos y operaciones necesarios. Este límite sigue siendo esencial aunque exista validación en la aplicación.[1], [5]
Validador de consultas Cypher
El validador de Langroid 0.65.5 aplica comprobaciones de palabras clave y patrones. La documentación advierte que pueden eludirse; son defensa en profundidad, no el límite de autorización. Controle el acceso mediante los permisos de roles de Neo4j.[6], [3]

Mapeos de marcos

  • Referencia CWE para la debilidad descrita en esta guía: CWE-74

Flujo de Ataque Paso a Paso

Paso 1

Un agente de grafos vulnerable acepta consultas del modelo

Afecta a Langroid hasta 0.65.4. El ataque requiere influir en el prompt directamente o mediante contenido recuperado y que el modelo use una herramienta Neo4jChatAgent. El aviso asigna CWE-74 y CVSS 4.0 9,2 (Crítico).[1], [2]

Paso 2

El contenido influye en el Cypher enviado por el agente

Antes del arreglo, cypher_retrieval_tool enviaba msg.cypher_query a read_query y cypher_creation_tool pasaba la consulta a write_query. El aviso rastrea esos valores hasta session.run(query, parameters) y tx.run(query, parameters), sin validación intermedia.[1], [3]

Paso 3

Los permisos de la base de datos determinan el impacto inmediato

La herramienta de lectura puede exponer datos visibles para la cuenta conectada; la herramienta de creación puede modificarlos o borrarlos dentro de esos permisos. El aviso también identifica LOAD CSV para obtener datos remotos. El acceso a archivos o comandos en el host depende de procedimientos habilitados y permisos concedidos.[1]

Paso 4

La versión 0.65.5 añade validación en las herramientas

La resolución del mantenedor indica que 0.65.5 incorpora allow_dangerous_operations desactivado por defecto, restringe la lectura a consultas de solo lectura y comprueba primitivas seleccionadas en las herramientas. Son defensas adicionales, no autorización. La resolución del mantenedor y la guía de Langroid para agentes SQL señalan los roles de base de datos con privilegios mínimos como límite de seguridad.[1], [3], [4], [5]

Paso 5

Actualice y limite el acceso en la base de datos

Actualice Langroid a 0.65.5 o posterior, verifique la versión en imágenes desplegadas y mantenga desactivada la opción peligrosa. Use una cuenta Neo4j con privilegios mínimos, desactive procedimientos innecesarios y limite el host del agente.[4], [5]

Código Fuente: Vulnerable vs. Seguro

El fragmento vulnerable sigue el flujo del aviso; el ejemplo corregido representa el comportamiento de 0.65.5 y no reproduce literalmente el parche. La corrección valida en la frontera de la herramienta, limita la lectura y controla operaciones peligrosas. El validador no es un sandbox: limite permisos en Neo4j y aísle el proceso del agente. Langroid documenta que estas comprobaciones de palabras clave y patrones pueden eludirse; mantenga los permisos de Neo4j como límite de control.[1], [3], [4], [6]

IMPLEMENTACIÓN VULNERABLE
# Ruta vulnerable de Neo4jChatAgent (Langroid <= 0.65.4).
def cypher_retrieval_tool(self, msg: CypherRetrievalTool):
    query = msg.cypher_query
    return self.read_query(query)

def read_query(self, query: str):
    with self.driver.session() as session:
        return session.run(query, parameters=None)
PARCHE SEGURO Y ROBUSTO
# Comportamiento de 0.65.5: validar en el límite de la herramienta accesible para el LLM.
def cypher_retrieval_tool(self, msg: CypherRetrievalTool):
    query = msg.cypher_query
    rejection = validate_cypher_query(
        query, is_write=False,
        allow_dangerous=self.config.allow_dangerous_operations,
    )
    if rejection is not None:
        return rejection
    return self.read_query(query)

Lista de Verificación de Seguridad para Ingeniería

Fuentes

← AI Security Directory →