{"id":"CVE-2026-116249","kind":"vulnerability","aliases":["CVE-2026-116249"],"related":[],"title":"pgAdmin 4: server mode reads other users' credential files via path traversal","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.\n\nmake_conninfo() also quoted connection parameter values but not their names, so a crafted parameter name could smuggle additional keyword=value pairs past these checks.\n\nThe 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.\n\nThis issue affects pgAdmin 4: before 9.19.","summary":"In pgAdmin 4 server mode, a crafted password file, certificate, key or SSH identity path (such as one with ../) makes the server read another user's saved passwords, client certificate or SSH key. A crafted sslkeylogfile path can also make libpq create or append files as the account running pgAdmin.","severity":"high","cvss":8.4,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["package","pgadmin","postgresql","server-mode"],"not_affected_if":["desktop-mode","single-user"],"how_to_check":"- Check the pgAdmin 4 version in use; affected releases are before `9.19`.\n- Review saved server definitions and servers.json imports for file paths containing `..`.","fix":"- pgAdmin 4 `9.19` or later (per the description, the fix is in releases from `9.19` onward)","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:20+00:00","updated_at":"2026-10-30T20:26:20+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-30T20:26:20Z","model":"claude-haiku-5-5","output":{"fix":"- pgAdmin 4 `9.19` or later (per the description, the fix is in releases from `9.19` onward)","reach":"network","title":"pgAdmin 4: server mode reads other users' credential files via path traversal","impact":"high","summary":"In pgAdmin 4 server mode, a crafted password file, certificate, key or SSH identity path (such as one with ../) makes the server read another user's saved passwords, client certificate or SSH key. A crafted sslkeylogfile path can also make libpq create or append files as the account running pgAdmin.","audience":"businesses","category":"package","nicknames":[],"who_cares":["pgadmin","postgresql","server-mode"],"confidence":0.7,"fix_status":"available","needs_auth":"yes","worst_case":"another user's database passwords and SSH keys are read and used","analyst_note":"","how_to_check":"- Check the pgAdmin 4 version in use; affected releases are before `9.19`.\n- Review saved server definitions and servers.json imports for file paths containing `..`.\n- unknown","plain_action":"","needs_analyst":false,"not_affected_if":["desktop-mode","single-user"],"who_is_affected":"Teams running pgAdmin 4 in server mode, where multiple users share one instance and store their own server connections. Desktop-only use with a single user is less exposed, since the risk comes from reaching another user's storage directory. unknown for whether desktop mode is affected.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000707,"input_tokens":4414,"output_tokens":532,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-116249':15A,18A '-2026':14A,17A '/.pgpass':119C '4':2A,27B,79C,261C '9.19':263C 'accept':232C 'account':72B,174C 'addit':195C 'affect':259C 'also':63B,179C 'anoth':48B,134C 'api':127C 'append':68B,169C 'back':253C 'certif':34B,54B,87C,147C 'check':201C 'client':53B,146C 'complet':104C 'confin':226C 'connect':139C,153C,181C,238C 'conninfo':178C 'could':193C 'craft':31B,59B,190C 'creat':66B,167C 'credenti':8A 'crl':89C 'cve':13A,16A 'default':256C 'dialog':124C 'directori':101C,219C,225C 'exact':234C 'fall':252C 'file':9A,33B,69B,85C,94C,105C,137C,171C 'fix':203C 'follow':211C 'get':103C 'ident':38B,93C 'import':131C 'insid':214C 'instead':248C 'issu':258C 'join':112C 'key':35B,57B,88C,150C 'keyword':196C,236C,245C 'lead':109C 'let':165C,250C 'libpq':65B,158C,166C,235C,251C 'link':210C 'make':44B,64B,177C 'mode':4A,24B,29B,77C 'name':133C,187C,192C,222C,240C 'one':42B 'outsid':163C 'packag':19B 'pair':198C 'paramet':154C,182C,191C,239C 'pass':156C 'password':32B,52B,84C,145C 'past':199C 'path':11A,39B,61B,106C,116C,162C,207C,243C 'pgadmin':1A,20B,26B,74B,78C,176C,260C 'postgresql':21B 'quot':180C 'read':5A,47B 'refus':242C 'relat':95C 'report':247C 'requir':204C 'resolv':80C,206C 'rest':126C 'run':73B,175C 'save':51B,144C 'server':3A,23B,28B,46B,76C,82C,123C 'server-mod':22B 'servers.json':130C 'set':120C 'share':223C 'slash':110C 'smuggl':194C 'ssh':37B,56B,91C,149C 'ssl':86C 'sslkeylogfil':60B,152C,227C 'stay':213C 'storag':100C,164C,218C,224C 'strip':108C 'symbol':209C 'therefor':132C 'travers':12A 'tunnel':92C 'two':114C 'unchang':159C 'use':140C 'user':7A,49B,98C,135C,142C,216C 'valu':183C,197C 'via':10A 'way':230C","nicknames":[],"mitigations":[],"who_affected":"Teams running pgAdmin 4 in server mode, where multiple users share one instance and store their own server connections. Desktop-only use with a single user is less exposed, since the risk comes from reaching another user's storage directory. unknown for whether desktop mode is affected.","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:H/AT:P/PR:L/UI:N/VC:H/VI:L/VA:L/SC:H/SI:H/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-116249","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-116249","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"}