CVE-2026-17566 in pgAdmininformação

Sumário

de VulDB • 31/07/2026

A ferramenta Importar/Exportar Dados do pgAdmin 4 constrói uma linha de comando `psql \copy (...)` interpolando uma consulta SQL fornecida pelo usuário em um modelo Jinja e passando a linha renderizada para o psql via --command. Para impedir que um atacante escape do wrapper (...), a função create_import_export_job() (rota POST /import_export/job/<sid>, protegida apenas pela permissão tools_import_export_data, comum e geralmente concedida) validava a consulta com um verificador de balanceamento de parênteses escrito à mão, _is_query_parens_balanced(). Esse verificador sempre tratava uma barra invertida antes de aspas simples (\') como escapando da aspa, ou seja, como se standard_conforming_strings estivesse desativado. O PostgreSQL tem padrão standard_conforming_strings definido como on desde a versão 9.1 (2010), o padrão em todas as versões do PostgreSQL atualmente suportadas pelo pgAdmin 4 (13-18); sob esse padrão, o próprio tokenizador \copy do psql trata \ como um caractere ordinário, de modo que uma aspas simples imediatamente após ele fecha o literal da string. Uma consulta como SELECT 'a\') TO PROGRAM 'echo pwned' x' foi portanto aceita como "balanceada" pelo verificador do pgAdmin (que acreditava que o ) ainda estava dentro da string), enquanto o psql, executado através da linha de comando realmente renderizada, fecha a string nesse ponto e trata o ) seguinte como o fim da subconsulta envolvente \copy (...), expondo uma cláusula TO PROGRAM '<command>' escolhida pelo atacante que o psql executa via popen() -- independentemente de um erro de sintaxe subsequente mais adiante na mesma linha. Esta é a mesma classe de bug do CVE-2025-12762/CVE-2025-13780 (RCE via injeção de meta-comando COPY/psql durante restauração de dump em formato PLAIN), alcançado através de uma defesa escrita independentemente em um módulo diferente (Importar/Exportar Dados ao invés de Restaurar) que tinha seu próprio bug de lógica diferente (semântica invertida de escape com barra invertida ao invés de âncora regex derrotada por BOM).

A correção rejeita qualquer barra invertida dentro de uma string entre aspas simples na consulta outright, em vez de escolher uma das duas interpretações possíveis do psql. Isso é intencionalmente conservador: porque a interpretação correta de \ depende da configuração standard_conforming_strings do servidor alvo, que o verificador não pode conhecer com confiabilidade no momento da validação, recusar a consulta é mais seguro do que tentar adivinhar.

Este problema afeta pgAdmin 4: desde a introdução de _is_query_parens_balanced() antes da versão 9.18.

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

Responsável

PostgreSQL

Reservar

27/07/2026

Divulgação

31/07/2026

Moderação

aceite

Entrada

VDB-385092

CPE

pronto

EPSS

0.00000

KEV

não

Atividades

baixo

Fontes

Interested in the pricing of exploits?

See the underground prices here!