FlawOpen

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

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

Langroid CVE-2026-55615: injeção prompt-to-Cypher

Langroid enviava Cypher do modelo ao Neo4j sem validação. Atualize para 0.65.5; as permissões do banco seguem sendo a fronteira de segurança.[1], [2], [4]

Vetor 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]
💡 Explicação em Linguagem Simples (ELI5)

Uma bibliotecária recebe uma pergunta em linguagem comum e entrega as instruções de banco resultantes diretamente a um funcionário poderoso. Se uma nota maliciosa alterar a pergunta, ele ainda executa as instruções. A CVE-2026-55615 permitia que conteúdo não confiável influenciasse o Cypher enviado ao Neo4j pelo Langroid.[1]

Conceitos Centrais e Termos

Cypher
Linguagem de consulta do Neo4j para ler e alterar dados em grafo. Procedimentos adicionais dependem da configuração do servidor e das permissões da conta.[1]
Neo4jChatAgent
Agente Langroid que converte tarefas em linguagem natural em Cypher e o envia ao Neo4j por ferramentas de leitura ou criação.[1], [3]
Prompt injection
Entrada não confiável altera o comportamento do modelo. Consultas criadas pelo modelo precisam ser tratadas como entrada não confiável.[1]
Least-privilege database role
Identidade do banco limitada aos dados e operações necessários. Essa fronteira continua necessária mesmo quando há validação na aplicação.[1], [5]
Validador de consultas Cypher
O validador do Langroid 0.65.5 aplica verificações por palavras-chave e padrões. A documentação alerta que essas verificações podem ser contornadas; são defesa em profundidade, não a fronteira de autorização. Controle o acesso com as permissões de papéis do Neo4j.[6], [3]

Mapeamentos de frameworks

  • Referência CWE para a fraqueza descrita neste guia: CWE-74

Fluxo de Ataque Passo a Paso

Passo 1

Um agente de grafo afetado aceita consultas do modelo

Versões do Langroid até 0.65.4 são afetadas. O caminho exige que um atacante influencie o prompt diretamente ou por conteúdo recuperado, e que o modelo use uma ferramenta Neo4jChatAgent. A advisory informa CWE-74 e CVSS 4.0 9,2 (Crítico).[1], [2]

Passo 2

O conteúdo influencia o Cypher enviado pelo agente

Na versão vulnerável, cypher_retrieval_tool encaminha msg.cypher_query a read_query e cypher_creation_tool envia a consulta a write_query. O advisory rastreia esses valores até session.run(query, parameters) e tx.run(query, parameters), sem validação intermediária.[1], [3]

Passo 3

As permissões do banco definem o impacto imediato

A ferramenta de leitura pode revelar dados disponíveis para a conta conectada; a ferramenta de criação pode alterar ou excluir dados dentro das permissões dessa conta. LOAD CSV também permite buscar dados remotos. Acesso a arquivos ou comandos no host depende de procedimentos habilitados e permissões concedidas.[1]

Passo 4

A versão 0.65.5 adiciona validações nas ferramentas

A resolução do mantenedor diz que a 0.65.5 adiciona allow_dangerous_operations desativado por padrão, limita a leitura a consultas somente leitura e verifica primitivas selecionadas nas ferramentas. São defesas em profundidade, não autorização. A resolução do mantenedor e a orientação do Langroid para agentes SQL apontam para papéis de banco com privilégio mínimo como fronteira de segurança.[1], [3], [4], [5]

Passo 5

Atualize e limite o acesso diretamente no banco

Atualize Langroid para 0.65.5 ou superior, confirme a versão nas imagens e mantenha a opção perigosa desativada. Dê ao agente uma conta Neo4j de menor privilégio, desative procedimentos desnecessários e restrinja o host.[4], [5]

Código-Fonte: Vulnerável vs. Seguro

O trecho vulnerável segue o caminho do advisory; o exemplo corrigido representa o comportamento da versão 0.65.5 e não reproduz literalmente o patch. A correção valida na fronteira da ferramenta, restringe a leitura e controla operações perigosas. O validador não é sandbox: limite permissões no Neo4j e isole o processo do agente. A documentação do Langroid diz que essas verificações por palavras-chave e padrões podem ser contornadas; mantenha as permissões do Neo4j como fronteira de controle.[1], [3], [4], [6]

IMPLEMENTAÇÃO VULNERÁVEL
# Caminho vulnerável 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)
PATCH SEGURO E ROBUSTO
# Comportamento da versão 0.65.5: validar na fronteira da ferramenta exposta ao 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 Verificação de Segurança para Engenharia

Fontes

← AI Security Directory →