CVE-2026-17566
pgAdmin 4: RCE via incompatibilidade de escape de barra invertida na proteção de consulta de Importar/Exportar Dados (defesa incompleta, lacuna irmã do CVE-2025-13780)
- Publicado
- 31 de jul. de 2026
- Atualizado
- 1 de ago. de 2026
- Atribuindo CNA
- PostgreSQL
- Evidência observada
- 4 de ago. de 2026
CVSS primário
nvd · CVSS 4.0
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:XBaixo · próximos 30 dias
- Percentil
- 45,0%
- Data do modelo
- 21 de set. de 2026
EPSS é uma estimativa estatística, não uma certeza ou uma medida de impacto. Combine-o com CVSS, status KEV, exposição e seu ambiente.
Resumo
A ferramenta Import/Export Data do pgAdmin 4 constrói uma linha de comando `psql \copy (...)` interpolando uma consulta SQL fornecida pelo usuário em um template Jinja e passando a linha renderizada para o `psql` via `--command`. Para impedir que um atacante escape do wrapper `(...)`, `create_import_export_job()` (rota `POST /import_export/job/<sid>`, protegida apenas pela permissão comum e amplamente concedida `tools_import_export_data`) 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 uma aspa simples (`\'`) como se estivesse escapando a aspa, ou seja, como se `standard_conforming_strings` estivesse desativado. O PostgreSQL tem `standard_conforming_strings` ativado por padrão desde a versão 9.1 (2010), o padrão em todas as versões do PostgreSQL que o pgAdmin 4 atualmente suporta (13-18); sob esse padrão, o próprio tokenizador `\copy` do `psql` trata `\` como um caractere comum, então uma aspa simples imediatamente após ele fecha o literal de 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 `\copy (...)`, expondo uma cláusula `TO PROGRAM '<comando>'` escolhida pelo atacante que o `psql` executa via `popen()` — independentemente de um erro de sintaxe posterior na mesma linha. Esta é a mesma classe de bug que CVE-2025-12762/CVE-2025-13780 (RCE via meta-comando do `psql`/injeção de COPY durante restauração de dump em formato PLAIN), alcançada através de uma defesa escrita de forma independente em um módulo diferente (Import/Export Data em vez de Restore) que tinha seu próprio bug de lógica distinto (semântica invertida de escape de barra invertida em vez de uma âncora de regex derrotada por BOM). A correção rejeita qualquer barra invertida dentro de uma string entre aspas simples na consulta, em vez de escolher uma das duas interpretações possíveis do `psql`. Isso é intencionalmente conservador: como a interpretação correta de `\` depende da configuração `standard_conforming_strings` do servidor de destino, que o verificador não pode saber com segurança no momento da validação, recusar a consulta é mais seguro do que adivinhar. Este problema afeta o pgAdmin 4: desde a introdução de `_is_query_parens_balanced()` antes da versão 9.18.
Uso responsável
Use informações de vulnerabilidade apenas em sistemas que você possui ou está autorizado a testar. O Kitploit vincula-se a metadados de pesquisa pública e não armazena código de exploração ou cargas maliciosas.