{"id":"CVE-2026-14661","kind":"vulnerability","aliases":["CVE-2026-14661"],"related":[],"title":"PostgreSQL: dblink and subscriptions let a user corrupt any file","description":"External control of file name in PostgreSQL dblink and CREATE/ALTER SUBSCRIPTION allows a user to achieve persistent denial of service, via appending invalid data to a chosen file.  Specifically, the \"sslkeylogfile\" connection parameter appends data, in NSS keylog format, to a file of the user's choosing.  This \"sslkeylogfile\" mechanism cannot add arbitrary bytes.  Within major version 18, minor versions before PostgreSQL 18.7 are affected.  Versions before PostgreSQL 18 are also affected if libpq version 18 or later is installed and in use by the server.","summary":"A database user can set the sslkeylogfile connection parameter in dblink or CREATE/ALTER SUBSCRIPTION to make PostgreSQL append data to a file of the user's choosing. The appended data cannot be arbitrary bytes, but it can break a file the server uses, causing a persistent denial of service.","severity":"high","cvss":8.1,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["dblink","logical-replication","postgresql","runtime","self-hosted"],"not_affected_if":["no-dblink","no-subscriptions","postgresql-18.7-or-later"],"how_to_check":"- Run `SELECT version();` in psql and check whether the server is PostgreSQL 18 below `18.7`, or older than 18 with libpq 18 or later in use by the server.\n- Check whether the dblink extension is installed with `\\dx dblink`, or whether the server uses subscriptions.","fix":"- PostgreSQL 18: move to `18.7` or later.\n- Other supported versions: unknown","status":"open","published_at":"2026-11-12T15:17:49+00:00","first_seen_at":"2026-11-12T15:41:57+00:00","triaged_at":"2026-11-12T15:43:43+00:00","updated_at":"2026-11-12T15:43:43+00:00","category":"runtime","confidence":0.7,"triage":{"at":"2026-11-12T15:43:43Z","model":"claude-haiku-5-5","output":{"fix":"- PostgreSQL 18: move to `18.7` or later.\n- Other supported versions: unknown","reach":"network","title":"PostgreSQL: dblink and subscriptions let a user corrupt any file","impact":"medium","summary":"A database user can set the sslkeylogfile connection parameter in dblink or CREATE/ALTER SUBSCRIPTION to make PostgreSQL append data to a file of the user's choosing. The appended data cannot be arbitrary bytes, but it can break a file the server uses, causing a persistent denial of service.","audience":"businesses","category":"runtime","nicknames":[],"who_cares":["postgresql","dblink","logical-replication","self-hosted"],"confidence":0.7,"fix_status":"available","needs_auth":"yes","worst_case":"Attacker corrupts a server file, causing persistent denial of service","analyst_note":"","how_to_check":"- Run `SELECT version();` in psql and check whether the server is PostgreSQL 18 below `18.7`, or older than 18 with libpq 18 or later in use by the server.\n- Check whether the dblink extension is installed with `\\dx dblink`, or whether the server uses subscriptions.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["no-dblink","no-subscriptions","postgresql-18.7-or-later"],"who_is_affected":"Servers running PostgreSQL 18 before 18.7, and older PostgreSQL servers that load libpq 18 or later. The flaw needs a database user who can set connection parameters through dblink or subscriptions, so servers without those features or with only trusted users are less exposed. The sources do not say whether managed hosting providers have patched.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"yes","severity_if_unknown":"high"},"cost_usd":0.000786,"input_tokens":4672,"output_tokens":637,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-14661':13A,16A '-2026':12A,15A '18':132C,143C,150C '18.7':137C 'achiev':90C 'add':126C 'affect':139C,146C 'allow':86C 'also':145C 'append':43B,54B,96C,108C 'arbitrari':58B,127C 'break':63B 'byte':59B,128C 'cannot':56B,125C 'caus':69B 'choos':52B,121C 'chosen':101C 'connect':33B,106C 'control':76C 'corrupt':8A 'create/alter':38B,84C 'cve':11A,14A 'data':44B,55B,98C,109C 'databas':27B 'dblink':2A,17B,36B,82C 'denial':72B,92C 'extern':75C 'file':10A,47B,65B,78C,102C,116C 'format':113C 'host':25B 'instal':154C 'invalid':97C 'keylog':112C 'later':152C 'let':5A 'libpq':148C 'logic':19B 'logical-repl':18B 'major':130C 'make':41B 'mechan':124C 'minor':133C 'name':79C 'nss':111C 'paramet':34B,107C 'persist':71B,91C 'postgresql':1A,21B,42B,81C,136C,142C 'replic':20B 'runtim':22B 'self':24B 'self-host':23B 'server':67B,160C 'servic':74B,94C 'set':30B 'specif':103C 'sslkeylogfil':32B,105C,123C 'subscript':4A,39B,85C 'use':68B,157C 'user':7A,28B,50B,88C,119C 'version':131C,134C,140C,149C 'via':95C 'within':129C","nicknames":[],"mitigations":[],"who_affected":"Servers running PostgreSQL 18 before 18.7, and older PostgreSQL servers that load libpq 18 or later. The flaw needs a database user who can set connection parameters through dblink or subscriptions, so servers without those features or with only trusted users are less exposed. The sources do not say whether managed hosting providers have patched.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["dblink","high","logicalreplication","postgresql","runtime","selfhosted"],"campaign_type":null,"search_a":"'-14661':13A,16A '-2026':12A,15A 'corrupt':8A 'cve':11A,14A 'dblink':2A 'file':10A 'let':5A 'postgresql':1A 'subscript':4A 'user':7A","search_b":"'append':43B,54B 'arbitrari':58B 'break':63B 'byte':59B 'cannot':56B 'caus':69B 'choos':52B 'connect':33B 'create/alter':38B 'data':44B,55B 'databas':27B 'dblink':17B,36B 'denial':72B 'file':47B,65B 'host':25B 'logic':19B 'logical-repl':18B 'make':41B 'paramet':34B 'persist':71B 'postgresql':21B,42B 'replic':20B 'runtim':22B 'self':24B 'self-host':23B 'server':67B 'servic':74B 'set':30B 'sslkeylogfil':32B 'subscript':39B 'use':68B 'user':28B,50B","search_c":"'18':132C,143C,150C '18.7':137C 'achiev':90C 'add':126C 'affect':139C,146C 'allow':86C 'also':145C 'append':96C,108C 'arbitrari':127C 'byte':128C 'cannot':125C 'choos':121C 'chosen':101C 'connect':106C 'control':76C 'create/alter':84C 'data':98C,109C 'dblink':82C 'denial':92C 'extern':75C 'file':78C,102C,116C 'format':113C 'instal':154C 'invalid':97C 'keylog':112C 'later':152C 'libpq':148C 'major':130C 'mechan':124C 'minor':133C 'name':79C 'nss':111C 'paramet':107C 'persist':91C 'postgresql':81C,136C,142C 'server':160C 'servic':94C 'specif':103C 'sslkeylogfil':105C,123C 'subscript':85C 'use':157C 'user':88C,119C 'version':131C,134C,140C,149C 'via':95C 'within':129C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-12T15:17:49+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H","cvss_by":"f86ef6dc-4d3a-42ad-8f28-e6d5547a5007","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-14661","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-14661","severity":null,"published_at":"2026-11-12T15:17:49+00:00","modified_at":"2026-11-12T15:17:49+00:00","first_seen_at":"2026-11-12T15:41:57+00:00","fetched_at":"2026-11-12T15:41:57+00:00","note":null}],"documents":[],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}