Lanzamiento de pgAdmin 4 v9.18
El equipo de desarrollo de pgAdmin se complace en anunciar la versión 9.18 de pgAdmin 4, la cual incluye 29 correcciones de errores y nuevas características, entre ellas las soluciones aplicadas a cuatro vulnerabilidades de seguridad (CVE-2026-86861 a CVE-2026-86864). Para más detalles consulten las notas de la versión.
pgAdmin es la principal herramienta de código abierto para la gestión gráfica de PostgreSQL. Para más información, visiten el sitio web.
Entre los cambios más destacados de esta versión figuran:
Características
- Ahora es posible contraer y volver a mostrar el Explorador de objetos haciendo clic de nuevo en el icono del espacio de trabajo activo, de forma similar a la barra lateral de VS Code. Esta configuración se conserva incluso después de actualizar la página. También se puede utilizar el atajo de teclado
Ctrl+Alt+B, que viene configurado de forma predeterminada y puede personalizarse mediante la nueva preferenciatoggle_object_explorer. - Se ha reforzado la Content-Security-Policy (CSP) predeterminada para que los scripts en línea se ejecuten utilizando un nonce único por solicitud, en lugar del uso generalizado de
'unsafe-inline', y se ha eliminado'unsafe-eval'. La directivastyle-srcmantiene'unsafe-inline', ya que MUI y React inyectan estilos en tiempo de ejecución y atributosstyleen línea a los que no se puede aplicar un nonce. En los bundles de desarrollo,'unsafe-eval'se vuelve a añadir automáticamente cuando está activadoDEBUG.
Correcciones de seguridad
- Se corrige una vulnerabilidad de bypass de autenticación en el modo de autenticación mediante servidor web. El problema se producía porque
get_user()recurría a la cabecera de la solicitud entrante para obtener el valor configurado deWEBSERVER_REMOTE_USERcuando este no estaba disponible en el entorno WSGI. Como cualquier cliente puede establecer las cabeceras de una solicitud, un atacante que pudiera acceder a pgAdmin podía hacerse pasar por cualquier usuario, incluso por un administrador, sin necesidad de proporcionar credenciales. A partir de ahora, aceptar una identidad indicada mediante una cabecera es una opción que debe habilitarse explícitamente y queda limitada a una lista configurada de proxies de confianza, con la posibilidad de utilizar un secreto compartido. Además, se rechaza este mecanismo para las cuentas cuya fuente de autenticación no seawebserver(CVE-2026-86863). - Se ha corregido una vulnerabilidad de inyección de argumentos y cadenas de conexión en la herramienta Backup. El problema se producía porque el nombre de la base de datos proporcionado por el cliente se incorporaba directamente al vector de argumentos de
pg_dumpcomo un valor posicional. Dado quegetopt_longreorganiza los argumentos, un nombre que comenzara con un guion podía interpretarse como opciones adicionales, como--file, permitiendo sobrescribir la ruta de salida restringida al almacenamiento. Asimismo, libpq interpreta un nombre de base de datos que contiene un signo igual como una cadena de conexión completa, por lo que este mismo campo podía utilizarse para redirigir la conexión, junto con la contraseña almacenada enPGPASSWORD, hacia un host elegido por el atacante. Ahora, el nombre de la base de datos se establece mediante la variable de entornoPGDATABASE, que libpq no expande (CVE-2026-86864). - Se corrige una vulnerabilidad de inyección de cadenas de conexión en las herramientas de Restauración y Mantenimiento. El nombre de la base de datos proporcionado por el cliente se enviaba directamente a
--dbname, lo que también permitía redirigir la conexión y la contraseña exportada a un servidor controlado por quien realizara la llamada (CVE-2026-86862). - Se ha corregido una vulnerabilidad de tipo time-of-check to time-of-use en el endpoint
save_filedel Administrador de archivos, utilizado para guardar archivos desde Query Tool y ERD. La ruta solicitada se comprobaba mediantecheck_access_permission()y después se abría directamente conopen(). Esto permitía que, si se creaba un enlace simbólico entre ambas operaciones, este fuera seguido y se pudiera escribir fuera del directorio de almacenamiento del usuario. Este punto de escritura no estaba contemplado en las medidas de refuerzo de la ruta de carga independiente implementadas para CVE-2026-7819 (CVE-2026-86861). - Se rechazan las redirecciones HTTP en las solicitudes dirigidas a las API de LLM, en lugar de seguir el encabezado
Locationhacia un destino que no haya sido sometido a la comprobaciónALLOWED_LLM_API_URLS. Esta modificación constituye una medida de refuerzo de la seguridad, más que una solución a una vulnerabilidad explotable, puesto que la generación de una redirección requiere, en primer lugar, disponer del control de un host que ya se encuentra incluido en la lista de direcciones permitidas. - Se rechazan los valores
Usernamevacíos o nulos al importar un servidor no compartido. Anteriormente, estos servidores se importaban sin problemas, pero quedaban configurados de forma que libpq se autenticaba silenciosamente con la cuenta del sistema operativo que ejecutaba pgAdmin, en lugar de rechazar la configuración.
Corrección de errores/Mantenimiento
- Se ha corregido un problema que impedía iniciar sesión al utilizar Flask-Security-Too 5.8.2. Esta versión corrigió una inversión de larga data en
UserMixin.is_locked(), que había sido la base sobre la que se implementó el propiois_locked()de pgAdmin. - También se ha corregido un problema en el diálogo de Tabla que permitía modificar o eliminar columnas heredadas. Además, se corrigió el menú desplegable Tipo de datos de la pestaña Definición expandida, que mostraba todos los tipos disponibles en lugar de limitarse a los tipos permitidos establecidos en línea.
- Se restaura el orden de dependencias en el script generado por Schema Diff, que se había perdido al dejar sin definir
dependLeveldurante la migración a React. - Se han solucionado varios errores de Schema Diff: detectar diferencias inexistentes en columnas SERIAL y BIGSERIAL; duplicar columnas que también presentan diferencias al recrear una tabla foránea; perder la intercalación de las columnas de tablas foráneas; añadir espacios en blanco al cuerpo de funciones o procedimientos aplicados; generar SQL rechazado por PostgreSQL cuando el MINVALUE de una secuencia se incrementa por encima de su valor actual; y marcar como exitosa una comparación que se interrumpe por un error.
- Se unifican las solicitudes GET idénticas que se realizan de forma concurrente mediante
getNodeAjaxOptions(), evitando que la pestaña Columns de una tabla con muchas columnas lance una solicitudget_typesduplicada para cada registro. - Se ha solucionado el problema de la cuadrícula de argumentos de la pestaña Definition en funciones o procedimientos definidos por el usuario, que impedía agregar o eliminar registros en modo de edición.
- Se ha eliminado del SQL generado para los índices la cláusula redundante
TABLESPACEpg_default, que provocaba SQL no válido al utilizarse con una tabla particionada. - Se ha corregido un fallo que provocaba un cierre inesperado al utilizar un comando Password Exec específico del servidor con una conexión basada únicamente en un servicio (
pg_service.conf), donde no se especifican el host, el puerto ni el nombre de usuario. - Ahora se acepta
SharedUsernameal importar un servidor compartido desde una definición deservers.json, sin exigir que cada servidor incluya el parámetroUsername. - El diálogo Validate binary path ahora se renderiza como HTML, en lugar de mostrar el marcado sin procesar.
- Se ha eliminado la comilla sobrante al final de
ProductVersionen el instalador de Windows y corregido la ruta deexistingSecreten la plantilla de despliegue de Helm. - Se evita la importación y la inicialización de los proveedores de autenticación Kerberos, LDAP, MFA, OAuth2 y Webserver cuando
SERVER_MODEno esté configurado, manteniendo únicamente la autenticación interna en el modo de escritorio. - Se actualizaron las dependencias de terceros de JavaScript y Python, así como los catálogos de mensajes. También se corrigió el catálogo en coreano, que no se había recompilado desde noviembre de 2025.
Ya están disponibles las versiones para Windows, macOS, Python Wheel, contenedor Docker, RPM, paquete DEB y el código fuente en formato tarball en la sección de descargas.
Haz clic aquí para leer la noticia original en inglés en la página web oficial de PostgreSQL.

