<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>VulnFeed.org: pgadmin.org pgAdmin</title><link>https://vulnfeed.org/</link><description>Every disclosure, as it lands. Critical-only feed available.</description><language>en</language><atom:link href="https://vulnfeed.org/feed/product/pgadmin-org-pgadmin.xml" rel="self" type="application/rss+xml"/><item><title>CVE-2026-116249: pgAdmin 4: Connection file paths and parameter keys escape the user&apos;s storage directory</title><link>https://vulnfeed.org/cve/CVE-2026-116249/</link><guid isPermaLink="true">https://vulnfeed.org/cve/CVE-2026-116249/</guid><pubDate>Fri, 30 Oct 2026 20:17:05 +0000</pubDate><description>In server mode pgAdmin 4 resolves a server&apos;s password file, SSL certificate, key, CRL and SSH tunnel identity file relative to the user&apos;s storage directory, but get_complete_file_path() only stripped leading slashes before joining the two. A path such as &quot;../&lt;another user&gt;/.pgpass&quot;, set through the server dialog, the REST API or a servers.json import, therefore named another user&apos;s file, and connecting used that user&apos;s saved passwords, client certificate or SSH key. The sslkeylogfile connection parameter was passed to libpq unchanged, so a path outside storage let libpq create or append a file as the account running pgAdmin. make_conninfo() also quoted connection parameter values but not their names, so a crafted parameter name could smuggle additional keyword=value pairs past these checks. The fix requires the resolved path, with symbolic links followed, to stay inside the user&apos;s storage directory or the named shared storage directory, confines sslkeylogfile the same way, and accepts only exact libpq keywords as connection parameter names. A refused path or keyword is reported instead of letting libpq fall back to a default. This issue affects pgAdmin 4: before 9.19.</description></item><item><title>CVE-2026-116243: pgAdmin 4: Utility binary path can point at a shared storage directory</title><link>https://vulnfeed.org/cve/CVE-2026-116243/</link><guid isPermaLink="true">https://vulnfeed.org/cve/CVE-2026-116243/</guid><pubDate>Fri, 30 Oct 2026 20:17:04 +0000</pubDate><description>pgAdmin 4 runs pg_dump, pg_restore, pg_dumpall and psql from the binary path a user sets in their preferences. In server mode the binary path was refused only when it lay under the per-user storage directory (STORAGE_DIR), not under a SHARED_STORAGE directory, which ordinary users can upload files to. A user could therefore upload an executable to shared storage, point their binary path at it, and have pgAdmin run it as the operating-system account running pgAdmin. On POSIX, files created through pgAdmin are not executable, so this is exploitable where any file with an executable name can run, such as Windows server mode. The fix checks the binary path against every SHARED_STORAGE directory as well, after expanding $DIR, collapsing &quot;..&quot; and resolving symbolic links, compares directories in a way a different spelling on a case-insensitive filesystem cannot bypass, refuses a path containing a NUL, and enforces the check wherever binary paths are resolved, including for the PSQL tool. This issue affects pgAdmin 4: before 9.19.</description></item><item><title>CVE-2026-116244: pgAdmin 4: libpq uses the pgAdmin service account&apos;s Kerberos credentials</title><link>https://vulnfeed.org/cve/CVE-2026-116244/</link><guid isPermaLink="true">https://vulnfeed.org/cve/CVE-2026-116244/</guid><pubDate>Fri, 30 Oct 2026 20:17:04 +0000</pubDate><description>When a pgAdmin 4 connection was not meant to use a Kerberos user&apos;s delegated credentials, pgAdmin removed KRB5CCNAME from its environment, so the Kerberos library fell back to the default credential cache, or a client keytab, of the operating-system account running pgAdmin. libpq then answered any server that asked for GSSAPI authentication with that account&apos;s ticket, whatever user name the pgAdmin user gave, so in server mode any user could connect as the service account&apos;s Kerberos principal; gssencmode=disable did not prevent it. On Windows, SSPI used the service account&apos;s logon in the same way. psql was also started with pgAdmin&apos;s environment, which could hold another user&apos;s credential cache while that user was connecting. The fix points KRB5CCNAME and KRB5_CLIENT_KTNAME at a file that cannot exist except while a Kerberos-authenticated user connects with Kerberos, and gives every other connection, psql and the utilities require_auth=!gss,!sspi and gssencmode=disable, checked on the final connection string. require_auth needs libpq 16 or later. This issue affects pgAdmin 4: before 9.19.</description></item><item><title>CVE-2026-116245: pgAdmin 4: Connection services are not restricted in server mode</title><link>https://vulnfeed.org/cve/CVE-2026-116245/</link><guid isPermaLink="true">https://vulnfeed.org/cve/CVE-2026-116245/</guid><pubDate>Fri, 30 Oct 2026 20:17:04 +0000</pubDate><description>libpq looks a connection service up in the service file of the operating-system account running pgAdmin 4, and an entry there can hold a password or name a password file or client certificate. In server mode any user could set a server&apos;s Service, or a &quot;service&quot; connection parameter, to one of those entries and connect with its credentials. A PGPASSWORD or PGSERVICE variable set for that account was likewise used by libpq for every connection without a value of its own and passed on to the utilities, and pg_dumpall read a maintenance database name such as &quot;service=...&quot; as a connection string. The fix adds the SERVER_MODE_ALLOWED_SERVICES setting, empty by default: in server mode only a listed service can be used, the servicefile parameter is refused, and PGPASSWORD and PGSERVICE are removed from pgAdmin&apos;s environment at startup. The allowlist is checked again on the final connection string, and the pg_dumpall database name is wrapped as a connection string. This issue affects pgAdmin 4: before 9.19.</description></item><item><title>CVE-2026-116247: pgAdmin 4: libpq uses the pgAdmin service account&apos;s own password file and client certificate</title><link>https://vulnfeed.org/cve/CVE-2026-116247/</link><guid isPermaLink="true">https://vulnfeed.org/cve/CVE-2026-116247/</guid><pubDate>Fri, 30 Oct 2026 20:17:04 +0000</pubDate><description>When a server in pgAdmin 4 had no password file, client certificate or client key configured, or the configured one could not be found, pgAdmin left the parameter out of the connection and libpq fell back to the defaults of the operating-system account running pgAdmin: ~/.pgpass, ~/.postgresql/postgresql.crt and postgresql.key, or PGPASSFILE, PGSSLCERT and PGSSLKEY. In server mode any user could therefore connect to a server with the service account&apos;s saved passwords or client certificate, and supplying only a copy of its public certificate was enough for libpq to pair it with the service account&apos;s private key. A pg_service.conf entry, or a maintenance database name read as a connection string by pg_dumpall, could bring the same files back for the utilities. The fix gives each of these parameters a value in server mode, the user&apos;s own file or otherwise a path that can never be opened, in the connection string, in the environment of the utilities and in the --dbname connection string that ranks above a service entry. Desktop mode is unchanged. This issue affects pgAdmin 4: before 9.19.</description></item><item><title>CVE-2026-116239: pgAdmin 4: An LDAP or Kerberos login is logged in to another account with the same username</title><link>https://vulnfeed.org/cve/CVE-2026-116239/</link><guid isPermaLink="true">https://vulnfeed.org/cve/CVE-2026-116239/</guid><pubDate>Fri, 30 Oct 2026 20:17:03 +0000</pubDate><description>In server mode pgAdmin 4 keeps an account per authentication source, so the same username can exist as, for example, an internal account and an LDAP account. After LDAP or Kerberos authenticated a user, pgAdmin chose the account to log in by username alone, or took the account Flask-Security&apos;s login form had looked up, without checking that it came from the source that authenticated the user. The session therefore belonged to another account, with its role, its servers and its saved database passwords: - An LDAP or Kerberos user whose username matched an internal account was logged in as that internal account, including the administrator account created when pgAdmin is first set up. - With internal authentication listed before LDAP or Kerberos in AUTHENTICATION_SOURCES, the login form&apos;s internal validation looks up the account whose email was typed and keeps it even though its password does not match. A Kerberos user could type another Kerberos user&apos;s principal and be logged in as that user, and an LDAP user could do the same with an LDAP account whose email is their username. Exploitation requires valid credentials for an LDAP directory or Kerberos realm that pgAdmin is configured to use. The fix looks the account up by the authenticated username and the source that authenticated it, and no longer uses the account the login form found for any source but internal authentication. Internal authentication logs in that account only if it is an internal account. Desktop mode is not affected. This issue affects pgAdmin 4: before 9.19.</description></item><item><title>CVE-2026-116241: pgAdmin 4: Import/Export Data query export runs a command through a backslash in a double-quoted identifier</title><link>https://vulnfeed.org/cve/CVE-2026-116241/</link><guid isPermaLink="true">https://vulnfeed.org/cve/CVE-2026-116241/</guid><pubDate>Fri, 30 Oct 2026 20:17:03 +0000</pubDate><description>pgAdmin 4&apos;s Import/Export Data tool wraps a user&apos;s query export in a psql \copy (...) TO command and checks that the query&apos;s parentheses are balanced so that nothing can escape the wrapper. The check rejected a backslash inside a single-quoted string, but not inside a double-quoted identifier, where it treated the next double quote as closing the identifier. psql&apos;s \copy parser applies the connection&apos;s escape character to whichever quote opened a token, so with standard_conforming_strings off a backslash-escaped double quote does not close the identifier. pgAdmin&apos;s and psql&apos;s view of the quoting then diverged, a closing parenthesis hidden from the check ended the \copy (...) wrapper, and a following TO PROGRAM clause was executed by psql on the pgAdmin host, as the operating-system account running pgAdmin, before the server rejected the statement. An ordinary database role can turn standard_conforming_strings off for itself, and the Import/Export Data permission is granted to non-administrators by default. This is a bypass of the fix for CVE-2026-17566. The fix rejects any backslash inside a double-quoted identifier, as was already done for single-quoted strings, since its meaning depends on a server setting that cannot be known reliably when the query is validated. This issue affects pgAdmin 4: before 9.19.</description></item><item><title>CVE-2026-116242: pgAdmin 4: SSH tunnels use the pgAdmin service account&apos;s own SSH identity</title><link>https://vulnfeed.org/cve/CVE-2026-116242/</link><guid isPermaLink="true">https://vulnfeed.org/cve/CVE-2026-116242/</guid><pubDate>Fri, 30 Oct 2026 20:17:03 +0000</pubDate><description>pgAdmin 4 opens SSH tunnels with the sshtunnel library but gave it neither host_pkey_directories nor ssh_config_file, so it always loaded the unencrypted private keys in ~/.ssh of the operating-system account running pgAdmin, read that account&apos;s ~/.ssh/config (IdentityFile, User, HostName, ProxyCommand) for the tunnel host, and could use its ssh-agent. In server mode any user could therefore configure a tunnel to a host that accepts the service account&apos;s key, with no credentials of their own or with an identity file that did not exist in their storage, and reach it as that account. The fix makes tunnels in server mode use only the identity file or password the user configured: the service account&apos;s keys, configuration and agent are no longer used, and an identity file that cannot be found in the user&apos;s storage is reported instead of falling back to ~/.ssh. Desktop mode is unchanged. This issue affects pgAdmin 4: before 9.19.</description></item><item><title>CVE-2026-116238: pgAdmin 4: The failed login limit can be bypassed, and Flask-Security&apos;s own views skip pgAdmin&apos;s login and password checks</title><link>https://vulnfeed.org/cve/CVE-2026-116238/</link><guid isPermaLink="true">https://vulnfeed.org/cve/CVE-2026-116238/</guid><pubDate>Fri, 30 Oct 2026 20:17:02 +0000</pubDate><description>In server mode pgAdmin 4 locks an internal account after MAX_LOGIN_ATTEMPTS failed logins (3 by default). The limit could be bypassed, giving an unauthenticated attacker an unlimited number of password guesses against any internal account, including the administrator&apos;s, in the default configuration: - Flask-Security registers its own views next to pgAdmin&apos;s. A login submitted to its /login view was checked and logged in without pgAdmin&apos;s failed login count or lock. Its /verify view checked a signed-in user&apos;s password without limit, its /change view changed a password without pgAdmin&apos;s change password permission or re-encrypting the user&apos;s saved server passwords, and its /reset views sent and applied password resets for accounts that are not internal or are locked. - The internal account was looked up by its exact username, while the login form matches the email ignoring case, so a login with the username typed in another case was neither counted nor checked for the lock. - With LDAP or webserver authentication also configured, a wrong internal password was never counted, and with Kerberos or webserver authentication configured a guess could be answered without being counted. In addition, where accounts from different authentication sources share an email address, a password reset could be sent for, or applied to, an account from another source, and the About box showed the server configuration to a user whose email was that of an administrator&apos;s account. The fix refuses submissions to Flask-Security&apos;s own views, counts every failed internal login however the username is typed and whatever other sources are configured, no longer lets a login that posts a password fall back to an authentication source that does not check it, and locks only internal authentication. Password resets and the About box act only on the user&apos;s own internal account. Desktop mode is not affected. This issue affects pgAdmin 4: before 9.19.</description></item></channel></rss>
