flawopen.com/AI Security/langroid-neo4j-cypher-injection-cve-2026-55615
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]
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]
Mapeos de marcos
- Referencia CWE para la debilidad descrita en esta guía: CWE-74
Flujo de Ataque Paso a Paso
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]
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]
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]
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]
# 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)
# 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
- ✓Inventarie Langroid y sus archivos de bloqueo; actualice los entornos afectados a 0.65.5 o posterior y reconstruya las imágenes.[1], [4]
- ✓Mantenga
allow_dangerous_operations=Falsesalvo que exista una excepción revisada y documentada.[1], [4] - ✓Use una cuenta Neo4j exclusiva por agente y conceda solo los datos, etiquetas, operaciones y procedimientos necesarios.[1], [5]
- ✓Desactive APOC, dbms.security, LOAD CSV y capacidades de archivo, red o sistema operativo innecesarias; compruebe los permisos efectivos.[1]
- ✓Mantenga las herramientas de lectura en modo solo lectura y autorice por separado las escrituras importantes.[1], [4]
- ✓Pruebe una lectura normal y compruebe que una consulta inocua de prueba de política se rechaza antes de llamar al driver.[3], [4]
- ✓Limite el acceso del host del agente a archivos, secretos y red.[1]
- ✓Revise registros de base de datos y trazas del agente durante el periodo vulnerable; rote credenciales potencialmente expuestas.