# SQLChatAgent `_validate_query` o reex de padrão perigoso é contornável através de nomes de funções citados/comentários/qualificados A atenuação da injeção SQL `SQLchatAgent`, com o padrão `allow_dangerous_operations=False`, combina uma lista de blocos de regex de texto bruto (`_DANGEROUS_SQL_PATTERNS`) com uma lista de allows de instruções SELECT- only. Os itens da lista de blocos que as funções alvo chamam requerem que o nome da função seja imediatamente seguido de `\s*\(`. PostgreSQL aceita a mesma chamada com o nome separado de `(` por um identificador citado, um comentário em linha, ou qualificação de esquema. Estes formulários escapam do regex, ainda analisam como "SELECT" e executam a mesma função PostgreSQL. Isto restaura o primitivo `pg_read_file` do lado do servidor que o CVE anterior- 2026 - 25879 / GHSA- pmch- g 965 - grmr corrigir foi feito para bloquear: o aviso do pai corrigiu uma entrada de bloco `pg_read_file` faltando, enquanto este relatório mostra que o regex adicionado é contornável.

Testado contra o atual `main` commit. ` 6 e 8 e 7 b 2 bb 23 ec 04 c 1 c 25 ser 479 f 16 b 8 cc 9 a 4 f 8796 ` A fonte atual ainda contém. ```python re.compile(r"\bpg_(leia o arquivo_logcurrent_stat)[A-Za-z 0 - 9 _]*\s*\(", re. IGNORECASE) ``` `_validate_query` verifica a consulta em bruto contra `_DANGEROUS_SQL_PATTERNS`, então analisa com `sqlglot` e permite instruções `SELECT'. A verificação de chamada perigosa é texto bruto, não normalizado com a função AST.

A atual mitigação trata chamadas perigosas da função PostgreSQL como um problema de regex de texto bruto. O regex requer que o token da função `pg_...` seja seguido diretamente por espaços opcional e `(`, mas PostgreSQL aceita chamadas equivalentes através de identificadores citados, comentários e nomes qualificados para esquemas. Como `_validate_query` usa apenas `sqlglot` para impor o tipo de instrução de nível superior, esses nomes de funções normalizados nunca são verificados após a análise. O limite é a política de segurança padrão `SQLChatAgent` entre a geração SQL influenciada pelo atacante e as operações de banco de dados que podem ler arquivos do lado do servidor. Com ` allow_dangerous_operations=False`, um usuário ou um aviso que as influências geradas pelo SQL não devem ser capazes de contornar a guarda e executar funções de leitura de arquivos PostgreSQL, como `pg_read_file`. Este não é um novo endpoint não autenticado ou injeção SQL em todo o produto; aplica- se quando conteúdo de usuário não confiável pode influenciar o SQL gerado pelo SQLChatAgent.

O arnês local usa o atual `sql_chat_agent.py`, extrai a lista de regex perigosa real enviada, valida as consultas com o real `sqlglot'. 30.8.0 `, em seguida, executa os bypass aceitos contra um PostgreSQL desembarque local 16 recipiente. ````text CONTROL "SELECIONAM pg_read_file('/etc/passwd')" -> REJECTADO: combina com '\\bpg_(read.stat.ls) 0 - 9 _]*\\s*\\(' BYPASS 'SELECTIONA "pg_read_file"(\'/etc/passwd\')' -> PERMISO (validador devolvido Nenhum -> executaria) BYPASS "SELECTIONA "pg_read_file/**/('/etc/passwd')" -> PERMISO (validador devolvido Nenhum -> executaria) BYPASS 'SELECTIONA Pg_catalog."pg_read_file" (\'/etc/passwd\')' -> PERMISO (validador devolvido Nenhum -> executaria).

=== Parte B: execução real do PostgreSQL do bypass === conectado; is_superuser=t executado bypass 'SELECTIONE "pg_read_file"(\' \') -> conteúdo do arquivo devolvido: 'LANGROID_SAFE_MARKER_...' executado bypass "SELECTIONE pg_read_file/**/(' ')" -> conteúdo do arquivo devolvido: 'LANGROID_SAFE_MARKER_...' executado bypass 'SELECTIONE pg_catalog."pg_read_file" (\' \')' -> conteúdo do arquivo devolvido: 'LANGROID_SAFE_MARKER_...' RESULTADO: VULNERÁRIO ```. A consulta de controle é bloqueada pelo regex atual, enquanto todos os três formulários equivalentes PostgreSQL são permitidos pelo validador e retornam o conteúdo do arquivo de prova montado a partir de um servidor PostgreSQL real. O valor `LANGROID_ SAFE_ MARKER_...` é um marcador inofensivo gerado dentro do recipiente local de descarte para esta prova.

Em uma implantação usando `SQLChatAgent` contra PostgreSQL com um papel capaz de chamar `pg_read_file` (superusuário, ou um papel concedido `pg_read_server_files`), um atacante que pode influenciar o SQL gerado pelo LLM pode coagir o agente a emitir uma das consultas obstruídas e ler arquivos acessíveis ao processo do servidor PostgreSQL através de `pg_read_file`. Este é o mesmo impacto e forma pré- preconceitual que o aviso publicado `pg_read_file`, mas ele visa a evitabilidade da correção baseada em regex atual em vez da ausência pré-fixa de um bloco `pg_read_file`.

Severidade: Alta por paridade com o conselho parental publicado; não Crítico. CWE- 184 levando ao arquivo do lado do servidor lido. Não confie em um reex em bruto que corresponde para detecção de chamadas perigosas. Após a análise de `sqlglot` existente, siga o AST e rejeite qualquer invocação de função cujo nome normalizado, não citado, dobrado por esquemas, está em um conjunto perigoso como `pg_read_file`, `pg_read_binary_file`, `pg_ls_dir`, `pg_stat_file`, `lo_import`, `lo_export`, `load_file` ou `load_extension'.

Também recomenda que o SQLChatAgent seja executado com um papel de base de dados menos privilegiado que não tenha `pg_read_server_files`. Registro de aconselhamento: GHSA- 6 xc 5 - 4 r 68 - 67 Fc. Identificadores relacionados: CVE- 2026 - 54760.

Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 06 T 20: 39: 02.000 Z e lista a sua última modificação como 2026 - 07 - 06 T 20: 39: 02.000 Z. Gravidade: Crítico. Dados de pontuação publicados: CVSS_V 4: CVSS: 4.0 /AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/África do Sul:N.

Software afetado e informações de versão: PyPI package langroid — ECOSISTEM: introduzido 0, corrigido 0.65.1. Classificação e evidência: identificadores de fraqueza CWE- 22, CWE- 89. O registro contém 2 suporte de referências nestes tipos: WEB, PACKAGE.