{"id":"CVE-2026-78183","aliases":["EUVD-2026-64665","GHSA-6mq2-jf7v-pvjx","GHSA-785p-fw3v-r822","UBUNTU-CVE-2026-78183","openSUSE-SU-2026:11722-1"],"status":"published","title":"DBD::Pg version 3.21.0 for Perl has a heap out-of-bounds write in quote_float","description":"DBD::Pg version 3.21.0 for Perl has a heap out-of-bounds write in quote_float.\n\nquote_float() allocates the length of the string + 1, which is the size of the bare numeric symbol plus NULL.  But for special literals NaN, Inf, +Inf, -Inf, Infinity, +Infinity, -Infinity it emits the literal surrounded by quotes plus NULL, which is length + 3 bytes. Every recognised literal (case-insensitive) overflows by 2 bytes, a single quote and a NULL.\n\nThis can be reached by the $dbh-\u003equote method, for example\n\n    $dbh-\u003equote( \"Infinity\", DBI::SQL_NUMERIC ).\n\nThis regression was introduced in 3.21.0 by the quote.c rewrite.","severity":{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"adp","from":"cve"},"epss":{"day":"2026-11-10","score":0.00671,"percentile":0.52366,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-787"],"published":"2026-08-23T19:53:18Z","modified":"2026-11-09T12:52:34Z","fixes":[{"ecosystem":"openSUSE:Tumbleweed","package":"perl-DBD-Pg","fixed_in":["3.21.2-1.1"],"sources":["osv"]}],"affected":[{"source":"osv","ecosystem":"Ubuntu:18.04:LTS","package":"libdbd-pg-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["3.6.2-2build1","3.7.0-1"]},{"source":"osv","ecosystem":"Ubuntu:20.04:LTS","package":"libdbd-pg-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["3.9.1-1","3.9.1-1build1","3.10.0-2","3.10.3-1","3.10.4-1"]},{"source":"osv","ecosystem":"Ubuntu:22.04:LTS","package":"libdbd-pg-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["3.14.2-1build1","3.15.0-2","3.15.1-1"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"libdbd-pg-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["3.18.0-4","3.20.2-1","3.20.2-1build1"]},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"perl-DBD-Pg","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.21.2-1.1"}]}]}],"references":[{"url":"https://github.com/bucardo/dbdpg/security/advisories/GHSA-785p-fw3v-r822","tags":["vendor-advisory","advisory","report"]},{"url":"https://metacpan.org/release/TURNSTEP/DBD-Pg-3.21.1/source/Changes","tags":["release-notes","advisory"]},{"url":"https://github.com/bucardo/dbdpg/commit/6d6f47ed2403cda55c82b1bad56e388ba7390065.patch","tags":["patch","fix"]},{"url":"https://github.com/bucardo/dbdpg/commit/adacf1de872326a465e13f9e4281a674ebcd227e","tags":["related","fix"]},{"url":"http://www.openwall.com/lists/oss-security/2026/08/23/5","tags":["web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-78183","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-6mq2-jf7v-pvjx"},{"url":"https://cpan.org/modules","tags":["web"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/78xxx/CVE-2026-78183.json","tags":["advisory"]},{"url":"https://github.com/bucardo/dbdpg","tags":["package"]},{"url":"https://ubuntu.com/security/CVE-2026-78183","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-78183","tags":["report"]},{"url":"https://lists.security.metacpan.org/cve-announce/msg/42931839/","tags":["report"]},{"url":"","tags":["advisory"]},{"url":"https://www.suse.com/security/cve/CVE-2026-78183","tags":["web"]}],"sources":{"cve":[{"id":"CVE-2026-78183","title":"DBD::Pg version 3.21.0 for Perl has a heap out-of-bounds write in quote_float","description":"DBD::Pg version 3.21.0 for Perl has a heap out-of-bounds write in quote_float.\n\nquote_float() allocates the length of the string + 1, which is the size of the bare numeric symbol plus NULL.  But for special literals NaN, Inf, +Inf, -Inf, Infinity, +Infinity, -Infinity it emits the literal surrounded by quotes plus NULL, which is length + 3 bytes. Every recognised literal (case-insensitive) overflows by 2 bytes, a single quote and a NULL.\n\nThis can be reached by the $dbh-\u003equote method, for example\n\n    $dbh-\u003equote( \"Infinity\", DBI::SQL_NUMERIC ).\n\nThis regression was introduced in 3.21.0 by the quote.c rewrite.","status":"published","published":"2026-08-23T19:53:18.185Z","modified":"2026-08-25T19:32:39.393Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"adp"}],"cwes":["CWE-787"],"updated_at":"2026-11-02T13:34:48.658051Z"}],"euvd":[{"id":"EUVD-2026-64665","description":"DBD::Pg version 3.21.0 for Perl has a heap out-of-bounds write in quote_float.\n\nquote_float() allocates the length of the string + 1, which is the size of the bare numeric symbol plus NULL.  But for special literals NaN, Inf, +Inf, -Inf, Infinity, +Infinity, -Infinity it emits the literal surrounded by quotes plus NULL, which is length + 3 bytes. Every recognised literal (case-insensitive) overflows by 2 bytes, a single quote and a NULL.\n\nThis can be reached by the $dbh-\u003equote method, for example\n\n    $dbh-\u003equote( \"Infinity\", DBI::SQL_NUMERIC ).\n\nThis regression was introduced in 3.21.0 by the quote.c rewrite.","status":"published","published":"2026-08-23T19:53:18Z","modified":"2026-08-25T19:32:39Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T18:01:31.718552Z"}],"ghsa":[{"id":"GHSA-6mq2-jf7v-pvjx","title":"DBD::Pg version 3.21.0 for Perl has a heap out-of-bounds write in quote_float.\n\nquote_float()...","description":"DBD::Pg version 3.21.0 for Perl has a heap out-of-bounds write in quote_float.\n\nquote_float() allocates the length of the string + 1, which is the size of the bare numeric symbol plus NULL.  But for special literals NaN, Inf, +Inf, -Inf, Infinity, +Infinity, -Infinity it emits the literal surrounded by quotes plus NULL, which is length + 3 bytes. Every recognised literal (case-insensitive) overflows by 2 bytes, a single quote and a NULL.\n\nThis can be reached by the $dbh-\u003equote method, for example\n\n    $dbh-\u003equote( \"Infinity\", DBI::SQL_NUMERIC ).\n\nThis regression was introduced in 3.21.0 by the quote.c rewrite.","status":"published","published":"2026-08-23T21:31:00Z","modified":"2026-08-25T21:31:22Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-787"],"updated_at":"2026-11-02T15:10:58.645101Z"}],"nvd":[{"id":"CVE-2026-78183","description":"DBD::Pg version 3.21.0 for Perl has a heap out-of-bounds write in quote_float.\n\nquote_float() allocates the length of the string + 1, which is the size of the bare numeric symbol plus NULL.  But for special literals NaN, Inf, +Inf, -Inf, Infinity, +Infinity, -Infinity it emits the literal surrounded by quotes plus NULL, which is length + 3 bytes. Every recognised literal (case-insensitive) overflows by 2 bytes, a single quote and a NULL.\n\nThis can be reached by the $dbh-\u003equote method, for example\n\n    $dbh-\u003equote( \"Infinity\", DBI::SQL_NUMERIC ).\n\nThis regression was introduced in 3.21.0 by the quote.c rewrite.","status":"published","published":"2026-08-23T20:16:50.55Z","modified":"2026-10-14T13:10:00.187Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"secondary"}],"cwes":["CWE-787"],"updated_at":"2026-11-02T14:12:41.018848Z"}],"osv":[{"id":"CVE-2026-78183","title":"DBD::Pg version 3.21.0 for Perl has a heap out-of-bounds write in quote_float","description":"DBD::Pg version 3.21.0 for Perl has a heap out-of-bounds write in quote_float.\n\nquote_float() allocates the length of the string + 1, which is the size of the bare numeric symbol plus NULL.  But for special literals NaN, Inf, +Inf, -Inf, Infinity, +Infinity, -Infinity it emits the literal surrounded by quotes plus NULL, which is length + 3 bytes. Every recognised literal (case-insensitive) overflows by 2 bytes, a single quote and a NULL.\n\nThis can be reached by the $dbh-\u003equote method, for example\n\n    $dbh-\u003equote( \"Infinity\", DBI::SQL_NUMERIC ).\n\nThis regression was introduced in 3.21.0 by the quote.c rewrite.","status":"published","published":"2026-08-23T19:53:18.185Z","modified":"2026-10-28T11:18:01.397966871Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"cwes":["CWE-787"],"updated_at":"2026-11-02T15:45:17.44708Z"},{"id":"UBUNTU-CVE-2026-78183","description":"DBD::Pg version 3.21.0 for Perl has a heap out-of-bounds write in quote_float. quote_float() allocates the length of the string + 1, which is the size of the bare numeric symbol plus NULL.  But for special literals NaN, Inf, +Inf, -Inf, Infinity, +Infinity, -Infinity it emits the literal surrounded by quotes plus NULL, which is length + 3 bytes. Every recognised literal (case-insensitive) overflows by 2 bytes, a single quote and a NULL. This can be reached by the $dbh-\u003equote method, for example     $dbh-\u003equote( \"Infinity\", DBI::SQL_NUMERIC ). This regression was introduced in 3.21.0 by the quote.c rewrite.","status":"published","published":"2026-08-23T20:16:00Z","modified":"2026-11-09T12:52:34.529945457Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-09T13:26:05.568602Z"},{"id":"openSUSE-SU-2026:11722-1","title":"perl-DBD-Pg-3.21.2-1.1 on GA media","description":"These are all security issues fixed in the perl-DBD-Pg-3.21.2-1.1 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2026-09-08T00:00:00Z","modified":"2026-09-09T10:00:04.842861392Z","updated_at":"2026-11-02T16:58:39.516824Z"}]}}
