The pgAdmin Development Team is pleased to announce the release of pgAdmin 4 
version 9.17. This release of pgAdmin 4 includes 28 bug fixes and new features, 
including fixes for seven security vulnerabilities (CVE-2026-17346 through 
CVE-2026-17351, and CVE-2026-17566). For more details, please see the [release 
notes](https://www.pgadmin.org/docs/pgadmin4/9.17/release_notes_9_17.html).

pgAdmin is the leading open-source graphical management tool for PostgreSQL. 
For more information, please see [the website](https://www.pgadmin.org/).

Notable changes in this release include:

## Features:

- Include the authenticated user's identity in the HTTP access log.
- Add an opt-in Gateway API `HTTPRoute` template to the Helm chart as an 
alternative to the existing Ingress.
- Add a preference to cap the row count fetched by the plain "View Data" 
action, so it is usable on large tables without always doing a full `SELECT *`.
- Add support for a custom XYZ tile provider (URL, name, CRS, attribution, max 
zoom) in the Geometry Viewer, alongside the existing built-in base layers.

## Security Fixes:

- Fix a tool-permission bypass where a user denied the Query Tool, Grant 
Wizard, or Schema Diff permission could still drive that tool's backend routes 
and Socket.IO handlers directly, since the permission check was applied only to 
a single "front door" route per tool. Also fixes a non-owner triggering an 
adhoc connection against another user's shared server persisting a new server 
record still owned by that other user (CVE-2026-17350).
- Fix OS command injection in the `MASTER_PASSWORD_HOOK` feature, where an 
externally-sourced username (e.g. via OAuth2/OIDC, Kerberos, or webserver 
authentication) containing shell metacharacters could execute arbitrary 
commands as the pgAdmin service account when the configured hook string uses 
`%u` (CVE-2026-17347).
- Fix a lexer-differential bypass of the AI Assistant's read-only transaction 
guard, where sqlparse's string-literal lexing disagreed with PostgreSQL's own 
parser under `standard_conforming_strings = on`, letting a crafted 
multi-statement payload smuggle a `COMMIT` past the intended read-only wrapper; 
an incomplete fix for CVE-2026-12045 (CVE-2026-17351).
- Fix SQL injection in the Index Statistics all-indexes listing and the 
Publications/Subscriptions Dependencies views, where an apostrophe in a table, 
index, publication, or subscription name broke out of an unescaped template 
interpolation; an incomplete fix for CVE-2026-12044 (CVE-2026-17346).
- Fix several Constraints, Preferences, Debugger, and Schema Diff routes 
missing the `@pga_login_required` decorator, making them reachable without 
authentication in server mode; an incomplete fix for CVE-2026-12046 
(CVE-2026-17348).
- Fix an adhoc server connection cloning another user's stored database 
credentials (password, save password flag, tunnel password) alongside 
ownership, letting a non-owner who cloned another user's shared server connect 
using that user's saved database password (CVE-2026-17349).
- Fix OS command injection in the Import/Export Data tool, where a query-based 
export could pass a crafted query string past the `\copy (...)` 
parenthesis-balance guard by exploiting a backslash-escape mismatch with psql's 
default `standard_conforming_strings = on` behaviour, exposing a live `TO 
PROGRAM` clause for arbitrary command execution (CVE-2026-17566).

## Bugs/Housekeeping:

- Fix Schema Diff's "Generate Script" and the browser tree's CREATE Script view 
emitting wrong SQL for SERIAL/identity columns, by detecting column-owned 
sequences via `pg_depend` instead of guessing the sequence name.
- Fix ALT+F5 ("Execute query at cursor") doing nothing when the cursor is on or 
near a statement that is not highlighted, in a Query Tool tab with multiple 
statements separated by blank lines.
- Fix the object browser's extension UI breaking under PostgreSQL 19's 
extension catalog changes.
- Detect a selected-but-unusable OS keyring and fall back gracefully instead of 
failing.
- Warn when OAuth2 provider settings are misplaced at the top level of the 
config instead of under `OAUTH2_CONFIG`.
- Honor the selected EOL sequence when copying query text to the clipboard.
- Fix a Schema Diff result-status filter chip showing "No difference found" 
after being toggled off and back on, even when real differences exist.
- Fix the Object Explorer briefly showing literal HTML markup instead of a 
greyed-out "[Disconnecting...]" label when disconnecting a server or database.
- Centralize shared-server-group visibility and access-control logic, and 
adjust the ServerGroup-to-Server/SharedServer model relationships.
- Fail the macOS appbundle build if any bundled library links outside the 
bundle, and scan all Mach-O binaries for bundle linkage.
- Pin the sonarqube-scan-action GitHub workflow to a full commit SHA, and pin 
the Yarn version used by the build scripts to the `packageManager` field.
- Bump JavaScript and Python third-party dependencies, including axios, 
webpack, react, electron, and certifi.
- Update the Simplified Chinese (zh_Hans_CN) translation.

Builds for Windows and macOS are available now, along with a Python Wheel, 
Docker Container, RPM, DEB Package, and source code tarball from the [download 
area](https://www.pgadmin.org/download/).

Reply via email to