pgAdmin 4 v9.18 Released - Mailing list pgadmin-hackers
| From | Ashesh Vashi |
|---|---|
| Subject | pgAdmin 4 v9.18 Released |
| Date | |
| Msg-id | CAG7mmowFr2FD0NrYOuch13tBY0qzpaW8aoQcF0cxGC4_fOk6rw@mail.gmail.com Whole thread |
| List | pgadmin-hackers |
The pgAdmin Development Team is pleased to announce pgAdmin 4 version 9.18.
This release of pgAdmin 4 includes 29 bug fixes and new features. For more details please see the release notes at:
https://www.pgadmin.org/docs/pgadmin4/9.18/release_notes_9_18.html
pgAdmin is the leading Open Source graphical management tool for PostgreSQL. For more information, please see:
https://www.pgadmin.org/
Notable changes in this release include:
Features:
* Collapse and restore the Object Explorer by re-clicking the current workspace icon, in the manner of the VS Code side bar, remembering the choice across refreshes. A keyboard shortcut, Ctrl+Alt+B by default, does the same thing.
* Harden the default Content-Security-Policy: inline scripts now run under a per-request nonce rather than a blanket 'unsafe-inline', and 'unsafe-eval' is dropped. style-src keeps 'unsafe-inline', because MUI and React inject runtime styles and inline style attributes that cannot carry a nonce.
Bugs/Housekeeping:
* Fix an authentication bypass in Webserver authentication mode, where the configured WEBSERVER_REMOTE_USER name was also read from the request headers, letting any client that could reach pgAdmin assert any identity, including an administrator's (CVE-2026-86863). A header-asserted identity is now opt-in and restricted to a configured list of trusted proxies, with an optional shared secret.
* Fix argument and connection-string injection in the Backup tool via the client-supplied database name, which could override the storage-confined output path or redirect the connection to an attacker-controlled host (CVE-2026-86864).
* Fix connection-string injection in the Restore and Maintenance tools via the client-supplied database name, which could redirect the connection, and the stored password, to a server of the caller's choosing (CVE-2026-86862).
* Fix a time-of-check to time-of-use flaw in the File Manager's save endpoint, which backs saving from the Query Tool and ERD, where a symbolic link planted after the containment check was followed, writing outside the storage directory (CVE-2026-86861).
* Refuse HTTP redirects on LLM API requests, rather than following a `Location` header on to a destination the `ALLOWED_LLM_API_URLS` check was never applied to.
* Fix login being impossible against Flask-Security-Too 5.8.2, which corrected a long-standing inversion in UserMixin.is_locked().
* Fix inherited columns in the Table dialog being editable and deletable, and the Data type dropdown on the expanded Definition tab ignoring the allowed-type restriction.
* Reinstate dependency ordering of the script Schema Diff generates, which had been lost since the React port.
* Fix Schema Diff reporting false differences for SERIAL/BIGSERIAL columns, duplicating columns when recreating a foreign table, losing a foreign table column's collation, injecting whitespace into applied function and procedure bodies, and reporting a comparison that failed part way through as a success.
* Reject an empty or null `Username` when importing a non-shared server, which previously imported cleanly and left a server libpq would silently authenticate as the OS account running pgAdmin.
* Share concurrent identical GET requests behind getNodeAjaxOptions() so a wide table's Columns tab no longer fires one duplicate `get_types` request per column row.
* Omit the redundant TABLESPACE pg_default clause from generated index SQL, which was invalid on a partitioned table.
* Skip importing and initialising the Kerberos, LDAP, MFA, OAuth2 and Webserver authentication providers unless SERVER_MODE is set.
Builds for Windows and macOS are available now, along with a Python Wheel, Docker Container, RPM, DEB Package, and source code tarball from:
https://www.pgadmin.org/download/
Bugs/Housekeeping:
* Fix an authentication bypass in Webserver authentication mode, where the configured WEBSERVER_REMOTE_USER name was also read from the request headers, letting any client that could reach pgAdmin assert any identity, including an administrator's (CVE-2026-86863). A header-asserted identity is now opt-in and restricted to a configured list of trusted proxies, with an optional shared secret.
* Fix argument and connection-string injection in the Backup tool via the client-supplied database name, which could override the storage-confined output path or redirect the connection to an attacker-controlled host (CVE-2026-86864).
* Fix connection-string injection in the Restore and Maintenance tools via the client-supplied database name, which could redirect the connection, and the stored password, to a server of the caller's choosing (CVE-2026-86862).
* Fix a time-of-check to time-of-use flaw in the File Manager's save endpoint, which backs saving from the Query Tool and ERD, where a symbolic link planted after the containment check was followed, writing outside the storage directory (CVE-2026-86861).
* Refuse HTTP redirects on LLM API requests, rather than following a `Location` header on to a destination the `ALLOWED_LLM_API_URLS` check was never applied to.
* Fix login being impossible against Flask-Security-Too 5.8.2, which corrected a long-standing inversion in UserMixin.is_locked().
* Fix inherited columns in the Table dialog being editable and deletable, and the Data type dropdown on the expanded Definition tab ignoring the allowed-type restriction.
* Reinstate dependency ordering of the script Schema Diff generates, which had been lost since the React port.
* Fix Schema Diff reporting false differences for SERIAL/BIGSERIAL columns, duplicating columns when recreating a foreign table, losing a foreign table column's collation, injecting whitespace into applied function and procedure bodies, and reporting a comparison that failed part way through as a success.
* Reject an empty or null `Username` when importing a non-shared server, which previously imported cleanly and left a server libpq would silently authenticate as the OS account running pgAdmin.
* Share concurrent identical GET requests behind getNodeAjaxOptions() so a wide table's Columns tab no longer fires one duplicate `get_types` request per column row.
* Omit the redundant TABLESPACE pg_default clause from generated index SQL, which was invalid on a partitioned table.
* Skip importing and initialising the Kerberos, LDAP, MFA, OAuth2 and Webserver authentication providers unless SERVER_MODE is set.
Builds for Windows and macOS are available now, along with a Python Wheel, Docker Container, RPM, DEB Package, and source code tarball from:
https://www.pgadmin.org/download/
--
Ashesh Vashi
pgAdmin Project
pgadmin-hackers by date: