Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessControl untrusted PG server or create rogue ctid view
-
DeliveryReturn oversized ctid/oid column value
-
ExploitUpdatable cursor copies value into 32-byte stack buffer
-
ExecutionLength unchecked, write overruns buffer
-
ImpactProcess abort or adjacent stack corruption
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Stack buffer bounds checking
MITRE ATT&CK
1 technique across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Updatable cursors must be in use - they are enabled by default in psqlODBC, so a default client reading rows with such a cursor is in scope. To actually trigger the overflow, the attacker needs ONE of two concrete positions: (1) a PostgreSQL server that is not trusted under the client's current SSL/TLS settings (a malicious or MITM server able to send a crafted ctid/oid value of 32 bytes or more), or (2) a database account able to CREATE a view that defines its own column named ctid, which the application subsequently reads through an updatable cursor. Limiting factors: exploitation depends on holding one of those attacker positions rather than merely reaching the network service (hence AC:H); builds compiled with _FORTIFY_SOURCE only abort, reducing impact to denial of service; and confirmed impact is limited to stack memory corruption/crash with no demonstrated confidentiality or integrity compromise. Affected versions are all releases before psqlODBC 18.00.0006. |
| Impact | The input CVSS of 5.9 (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H) frames this as a medium-severity, availability-only issue, and the surrounding signals agree that it is a real but non-emergency concern. AV:N with PR:N/UI:N looks superficially like a trivially remote bug, but the description constrains the 'network' reach sharply: exploitation requires either a PostgreSQL server that is not trusted under the client's current SSL settings (a malicious or man-in-the-middle server) or a database user privileged enough to create a view exposing its own ctid column that the application then reads with an updatable cursor - this is precisely why AC:H is appropriate. The vuln.today decision label is 'this_month' (not act_now/emergency). No CISA KEV listing is present, so there is no confirmed active exploitation; EPSS is not provided in the input and cannot be cited; and the only reference is the vendor GHSA advisory, so no public exploit is identified. The impact is scored availability-only: _FORTIFY_SOURCE builds abort (clean DoS), while non-fortified builds overwrite adjacent stack memory - the sources do not claim code execution, so any confidentiality/integrity/RCE outcome is unverified. Net: a legitimate issue worth patching on a normal cycle, elevated slightly because updatable cursors are on by default, but not a drop-everything priority given the attacker-position prerequisites and availability-only confirmed impact. |
| Exploit ScenarioDerived | An attacker who controls a PostgreSQL endpoint the client connects to without strict SSL trust (or a low-privileged database user who creates a view with a column named ctid) arranges for a 32-byte-or-longer value to be returned in the hidden ctid or oid column. When psqlODBC reads that row through an updatable cursor, it copies the server-supplied length into a fixed 32-byte stack buffer without bounds-checking, overflowing it. On _FORTIFY_SOURCE builds the process aborts (denial of service); on other builds adjacent stack memory is overwritten. No public exploit was identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 02, 2026
A stack-based buffer overflow in psqlODBC, the PostgreSQL ODBC driver, affects all releases before 18.00.0006 when updatable cursors are used - and they are enabled by default. The driver copies the server-supplied ctid (and oid, for tables with OIDs) value into a fixed 32-byte stack buffer using the server-declared length without validating it against the buffer size, so a value of 32 bytes or more overwrites adjacent stack memory; builds compiled with _FORTIFY_SOURCE abort instead. Reaching the flaw needs a specific attacker position: either a PostgreSQL server the client does not trust under its current SSL/TLS settings (malicious or man-in-the-middle server) or a database user able to create a view with its own column named ctid that the application then reads through an updatable cursor; the assessed vector (AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H) rates this medium severity with availability-only impact, and no public exploit or active exploitation has been reported.
RemediationAI
Upgrade to psqlODBC 18.00.0006 or later, the first release listed as unaffected; every earlier version remains vulnerable and should be replaced rather than patched in place. Confirm the installed driver version on client hosts (the ODBC driver manager's registered driver entry or the driver's own version resource) and push the updated package through your normal software distribution channel, since the flaw sits in the client driver and updating the PostgreSQL server does not address it. Where immediate upgrade is not possible, reduce exposure by disabling updatable/positioned cursors in the application's ODBC usage (for example by opening result sets read-only or by using forward-only, non-updatable cursors) so the hidden ctid/oid columns are never fetched - this removes the vulnerable code path but breaks row-positioned UPDATE/DELETE through the cursor, requiring application changes. Additionally, keep SSL/TLS verification of the PostgreSQL server enforced (with a trusted CA and hostname validation) to close the malicious/MITM server path, and restrict CREATE privileges on schemas and views to trusted roles so that a low-privileged user cannot introduce a ctid-named view column; neither measure removes the underlying overflow, so upgrading remains the complete fix. Builds compiled with _FORTIFY_SOURCE abort on the overflow and therefore limit the failure to a crash rather than memory corruption, but this is a damage-limitation property, not a remediation. Refer to the vendor advisory at https://github.com/postgresql-interfaces/psqlodbc/security/advisories/GHSA-3r96-h2q4-6pxh for the definitive fix information.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
psqlODBC implements the ODBC wire behavior for PostgreSQL. When the driver is told to use updatable (positioned) cursors - a default-enabled behavior - it augments the SELECT with hidden system columns so it can later address the exact row for UPDATE/DELETE: ctid for every table and, for tables that still carry OIDs, the oid column. The results of those hidden columns are read from the protocol stream and copied into a fixed-size 32-byte stack buffer, with the copy length taken from the metadata/values the server sends rather than clamped to the destination size. That is a classic CWE-121 stack-based buffer overflow: any value of 32 bytes or more overflows the buffer, and the write is unchecked, so adjacent stack state - saved registers, return addresses, neighboring locals - can be overwritten. Hardening changes the failure mode rather than removing the bug: with _FORTIFY_SOURCE enabled the runtime detects the overflow and aborts the process, so the observable result is a crash (denial of service); on builds without that protection the consequence is genuine stack memory corruption. Because the value is attacker-influenced only via a hostile or spoofed server, or via a view whose column is deliberately named ctid and read through an updatable cursor, the flaw lives in the driver's trust of server-supplied column lengths and metadata rather than in PostgreSQL server-side parsing. The CVSS 3.1 vector AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H reflects that network reachability exists but a high-complexity precondition (holding one of those two attacker positions) is required, that no privileges are needed on the client side, and that the confirmed impact is loss of availability, with no demonstrated confidentiality or integrity compromise.
Know when Psqlodbc gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
AV:N and PR:N because an untrusted server can trigger it with no client-side auth; AC:H because it requires a malicious/untrusted server position or a crafted ctid view; impact limited to availability (A:H) per the evidence, with no demonstrated C/I effect.
Primary rating from Vendor (PostgreSQL).
CVSS VectorVendor: PostgreSQL
Lifecycle Timeline
1DescriptionCVE.org
For updatable cursors, which are enabled by default, psqlODBC adds hidden ctid and, for tables with OIDs, oid columns to the query. It copies each value into a 32-byte stack buffer using the length the server sent, without checking it against the buffer size, so a value of 32 bytes or more writes past the buffer. A server not trusted under current SSL settings can send such a value. So can any database user who can create a view with its own column named ctid that the application reads with an updatable cursor. Builds with _FORTIFY_SOURCE abort; other builds overwrite adjacent stack memory. Versions before psqlODBC 18.00.0006 are affected.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.
A stack-based buffer overflow occurs when a program writes more data to a buffer located on the stack than it was allocated to hold.
Out-of-bounds reads and writes in psqlODBC before 18.00.0006 arise when a host application forwards untrusted column num
SQL injection in psqlODBC before 18.00.0006 allows an attacker who can influence a table or schema name passed by a host
A stack-based buffer overflow (CWE-121) in the psqlODBC driver, the official PostgreSQL ODBC driver, lets attacker-influ
Heap out-of-bounds write in the psqlODBC driver (CWE-787) affects all versions before 18.00.0006 and is reachable only w
A heap buffer overflow in psqlODBC's large-object read path lets a malicious or man-in-the-middle PostgreSQL server over
SQL injection in psqlODBC before 18.00.0006 can let an authenticated database user who can create a table that an applic
Format-string handling in psqlODBC before 18.00.0006 can crash applications or disclose client memory when an updatable
Heap memory corruption in psqlODBC versions before 18.00.0005 can be triggered when an application binds 32,769 or more
Stack buffer over-write in psqlODBC before 18.00.0006 can corrupt an application process that forwards attacker-influenc
Client-side crash and limited out-of-bounds read affect psqlODBC before 18.00.0006 when the driver connects to a Postgre
psqlODBC before 18.00.0006 on Unix-like systems can expose query text and data to other local users when logging is enab
EUVD-2026-115380
NVD
CVE.org
Vulnrichment
GitHub
Exploit-DB