{"id":"CVE-2026-109448","aliases":["BELL-CVE-2026-109448","DEBIAN-CVE-2026-109448","EUVD-2026-97731","GHSA-cmfx-rm3r-p2jr","UBUNTU-CVE-2026-109448","openSUSE-SU-2026:12135-1","openSUSE-SU-2026:22122-1"],"status":"published","title":"psqlODBC SQLBindParameter heap memory corruption when binding more than 32767 parameters","description":"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.","severity":{"version":"3.1","score":5.9,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-09","score":0.00222,"percentile":0.12927,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-124","CWE-190"],"published":"2026-10-12T17:42:59Z","modified":"2026-10-28T02:30:55Z","fixes":[{"ecosystem":"Debian:14","package":"psqlodbc","fixed_in":["1:18.00.0005-1"],"sources":["osv"]},{"ecosystem":"openSUSE:Tumbleweed","package":"psqlODBC","fixed_in":["18.00.0005-1.1"],"sources":["osv"]},{"ecosystem":"openSUSE:Leap 16.0","package":"psqlODBC","fixed_in":["18.00.0005-bp160.1.1"],"sources":["osv"]}],"affected":[{"source":"osv","ecosystem":"Alpaquita:23","package":"psqlodbc","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"16.00.0000-r0"}]}]},{"source":"osv","ecosystem":"Alpaquita:25","package":"psqlodbc","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"16.00.0005-r0"}]}]},{"source":"osv","ecosystem":"Alpaquita:stream","package":"psqlodbc","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"16.00.0005-r0"}]}]},{"source":"osv","ecosystem":"Debian:12","package":"psqlodbc","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:13.02.0000-2","1:15.00.0000-1","1:16.00.0000-1","1:16.00.0005-1","1:17.00.0004-1","1:17.00.0004-2","1:17.00.0005-1","1:17.00.0006-1","1:17.00.0006-2","1:17.00.0007-1","1:17.00.0008-1","1:18.00.0001-1","1:18.00.0002-1","1:18.00.0003-1","1:18.00.0003-2","1:18.00.0004-1","1:18.00.0005-1"]},{"source":"osv","ecosystem":"Debian:13","package":"psqlodbc","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:17.00.0004-2","1:17.00.0005-1","1:17.00.0006-1","1:17.00.0006-2","1:17.00.0007-1","1:17.00.0008-1","1:18.00.0001-1","1:18.00.0002-1","1:18.00.0003-1","1:18.00.0003-2","1:18.00.0004-1","1:18.00.0005-1"]},{"source":"osv","ecosystem":"Debian:14","package":"psqlodbc","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1:18.00.0005-1"}]}],"versions":["1:17.00.0004-2","1:17.00.0005-1","1:17.00.0006-1","1:17.00.0006-2","1:17.00.0007-1","1:17.00.0008-1","1:18.00.0001-1","1:18.00.0002-1","1:18.00.0003-1","1:18.00.0003-2","1:18.00.0004-1"]},{"source":"osv","ecosystem":"Ubuntu:16.04:LTS","package":"psqlodbc","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:09.03.0300-1"]},{"source":"osv","ecosystem":"Ubuntu:18.04:LTS","package":"psqlodbc","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:09.06.0410-1","1:10.00.0000-1","1:10.01.0000-1"]},{"source":"osv","ecosystem":"Ubuntu:20.04:LTS","package":"psqlodbc","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:11.00.0000-1","1:12.00.0000-1","1:12.01.0000-1"]},{"source":"osv","ecosystem":"Ubuntu:22.04:LTS","package":"psqlodbc","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:13.00.0000-1","1:13.02.0000-1","1:13.02.0000-2"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"psqlodbc","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:15.00.0000-1","1:16.00.0000-1"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"psqlodbc","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:17.00.0007-1","1:18.00.0001-1","1:18.00.0002-1"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"psqlodbc","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1:17.00.0006-2","1:17.00.0007-1"]},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"psqlODBC","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"18.00.0005-1.1"}]}]},{"source":"osv","ecosystem":"openSUSE:Leap 16.0","package":"psqlODBC","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"18.00.0005-bp160.1.1"}]}]}],"products":[{"vendor":"postgresql","product":"psqlodbc"}],"references":[{"url":"https://github.com/postgresql-interfaces/psqlodbc/security/advisories/GHSA-cmfx-rm3r-p2jr","tags":["vendor-advisory","advisory","report"]},{"url":"https://docs.bell-sw.com/security/cves/CVE-2026-109448","tags":["advisory"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/109xxx/CVE-2026-109448.json","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-109448","tags":["advisory"]},{"url":"https://github.com/postgresql-interfaces/psqlodbc","tags":["package"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-109448","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-109448","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-109448","tags":["report"]},{"url":"","tags":["advisory"]},{"url":"https://www.suse.com/security/cve/CVE-2026-109448","tags":["web"]},{"url":"https://bugzilla.suse.com/1285073","tags":["report"]}],"sources":{"cve":[{"id":"CVE-2026-109448","title":"psqlODBC SQLBindParameter heap memory corruption when binding more than 32767 parameters","description":"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.","status":"published","published":"2026-10-12T17:42:59.581Z","modified":"2026-10-16T17:48:46.624Z","cvss":[{"version":"3.1","score":5.9,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"medium","assessor":"cna"}],"cwes":["CWE-190","CWE-124"],"updated_at":"2026-11-02T14:20:11.581788Z"}],"euvd":[{"id":"EUVD-2026-97731","description":"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.","status":"published","published":"2026-10-12T17:42:59Z","modified":"2026-10-16T17:48:46Z","cvss":[{"version":"3.1","score":5.9,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"medium"}],"updated_at":"2026-11-02T17:00:04.331134Z"}],"nvd":[{"id":"CVE-2026-109448","description":"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.","status":"published","published":"2026-10-12T18:17:22.633Z","modified":"2026-10-16T18:17:30.94Z","cvss":[{"version":"3.1","score":5.9,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"medium","assessor":"secondary"}],"cwes":["CWE-124","CWE-190"],"updated_at":"2026-11-02T14:12:56.310333Z"}],"osv":[{"id":"BELL-CVE-2026-109448","status":"published","published":"2026-10-13T06:05:51.239034Z","modified":"2026-10-17T07:15:04.030890163Z","cvss":[{"version":"3.1","score":5.9,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"medium"}],"updated_at":"2026-11-02T15:28:23.037038Z"},{"id":"CVE-2026-109448","title":"psqlODBC SQLBindParameter heap memory corruption when binding more than 32767 parameters","description":"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.","status":"published","published":"2026-10-12T17:42:59.581Z","modified":"2026-10-28T02:30:55.355886917Z","cvss":[{"version":"3.1","score":5.9,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"medium"}],"cwes":["CWE-124","CWE-190"],"updated_at":"2026-11-02T15:44:55.279797Z"},{"id":"DEBIAN-CVE-2026-109448","description":"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.","status":"published","published":"2026-10-12T18:17:22.633Z","modified":"2026-10-23T17:47:28.628178292Z","cvss":[{"version":"3.1","score":5.9,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"medium"}],"updated_at":"2026-11-02T15:45:49.381767Z"},{"id":"UBUNTU-CVE-2026-109448","description":"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.","status":"published","published":"2026-10-12T18:17:00Z","modified":"2026-10-17T12:59:49.27277411Z","cvss":[{"version":"3.1","score":5.9,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"medium"}],"updated_at":"2026-11-02T16:55:59.130573Z"},{"id":"openSUSE-SU-2026:12135-1","title":"psqlODBC-18.00.0005-1.1 on GA media","description":"These are all security issues fixed in the psqlODBC-18.00.0005-1.1 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2026-10-14T00:00:00Z","modified":"2026-10-15T17:23:13.070750305Z","updated_at":"2026-11-02T16:58:40.245664Z"},{"id":"openSUSE-SU-2026:22122-1","title":"Security update for psqlODBC","description":"This update for psqlODBC fixes the following issues:\n\nChanges in psqlODBC:\n\nUpdate to 18.00.0005:\n\n  * https://odbc.postgresql.org/docs/release.html\n  * Fix heap memory corruption when an application binds more than\n    32767 parameters on a single statement. SQLBindParameter now\n    rejects parameter numbers outside 1..32767 with SQLSTATE 07009\n    (CVE-2026-109448, bsc#1285073).\n  * Fix the placeholder cast being truncated from parameter 1000\n    on, which failed with 'type \"timestam\" does not exist'.\n  * Report the largest column size instead of SQL_NO_TOTAL (-4) as\n    COLUMN_SIZE for bytea in SQLGetTypeInfo, which broke bytea\n    parameters through MSDASQL.\n\n- Changes in 18.00.0004:\n\n  * Fix the result-conversions regression test on big-endian\n    systems.\n\n- Changes in 18.00.0003:\n\n  * Report SQLSTATE 22003 for out-of-range integer conversions\n    instead of silently returning the wrapped low bits.\n  * Fix statement level rollback (Protocol=7.4-2) discarding the\n    whole transaction on a syntax error.\n  * Do not wrap internal queries in a savepoint at\n    rollback-on-error level 0 (Protocol=7.4-0), which lost\n    transactions on servers without SAVEPOINT support.\n  * Redact the database password (ODBC PWD and libpq pqopt\n    password) in debug logs.\n  * Fix hang on COPY ... FROM STDIN / TO STDOUT: report it as\n    unsupported and keep the connection usable.\n  * Fix 'infinity'/'-infinity' dates being silently returned as\n    today's date.\n  * Document the connection string escaping rules.\n\n- Changes in 18.00.0002:\n\n  * Use a signed type for the error status.\n  * Redact sensitive connection parameters in the driver logs.\n  * Fix double free / heap corruption during SQLDisconnect\n    cleanup.\n  * Clear PGresults from per-query rollback.\n  * Validate UTF-16 surrogate pairs before combining them.\n  * Pass SQLSetDescRec field values correctly.\n  * Avoid reading before leading string literals.\n  * Detach freed application descriptors from statements.\n  * Reject invalid SQLPutData lengths.\n  * Reject overlong cursor names.\n  * Fix version reporting.\n  * Handle ARD bookmark allocation failure.\n  * Validate percent escapes before decoding connection string\n    values.\n  * Avoid reading past the end of conn_settings.\n  * Fix stack buffer overflow in getPrecisionPart().\n  * Fix SQLPrimaryKeys to exclude INCLUDE columns from the result.\n\n- Changes in 18.00.0000, 18.00.0001 and 17.00.0010:\n\n  * No code changes from 17.00.0009.\n\n- Changes in 17.00.0009:\n\n  * Fix the test suite for PostgreSQL 19, where\n    standard_conforming_strings is always on.\n  * Upgrade the GitHub Actions workflow: use prebuilt PostgreSQL\n    binaries, parallel matrix builds and a separate release job.\n\n- Update to 17.00.0008:\n  * https://odbc.postgresql.org/docs/release.html\n","status":"published","published":"2026-10-16T20:40:51Z","modified":"2026-10-19T17:23:15.394889609Z","updated_at":"2026-11-02T16:58:42.426393Z"}]}}
