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/

--

Ashesh Vashi

pgAdmin Project

Reply via email to