{"id":"CVE-2026-116252","kind":"vulnerability","aliases":["CVE-2026-116252"],"related":[],"title":"pgAdmin 4: materialized view refresh lets a database name redirect connections","description":"pgAdmin 4's materialized view refresh passed the target database's name to psql's --dbname argument unchanged. libpq treats a --dbname value containing \"=\" (or a postgresql:// URI) as a full connection string, whose keywords override the host, port and other settings pgAdmin had supplied. A database whose name is such a string, which any role with CREATEDB can create, therefore redirected the psql process pgAdmin starts for the refresh to a host and port of the creator's choosing, and the connecting user's saved server password was presented to that endpoint. It also let the pgAdmin host be made to open connections to arbitrary addresses.\n\nThe same weakness was fixed for Backup, Restore, Maintenance and Import/Export Data in earlier releases (CVE-2026-86862); the materialized view refresh was the remaining caller. The fix routes the name through the same database_conninfo() helper, so libpq treats it strictly as a database name.\n\nThis issue affects pgAdmin 4: before 9.19.","summary":"pgAdmin 4 passed a target database's name unchanged to psql's --dbname argument, so a name containing a connection string could redirect the refresh to an attacker-chosen host and port. The connecting user's saved server password could then be sent to that endpoint, and the pgAdmin host could be made to open connections to arbitrary addresses.","severity":"high","cvss":7.1,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["package","pgadmin","postgresql","self-hosted"],"not_affected_if":["pgadmin-9.19-or-later"],"how_to_check":"- Check the installed pgAdmin 4 version; the sources say versions before `9.19` are affected.\n- Look for a materialized view refresh in pgAdmin that targets a database; the sources do not describe a narrower configuration.","fix":"- pgAdmin 4: move to `9.19` or later (the sources state the fix is in releases from `9.19`).","status":"open","published_at":"2026-10-30T20:17:05+00:00","first_seen_at":"2026-10-30T20:25:37+00:00","triaged_at":"2026-10-30T20:26:39+00:00","updated_at":"2026-10-30T20:26:39+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-30T20:26:39Z","model":"claude-haiku-5-5","output":{"fix":"- pgAdmin 4: move to `9.19` or later (the sources state the fix is in releases from `9.19`).","reach":"network","title":"pgAdmin 4: materialized view refresh lets a database name redirect connections","impact":"medium","summary":"pgAdmin 4 passed a target database's name unchanged to psql's --dbname argument, so a name containing a connection string could redirect the refresh to an attacker-chosen host and port. The connecting user's saved server password could then be sent to that endpoint, and the pgAdmin host could be made to open connections to arbitrary addresses.","audience":"businesses","category":"package","nicknames":[],"who_cares":["pgadmin","postgresql","self-hosted"],"confidence":0.7,"fix_status":"available","needs_auth":"yes","worst_case":"saved server password sent to attacker-chosen host; pgAdmin host reaches arbitrary addresses","analyst_note":"","how_to_check":"- Check the installed pgAdmin 4 version; the sources say versions before `9.19` are affected.\n- Look for a materialized view refresh in pgAdmin that targets a database; the sources do not describe a narrower configuration.","plain_action":"","needs_analyst":false,"not_affected_if":["pgadmin-9.19-or-later"],"who_is_affected":"pgAdmin 4 installs before 9.19 are affected when a materialized view refresh runs against a database whose name can be set by a role with CREATEDB. The sources say the earlier Backup, Restore, Maintenance and Import/Export paths were already fixed in earlier releases, so this is the remaining caller. Teams that do not run pgAdmin 4 can skip it.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"high"},"cost_usd":0.000743,"input_tokens":4351,"output_tokens":616,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-116252':14A,17A '-2026':13A,16A,206C '-86862':207C '4':2A,25B,85C,240C '9.19':242C 'address':83B,189C 'affect':238C 'also':177C 'arbitrari':82B,188C 'argument':37B,100C 'attack':52B 'attacker-chosen':51B 'backup':196C 'caller':215C 'choos':162C 'chosen':53B 'connect':11A,43B,58B,80B,114C,165C,186C 'conninfo':225C 'contain':41B,107C 'could':45B,64B,75B 'creat':142C 'createdb':140C 'creator':160C 'cve':12A,15A,205C 'data':201C 'databas':8A,29B,93C,129C,224C,234C 'dbname':36B,99C,105C 'earlier':203C 'endpoint':70B,175C 'fix':194C,217C 'full':113C 'helper':226C 'host':23B,54B,74B,120C,155C,181C 'import/export':200C 'issu':237C 'keyword':117C 'let':6A,178C 'libpq':102C,228C 'made':77B,183C 'mainten':198C 'materi':3A,87C,209C 'name':9A,31B,40B,95C,131C,220C,235C 'open':79B,185C 'overrid':118C 'packag':18B 'pass':26B,90C 'password':63B,170C 'pgadmin':1A,19B,24B,73B,84C,125C,148C,180C,239C 'port':56B,121C,157C 'postgresql':20B 'present':172C 'process':147C 'psql':34B,97C,146C 'redirect':10A,46B,144C 'refresh':5A,48B,89C,152C,211C 'releas':204C 'remain':214C 'restor':197C 'role':138C 'rout':218C 'save':61B,168C 'self':22B 'self-host':21B 'sent':67B 'server':62B,169C 'set':124C 'start':149C 'strict':231C 'string':44B,115C,135C 'suppli':127C 'target':28B,92C 'therefor':143C 'treat':103C,229C 'unchang':32B,101C 'uri':110C 'user':59B,166C 'valu':106C 'view':4A,88C,210C 'weak':192C 'whose':116C,130C","nicknames":[],"mitigations":[],"who_affected":"pgAdmin 4 installs before 9.19 are affected when a materialized view refresh runs against a database whose name can be set by a role with CREATEDB. The sources say the earlier Backup, Restore, Maintenance and Import/Export paths were already fixed in earlier releases, so this is the remaining caller. Teams that do not run pgAdmin 4 can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"first_public_at":"2026-10-30T20:17:05+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"f86ef6dc-4d3a-42ad-8f28-e6d5547a5007","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-116252","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-116252","severity":null,"published_at":"2026-10-30T20:17:05+00:00","modified_at":"2026-10-30T20:17:05+00:00","first_seen_at":"2026-10-30T20:25:37+00:00","fetched_at":"2026-10-30T20:25:37+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}