CVE-2026-17566
pgAdmin 4: RCE mediante desajuste de escape con barra invertida en la protección de consultas de Importar/Exportar datos (defensa incompleta, brecha hermana de CVE-2025-13780)
- Publicado
- 31 jul 2026
- Actualizado
- 1 ago 2026
- Asignación de CNA
- PostgreSQL
- Evidencia observada
- 4 ago 2026
CVSS primario
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:XBajo · próximos 30 días
- Percentil
- 45,0 %
- Fecha del modelo
- 21 sept 2026
EPSS es una estimación estadística, no una certeza o una medida de impacto. Combínelo con CVSS, estado KEV, exposición y su entorno.
Resumen
La herramienta Import/Export Data de pgAdmin 4 construye una línea de comando `psql \copy (...)` interpolando una consulta SQL proporcionada por el usuario en una plantilla Jinja y pasando la línea renderizada a psql mediante `--command`. Para impedir que un atacante escape del envoltorio `(...)`, `create_import_export_job()` (ruta `POST /import_export/job/<sid>`, protegida únicamente por el permiso ordinario y comúnmente otorgado `tools_import_export_data`) validaba la consulta con un comprobador de equilibrio de paréntesis escrito a mano, `_is_query_parens_balanced()`. Ese comprobador siempre trataba una barra invertida antes de una comilla simple (`\'`) como si escapara la comilla, es decir, como si `standard_conforming_strings` estuviera desactivado. PostgreSQL tiene `standard_conforming_strings` activado por defecto desde la 9.1 (2010), el valor predeterminado en todas las versiones de PostgreSQL que pgAdmin 4 soporta actualmente (13-18); bajo ese valor predeterminado, el propio tokenizador `\copy` de psql trata `\` como un carácter ordinario, por lo que una comilla simple inmediatamente después cierra el literal de cadena. Una consulta como `SELECT 'a\') TO PROGRAM 'echo pwned' x'` era, por tanto, aceptada como "equilibrada" por el comprobador de pgAdmin (que creía que el `)` seguía dentro de la cadena), mientras que psql, ejecutado a través de la línea de comando realmente renderizada, cierra la cadena en ese punto y trata el `)` siguiente como el final de la subconsulta envolvente `\copy (...)`, exponiendo una cláusula `TO PROGRAM '<comando>'` elegida por el atacante que psql ejecuta mediante `popen()` — independientemente de un error de sintaxis posterior en la misma línea. Esta es la misma clase de vulnerabilidad que CVE-2025-12762/CVE-2025-13780 (RCE mediante meta-comando psql/inyección COPY durante la restauración de volcados en formato PLAIN), alcanzada a través de una defensa escrita de forma independiente en un módulo diferente (Import/Export Data en lugar de Restore) que tenía su propio y distinto error de lógica (semántica invertida de escape con barra invertida en lugar de un ancla de regex anulada por BOM). La corrección rechaza directamente cualquier barra invertida dentro de una cadena entre comillas simples en la consulta, en lugar de elegir una de las dos posibles interpretaciones de psql. Esto es deliberadamente conservador: dado que la interpretación correcta de `\` depende del ajuste `standard_conforming_strings` del servidor de destino, que el comprobador no puede conocer de forma fiable en el momento de la validación, rechazar la consulta es más seguro que adivinar. Esta vulnerabilidad afecta a pgAdmin 4: desde la introducción de `_is_query_parens_balanced()` antes de la 9.18.
Uso responsable
Utilice información sobre vulnerabilidades solo en sistemas de su propiedad o que esté autorizado a probar. Kitploit enlaza con metadatos de investigación pública y no almacena código de explotación ni cargas útiles maliciosas.