Executive brief
pgAdmin 4 is a popular management tool for PostgreSQL databases. In certain server-mode configurations, two specific web endpoints were found to lack proper login requirements. If an attacker has already gained partial access to the server's configuration or files, they could use these unprotected endpoints to take full control of the pgAdmin application and the underlying server.
Technical details
Two state-mutating endpoints in the SQL Editor blueprint—DELETE /sqleditor/close/<trans_id> and POST /sqleditor/initialize/sqleditor/update_connection/<sgid>/<sid>/<did>—missing the @pga_login_required decorator. This omission allows unauthenticated access in server mode to code paths that reach a pickle.loads() sink. While the vulnerability is a missing authentication check (CWE-306) leading to unsafe deserialization (CWE-502), successful exploitation for remote code execution (RCE) requires two significant preconditions: knowledge of the Flask SECRET_KEY and write access to the server's session directory. If these conditions are met via a separate vulnerability or misconfiguration, an attacker can achieve RCE as the user running the pgAdmin process. The issue is addressed in version 9.16 by adding the necessary authentication decorators.
Affected products
- pgadmin.org pgAdmin 4 6.9 to 9.15
Timeline
- 2026-06-10: disclosed: Issue opened on GitHub
- 2026-06-19: advisory: NVD publication date
- 2026-06-19: patched: Fixed in version 9.16