CVE-2026-109448
psqlODBC SQLBindParameter heap memory corruption when binding more than 32767 parameters
Integer wraparound in psqlODBC SQLBindParameter allows an application, or an attacker who controls how many parameters the application binds on one statement, to corrupt heap memory. psqlODBC stores the binding count in a signed 16-bit field. Binding parameter number 32768 wraps that count to -32768. Binding parameter 32769 then writes about 2.5 MB of zeros starting 1.25 MB before the binding array, which crashes the application or leaves it running on a corrupted heap. Applications that build parameter lists from untrusted input, such as an IN (?, ?, ...) list, are exposed. Versions before psqlODBC 18.00.0005 are affected.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used 5.9
psqlODBC SQLBindParameter heap memory corruption when binding more than 32767 parameters
Integer wraparound in psqlODBC SQLBindParameter allows an application, or an attacker who controls how many parameters the application binds on one statement, to corrupt heap memory. psqlODBC stores the binding count in a signed 16-bit field. Binding parameter number 32768 wraps that count to -32768. Binding parameter 32769 then writes about 2.5 MB of zeros starting 1.25 MB before the binding array, which crashes the application or leaves it running on a corrupted heap. Applications that build parameter lists from untrusted input, such as an IN (?, ?, ...) list, are exposed. Versions before psqlODBC 18.00.0005 are affected.
- Record
CVE-2026-109448- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-190, CWE-124
- Updated
- 2026-11-02
EUVDEUVD-2026-97731 5.9
Integer wraparound in psqlODBC SQLBindParameter allows an application, or an attacker who controls how many parameters the application binds on one statement, to corrupt heap memory. psqlODBC stores the binding count in a signed 16-bit field. Binding parameter number 32768 wraps that count to -32768. Binding parameter 32769 then writes about 2.5 MB of zeros starting 1.25 MB before the binding array, which crashes the application or leaves it running on a corrupted heap. Applications that build parameter lists from untrusted input, such as an IN (?, ?, ...) list, are exposed. Versions before psqlODBC 18.00.0005 are affected.
- Record
EUVD-2026-97731- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
NVD 5.9
Integer wraparound in psqlODBC SQLBindParameter allows an application, or an attacker who controls how many parameters the application binds on one statement, to corrupt heap memory. psqlODBC stores the binding count in a signed 16-bit field. Binding parameter number 32768 wraps that count to -32768. Binding parameter 32769 then writes about 2.5 MB of zeros starting 1.25 MB before the binding array, which crashes the application or leaves it running on a corrupted heap. Applications that build parameter lists from untrusted input, such as an IN (?, ?, ...) list, are exposed. Versions before psqlODBC 18.00.0005 are affected.
- Record
CVE-2026-109448- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-124, CWE-190
- Updated
- 2026-11-02
OSVBELL-CVE-2026-109448 5.9
- Record
BELL-CVE-2026-109448- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSV 5.9
psqlODBC SQLBindParameter heap memory corruption when binding more than 32767 parameters
Integer wraparound in psqlODBC SQLBindParameter allows an application, or an attacker who controls how many parameters the application binds on one statement, to corrupt heap memory. psqlODBC stores the binding count in a signed 16-bit field. Binding parameter number 32768 wraps that count to -32768. Binding parameter 32769 then writes about 2.5 MB of zeros starting 1.25 MB before the binding array, which crashes the application or leaves it running on a corrupted heap. Applications that build parameter lists from untrusted input, such as an IN (?, ?, ...) list, are exposed. Versions before psqlODBC 18.00.0005 are affected.
- Record
CVE-2026-109448- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-124, CWE-190
- Updated
- 2026-11-12
OSVDEBIAN-CVE-2026-109448 5.9
Integer wraparound in psqlODBC SQLBindParameter allows an application, or an attacker who controls how many parameters the application binds on one statement, to corrupt heap memory. psqlODBC stores the binding count in a signed 16-bit field. Binding parameter number 32768 wraps that count to -32768. Binding parameter 32769 then writes about 2.5 MB of zeros starting 1.25 MB before the binding array, which crashes the application or leaves it running on a corrupted heap. Applications that build parameter lists from untrusted input, such as an IN (?, ?, ...) list, are exposed. Versions before psqlODBC 18.00.0005 are affected.
- Record
DEBIAN-CVE-2026-109448- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
Show 5 moreShow less
OSVUBUNTU-CVE-2026-109448 5.9
Integer wraparound in psqlODBC SQLBindParameter allows an application, or an attacker who controls how many parameters the application binds on one statement, to corrupt heap memory. psqlODBC stores the binding count in a signed 16-bit field. Binding parameter number 32768 wraps that count to -32768. Binding parameter 32769 then writes about 2.5 MB of zeros starting 1.25 MB before the binding array, which crashes the application or leaves it running on a corrupted heap. Applications that build parameter lists from untrusted input, such as an IN (?, ?, ...) list, are exposed. Versions before psqlODBC 18.00.0005 are affected.
- Record
UBUNTU-CVE-2026-109448- CVSS 3.1
- 5.9 Medium
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVopenSUSE-SU-2026:12135-1No score
psqlODBC-18.00.0005-1.1 on GA media
These are all security issues fixed in the psqlODBC-18.00.0005-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:12135-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:22122-1No score
Security update for psqlODBC
This update for psqlODBC fixes the following issues:
Changes in psqlODBC:
Update to 18.00.0005:
- https://odbc.postgresql.org/docs/release.html
- Fix heap memory corruption when an application binds more than 32767 parameters on a single statement. SQLBindParameter now rejects parameter numbers outside 1..32767 with SQLSTATE 07009 (CVE-2026-109448, bsc#1285073).
- Fix the placeholder cast being truncated from parameter 1000 on, which failed with 'type "timestam" does not exist'.
- Report the largest column size instead of SQL_NO_TOTAL (-4) as COLUMN_SIZE for bytea in SQLGetTypeInfo, which broke bytea parameters through MSDASQL.
Changes in 18.00.0004:
- Fix the result-conversions regression test on big-endian systems.
Changes in 18.00.0003:
- Report SQLSTATE 22003 for out-of-range integer conversions instead of silently returning the wrapped low bits.
- Fix statement level rollback (Protocol=7.4-2) discarding the whole transaction on a syntax error.
- Do not wrap internal queries in a savepoint at rollback-on-error level 0 (Protocol=7.4-0), which lost transactions on servers without SAVEPOINT support.
- Redact the database password (ODBC PWD and libpq pqopt password) in debug logs.
- Fix hang on COPY ... FROM STDIN / TO STDOUT: report it as unsupported and keep the connection usable.
- Fix 'infinity'/'-infinity' dates being silently returned as today's date.
- Document the connection string escaping rules.
Changes in 18.00.0002:
- Use a signed type for the error status.
- Redact sensitive connection parameters in the driver logs.
- Fix double free / heap corruption during SQLDisconnect cleanup.
- Clear PGresults from per-query rollback.
- Validate UTF-16 surrogate pairs before combining them.
- Pass SQLSetDescRec field values correctly.
- Avoid reading before leading string literals.
- Detach freed application descriptors from statements.
- Reject invalid SQLPutData lengths.
- Reject overlong cursor names.
- Fix version reporting.
- Handle ARD bookmark allocation failure.
- Validate percent escapes before decoding connection string values.
- Avoid reading past the end of conn_settings.
- Fix stack buffer overflow in getPrecisionPart().
- Fix SQLPrimaryKeys to exclude INCLUDE columns from the result.
Changes in 18.00.0000, 18.00.0001 and 17.00.0010:
- No code changes from 17.00.0009.
Changes in 17.00.0009:
- Fix the test suite for PostgreSQL 19, where standard_conforming_strings is always on.
- Upgrade the GitHub Actions workflow: use prebuilt PostgreSQL binaries, parallel matrix builds and a separate release job.
Update to 17.00.0008:
- Record
openSUSE-SU-2026:22122-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:5191-1No score
Security update for psqlODBC
This update for psqlODBC fixes the following issues:
- CVE-2026-109448: denial of service via integer wraparound in SQLBindParameter (bsc#1285073).
- CVE-2026-120057: large-object read overflows the application buffer (bsc#1289252).
- CVE-2026-120058: row cache overflow when a later FETCH changes the column count (bsc#1289253).
- CVE-2026-120059: driver uses a server-supplied column name as a format string (bsc#1289254).
- CVE-2026-120060: driver does not validate server-supplied counts and lengths (bsc#1289255).
- CVE-2026-120061: ODBC escape parser stack buffer overflow (bsc#1289256).
- CVE-2026-120062: SQL injection through SQLSpecialColumns table and schema names (bsc#1289257).
- CVE-2026-120063: stack buffer overflow when quoting long schema and table names (bsc#1289258).
- CVE-2026-120064: driver does not validate column numbers and row indexes in binding and descriptor functions (bsc#1289259).
- CVE-2026-120065: driver does not escape a server-supplied column name in its updatable-cursor queries (bsc#1289260).
- CVE-2026-120066: log files are created with default permissions at a predictable path and follow symbolic links (bsc#1289261).
- CVE-2026-120067: stack buffer overflow when reading the keyset (ctid/oid) columns of an updatable cursor (bsc#1289262).
Changes for psqlODBC:
- Update to 18.00.0006:
- https://odbc.postgresql.org/docs/release.html
- Hardening: SQLSetDescRecW stored a freed buffer and the address of a local variable as deferred bound data. It now stores the application's pointers, as SQLSetDescRec does.
- Hardening: SQLColumns returned uninitialized relkind and table OID values when the table query returned no rows.
- Hardening: convert_linefeeds could dereference a NULL pointer in one build configuration.
- Hardening: secure_sscanf limits an over-wide %Ns width, msgtowstr checks for a zero buffer length, and the MSDTC connect-string append is bounded.
- Update to 18.00.0005:
- https://odbc.postgresql.org/docs/release.html
- Fix the placeholder cast being truncated from parameter 1000 on, which failed with 'type 'timestam' does not exist'.
- Report the largest column size instead of SQL_NO_TOTAL (-4) as COLUMN_SIZE for bytea in SQLGetTypeInfo, which broke bytea parameters through MSDASQL.
- Update to 18.00.0004:
- Fix the result-conversions regression test on big-endian systems.
- Update to 18.00.0003:
- Report SQLSTATE 22003 for out-of-range integer conversions instead of silently returning the wrapped low bits.
- Fix statement level rollback (Protocol=7.4-2) discarding the whole transaction on a syntax error.
- Do not wrap internal queries in a savepoint at rollback-on-error level 0 (Protocol=7.4-0), which lost transactions on servers without SAVEPOINT support.
- Redact the database password (ODBC PWD and libpq pqopt password) in debug logs.
- Fix hang on COPY ... FROM STDIN / TO STDOUT: report it as unsupported and keep the connection usable.
- Fix 'infinity'/'-infinity' dates being silently returned as today's date.
- Document the connection string escaping rules.
- Update to 18.00.0002:
- Use a signed type for the error status.
- Redact sensitive connection parameters in the driver logs.
- Fix double free / heap corruption during SQLDisconnect cleanup.
- Clear PGresults from per-query rollback.
- Validate UTF-16 surrogate pairs before combining them.
- Pass SQLSetDescRec field values correctly.
- Avoid reading before leading string literals.
- Detach freed application descriptors from statements.
- Reject invalid SQLPutData lengths.
- Reject overlong cursor names.
- Fix version reporting.
- Handle ARD bookmark allocation failure.
- Validate percent escapes before decoding connection string values.
- Avoid reading past the end of conn_settings.
- Fix stack buffer overflow in getPrecisionPart().
- Fix SQLPrimaryKeys to exclude INCLUDE columns from the…
- Record
SUSE-SU-2026:5191-1- Updated
- 2026-11-12
OSVSUSE-SU-2026:5192-1No score
Security update for psqlODBC
This update for psqlODBC fixes the following issues:
- CVE-2026-109448: denial of service via integer wraparound in SQLBindParameter (bsc#1285073).
- CVE-2026-120057: large-object read overflows the application buffer (bsc#1289252).
- CVE-2026-120058: row cache overflow when a later FETCH changes the column count (bsc#1289253).
- CVE-2026-120059: driver uses a server-supplied column name as a format string (bsc#1289254).
- CVE-2026-120060: driver does not validate server-supplied counts and lengths (bsc#1289255).
- CVE-2026-120061: ODBC escape parser stack buffer overflow (bsc#1289256).
- CVE-2026-120062: SQL injection through SQLSpecialColumns table and schema names (bsc#1289257).
- CVE-2026-120063: stack buffer overflow when quoting long schema and table names (bsc#1289258).
- CVE-2026-120064: driver does not validate column numbers and row indexes in binding and descriptor functions (bsc#1289259).
- CVE-2026-120065: driver does not escape a server-supplied column name in its updatable-cursor queries (bsc#1289260).
- CVE-2026-120066: log files are created with default permissions at a predictable path and follow symbolic links (bsc#1289261).
- CVE-2026-120067: stack buffer overflow when reading the keyset (ctid/oid) columns of an updatable cursor (bsc#1289262).
Changes for psqlODBC:
- Update to 18.00.0006:
- https://odbc.postgresql.org/docs/release.html
- Hardening: SQLSetDescRecW stored a freed buffer and the address of a local variable as deferred bound data. It now stores the application's pointers, as SQLSetDescRec does.
- Hardening: SQLColumns returned uninitialized relkind and table OID values when the table query returned no rows.
- Hardening: convert_linefeeds could dereference a NULL pointer in one build configuration.
- Hardening: secure_sscanf limits an over-wide %Ns width, msgtowstr checks for a zero buffer length, and the MSDTC connect-string append is bounded.
- Update to 18.00.0005:
- https://odbc.postgresql.org/docs/release.html
- Fix the placeholder cast being truncated from parameter 1000 on, which failed with 'type 'timestam' does not exist'.
- Report the largest column size instead of SQL_NO_TOTAL (-4) as COLUMN_SIZE for bytea in SQLGetTypeInfo, which broke bytea parameters through MSDASQL.
- Update to 18.00.0004:
- Fix the result-conversions regression test on big-endian systems.
- Update to 18.00.0003:
- Report SQLSTATE 22003 for out-of-range integer conversions instead of silently returning the wrapped low bits.
- Fix statement level rollback (Protocol=7.4-2) discarding the whole transaction on a syntax error.
- Do not wrap internal queries in a savepoint at rollback-on-error level 0 (Protocol=7.4-0), which lost transactions on servers without SAVEPOINT support.
- Redact the database password (ODBC PWD and libpq pqopt password) in debug logs.
- Fix hang on COPY ... FROM STDIN / TO STDOUT: report it as unsupported and keep the connection usable.
- Fix 'infinity'/'-infinity' dates being silently returned as today's date.
- Document the connection string escaping rules.
- Update to 18.00.0002:
- Use a signed type for the error status.
- Redact sensitive connection parameters in the driver logs.
- Fix double free / heap corruption during SQLDisconnect cleanup.
- Clear PGresults from per-query rollback.
- Validate UTF-16 surrogate pairs before combining them.
- Pass SQLSetDescRec field values correctly.
- Avoid reading before leading string literals.
- Detach freed application descriptors from statements.
- Reject invalid SQLPutData lengths.
- Reject overlong cursor names.
- Fix version reporting.
- Handle ARD bookmark allocation failure.
- Validate percent escapes before decoding connection string values.
- Avoid reading past the end of conn_settings.
- Fix stack buffer overflow in getPrecisionPart().
- Fix SQLPrimaryKeys to exclude INCLUDE columns from the…
- Record
SUSE-SU-2026:5192-1- Updated
- 2026-11-12
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
psqlodbcAlpaquita:23 | 16.00.0000-r0 and later | None known |
psqlodbcAlpaquita:25 | 16.00.0005-r0 and later | None known |
psqlodbcAlpaquita:stream | 16.00.0005-r0 and later | None known |
psqlodbcDebian:12 | All versions, plus listed versions 1:13.02.0000-21:15.00.0000-11:16.00.0000-11:16.00.0005-11:17.00.0004-1 Show 12 moreShow less1:17.00.0004-21:17.00.0005-11:17.00.0006-11:17.00.0006-21:17.00.0007-11:17.00.0008-11:18.00.0001-11:18.00.0002-11:18.00.0003-11:18.00.0003-21:18.00.0004-11:18.00.0005-1 | None known |
psqlodbcDebian:13 | All versions, plus listed versions 1:17.00.0004-21:17.00.0005-11:17.00.0006-11:17.00.0006-21:17.00.0007-1 Show 7 moreShow less1:17.00.0008-11:18.00.0001-11:18.00.0002-11:18.00.0003-11:18.00.0003-21:18.00.0004-11:18.00.0005-1 | None known |
psqlodbcDebian:14 | before 1:18.00.0005-1, plus listed versions 1:17.00.0004-21:17.00.0005-11:17.00.0006-11:17.00.0006-21:17.00.0007-1 Show 6 moreShow less1:17.00.0008-11:18.00.0001-11:18.00.0002-11:18.00.0003-11:18.00.0003-21:18.00.0004-1 | 1:18.00.0005-1 |
psqlODBCSUSE:Linux Enterprise Module for Basesystem 15 SP7 From an advisory covering 12 CVEs | before 18.00.0006-150600.3.5.1 | 18.00.0006-150600.3.5.1 |
psqlODBCSUSE:Linux Enterprise Server 15 SP6-LTSS From an advisory covering 12 CVEs | before 18.00.0006-150600.3.5.1 | 18.00.0006-150600.3.5.1 |
psqlODBCSUSE:Linux Enterprise Server for SAP Applications 15 SP6 From an advisory covering 12 CVEs | before 18.00.0006-150600.3.5.1 | 18.00.0006-150600.3.5.1 |
psqlODBCSUSE:Linux Enterprise Server 12 SP5-LTSS From an advisory covering 12 CVEs | before 18.00.0006-1.8.1 | 18.00.0006-1.8.1 |
Show 10 moreShow less
| Package | Affected | Fixed |
|---|---|---|
psqlODBCSUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 From an advisory covering 12 CVEs | before 18.00.0006-1.8.1 | 18.00.0006-1.8.1 |
psqlodbcUbuntu:16.04:LTS | All versions, plus listed versions 1:09.03.0300-1 | None known |
psqlodbcUbuntu:18.04:LTS | All versions, plus listed versions 1:09.06.0410-11:10.00.0000-11:10.01.0000-1 | None known |
psqlodbcUbuntu:20.04:LTS | All versions, plus listed versions 1:11.00.0000-11:12.00.0000-11:12.01.0000-1 | None known |
psqlodbcUbuntu:22.04:LTS | All versions, plus listed versions 1:13.00.0000-11:13.02.0000-11:13.02.0000-2 | None known |
psqlodbcUbuntu:24.04:LTS | All versions, plus listed versions 1:15.00.0000-11:16.00.0000-1 | None known |
psqlodbcUbuntu:26.10 | All versions, plus listed versions 1:17.00.0007-11:18.00.0001-11:18.00.0002-1 | None known |
psqlodbcUbuntu:26.04:LTS | All versions, plus listed versions 1:17.00.0006-21:17.00.0007-1 | None known |
psqlODBCopenSUSE:Tumbleweed | before 18.00.0005-1.1 | 18.00.0005-1.1 |
psqlODBCopenSUSE:Leap 16.0 | before 18.00.0005-bp160.1.1 | 18.00.0005-bp160.1.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, aliases, facts, references | OSV | |
| first indexed | CVE List, EUVD, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-109448 is a medium vulnerability (CVSS 5.9) in Postgresql Psqlodbc, published October 12, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.22%, the 12th percentile. Fixed in psqlodbc 1:18.00.0005-1.
References
github.com/postgresql-interfaces/psqlodbc/security/advisories/GHSA-cmfx-rm3r-p2jr
docs.bell-sw.com/security/cves/CVE-2026-109448
github.com/CVEProject/cvelistV5/tree/main/cves/2026/109xxx/CVE-2026-109448.json
nvd.nist.gov/vuln/detail/CVE-2026-109448
github.com/postgresql-interfaces/psqlodbc
security-tracker.debian.org/tracker/CVE-2026-109448
Show 28 moreShow less
suse.com/support/update/announcement/2026/suse-su-20265191-1
bugzilla.suse.com/1285073
bugzilla.suse.com/1289252
bugzilla.suse.com/1289253
bugzilla.suse.com/1289254
bugzilla.suse.com/1289255
bugzilla.suse.com/1289256
bugzilla.suse.com/1289257
bugzilla.suse.com/1289258
bugzilla.suse.com/1289259
bugzilla.suse.com/1289260
bugzilla.suse.com/1289261
bugzilla.suse.com/1289262
suse.com/security/cve/CVE-2026-109448
suse.com/security/cve/CVE-2026-120057
suse.com/security/cve/CVE-2026-120058
suse.com/security/cve/CVE-2026-120059
suse.com/security/cve/CVE-2026-120060
suse.com/security/cve/CVE-2026-120061
suse.com/security/cve/CVE-2026-120062
suse.com/security/cve/CVE-2026-120063
suse.com/security/cve/CVE-2026-120064
suse.com/security/cve/CVE-2026-120065
suse.com/security/cve/CVE-2026-120066
suse.com/security/cve/CVE-2026-120067
suse.com/support/update/announcement/2026/suse-su-20265192-1
ubuntu.com/security/CVE-2026-109448
cve.org/CVERecord?id=CVE-2026-109448
Left out here: the rest of 2 source descriptions. The JSON record has them.