{"id":"CVE-2026-93018","aliases":["DEBIAN-CVE-2026-93018","EUVD-2026-82926","GHSA-j7v7-cm4g-vrgf","MGASA-2026-0500","UBUNTU-CVE-2026-93018"],"status":"published","title":"Imager versions before 1.036 for Perl disclose uninitialised heap memory reading a paletted image with pixel indexes past its colour map in i_gpix_p and i_glin_p","description":"Imager versions before 1.036 for Perl disclose uninitialised heap memory reading a paletted image with pixel indexes past its colour map in i_gpix_p and i_glin_p.\n\nThe palette is allocated uninitialised, and only the entries a reader adds count as populated. The TGA reader stores pixel indexes without checking them against the colour map. i_gpix_p() rejects only an index greater than the count, so an index equal to it reads the first unpopulated entry, and getpixel() returns it.\n\ni_glin_p() skips any index at or beyond the count without writing that pixel to the caller's buffer. The palette-to-RGB conversion reads each row through an uninitialised buffer, so those pixels of the converted image hold prior heap contents.\n\nReading an attacker-supplied image through Imager-\u003eread() and then fetching its pixels or converting it to RGB discloses process heap memory.","severity":{"version":"3.1","score":5.5,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium","assessor":"adp","from":"cve"},"epss":{"day":"2026-11-10","score":0.00176,"percentile":0.07114,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-193","CWE-908"],"published":"2026-09-18T13:57:37Z","modified":"2026-10-28T11:09:52Z","fixes":[{"ecosystem":"Debian:14","package":"libimager-perl","fixed_in":["1.036+dfsg-1"],"sources":["osv"]}],"affected":[{"source":"osv","ecosystem":"Debian:12","package":"libimager-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.019+dfsg-1","1.019+dfsg-2","1.020+dfsg-1","1.022+dfsg-1","1.023+dfsg-1","1.024+dfsg-1","1.024+dfsg-2","1.025+dfsg-1","1.027+dfsg-1","1.028+dfsg-1","1.029+dfsg-1","1.030+dfsg-1","1.031+dfsg-1","1.032+dfsg-1","1.033+dfsg-1","1.034+dfsg-1","1.034+dfsg-2","1.035+dfsg-1","1.036+dfsg-1"]},{"source":"osv","ecosystem":"Debian:13","package":"libimager-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.027+dfsg-1","1.028+dfsg-1","1.029+dfsg-1","1.030+dfsg-1","1.031+dfsg-1","1.032+dfsg-1","1.033+dfsg-1","1.034+dfsg-1","1.034+dfsg-2","1.035+dfsg-1","1.036+dfsg-1"]},{"source":"osv","ecosystem":"Debian:14","package":"libimager-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.036+dfsg-1"}]}],"versions":["1.027+dfsg-1","1.028+dfsg-1","1.029+dfsg-1","1.030+dfsg-1","1.031+dfsg-1","1.032+dfsg-1","1.033+dfsg-1","1.034+dfsg-1","1.034+dfsg-2","1.035+dfsg-1"]},{"source":"osv","ecosystem":"Mageia:10","package":"perl-Imager","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.37.0-1.mga10"}]}],"bundled":5},{"source":"osv","ecosystem":"Ubuntu:16.04:LTS","package":"libimager-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.003+dfsg-1","1.004+dfsg-1","1.004+dfsg-1build1"]},{"source":"osv","ecosystem":"Ubuntu:18.04:LTS","package":"libimager-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.005+dfsg-2build1","1.006+dfsg-1"]},{"source":"osv","ecosystem":"Ubuntu:20.04:LTS","package":"libimager-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.011+dfsg-1","1.011+dfsg-1build1"]},{"source":"osv","ecosystem":"Ubuntu:22.04:LTS","package":"libimager-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.012+dfsg-1build1","1.012+dfsg-2","1.012+dfsg-2build1"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"libimager-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.019+dfsg-2","1.020+dfsg-1","1.022+dfsg-1","1.023+dfsg-1","1.023+dfsg-1build1","1.023+dfsg-1build2"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"libimager-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.029+dfsg-1","1.031+dfsg-1","1.033+dfsg-1","1.035+dfsg-1"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"libimager-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["1.027+dfsg-1","1.029+dfsg-1"]}],"references":[{"url":"https://github.com/tonycoz/imager/security/advisories/GHSA-j7v7-cm4g-vrgf","tags":["vendor-advisory","advisory","report"]},{"url":"https://github.com/tonycoz/imager/commit/dcf0a52e2732399d42ab44d98af6934658d068ee.patch","tags":["patch","fix","report"]},{"url":"https://metacpan.org/release/TONYC/Imager-1.036/changes","tags":["release-notes","advisory","report"]},{"url":"http://www.openwall.com/lists/oss-security/2026/09/18/8","tags":["web","report"]},{"url":"https://cpan.org/modules","tags":["web"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/93xxx/CVE-2026-93018.json","tags":["advisory"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-93018","tags":["advisory"]},{"url":"https://github.com/tonycoz/imager","tags":["package"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-93018","tags":["advisory"]},{"url":"https://advisories.mageia.org/MGASA-2026-0500.html","tags":["advisory"]},{"url":"https://bugs.mageia.org/show_bug.cgi?id=36330","tags":["report"]},{"url":"https://www.openwall.com/lists/oss-security/2026/09/17/5","tags":["web"]},{"url":"https://github.com/tonycoz/imager/security/advisories/GHSA-j47j-8w8p-3mmc","tags":["advisory"]},{"url":"https://github.com/tonycoz/imager/issues/568","tags":["report"]},{"url":"https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1144226","tags":["report"]},{"url":"https://metacpan.org/release/TONYC/Imager-1.035/changes","tags":["web"]},{"url":"https://lists.fedoraproject.org/archives/list/package-announce@lists.fedoraproject.org/message/M2IGAORFTDV6NM2L2NZCBWRWLAWHXUHK/","tags":["web"]},{"url":"https://lists.security.metacpan.org/cve-announce/msg/43654795/","tags":["web","report"]},{"url":"https://lists.security.metacpan.org/cve-announce/msg/43654761/","tags":["web"]},{"url":"https://github.com/tonycoz/imager/security/advisories/GHSA-p4vw-rc54-p2c2","tags":["advisory"]},{"url":"https://www.openwall.com/lists/oss-security/2026/10/01/9","tags":["web"]},{"url":"https://github.com/tonycoz/imager/security/advisories/GHSA-g549-r73g-x7x6","tags":["advisory"]},{"url":"https://metacpan.org/release/TONYC/Imager-1.037/changes","tags":["web"]},{"url":"https://www.openwall.com/lists/oss-security/2026/10/01/10","tags":["web"]},{"url":"https://github.com/tonycoz/imager/security/advisories/GHSA-4rx6-cgv3-fmxp","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-93018","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-93018","tags":["report"]}],"sources":{"cve":[{"id":"CVE-2026-93018","title":"Imager versions before 1.036 for Perl disclose uninitialised heap memory reading a paletted image with pixel indexes past its colour map in i_gpix_p and i_glin_p","description":"Imager versions before 1.036 for Perl disclose uninitialised heap memory reading a paletted image with pixel indexes past its colour map in i_gpix_p and i_glin_p.\n\nThe palette is allocated uninitialised, and only the entries a reader adds count as populated. The TGA reader stores pixel indexes without checking them against the colour map. i_gpix_p() rejects only an index greater than the count, so an index equal to it reads the first unpopulated entry, and getpixel() returns it.\n\ni_glin_p() skips any index at or beyond the count without writing that pixel to the caller's buffer. The palette-to-RGB conversion reads each row through an uninitialised buffer, so those pixels of the converted image hold prior heap contents.\n\nReading an attacker-supplied image through Imager-\u003eread() and then fetching its pixels or converting it to RGB discloses process heap memory.","status":"published","published":"2026-09-18T13:57:37.837Z","modified":"2026-09-22T18:27:38.61Z","cvss":[{"version":"3.1","score":5.5,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium","assessor":"adp"}],"cwes":["CWE-908","CWE-193"],"updated_at":"2026-11-02T14:19:54.50686Z"}],"euvd":[{"id":"EUVD-2026-82926","description":"Imager versions before 1.036 for Perl disclose uninitialised heap memory reading a paletted image with pixel indexes past its colour map in i_gpix_p and i_glin_p.\n\nThe palette is allocated uninitialised, and only the entries a reader adds count as populated. The TGA reader stores pixel indexes without checking them against the colour map. i_gpix_p() rejects only an index greater than the count, so an index equal to it reads the first unpopulated entry, and getpixel() returns it.\n\ni_glin_p() skips any index at or beyond the count without writing that pixel to the caller's buffer. The palette-to-RGB conversion reads each row through an uninitialised buffer, so those pixels of the converted image hold prior heap contents.\n\nReading an attacker-supplied image through Imager-\u003eread() and then fetching its pixels or converting it to RGB discloses process heap memory.","status":"published","published":"2026-09-18T13:57:37Z","modified":"2026-09-22T18:27:38Z","cvss":[{"version":"3.1","score":5.5,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium"}],"updated_at":"2026-11-02T17:28:02.149692Z"}],"nvd":[{"id":"CVE-2026-93018","description":"Imager versions before 1.036 for Perl disclose uninitialised heap memory reading a paletted image with pixel indexes past its colour map in i_gpix_p and i_glin_p.\n\nThe palette is allocated uninitialised, and only the entries a reader adds count as populated. The TGA reader stores pixel indexes without checking them against the colour map. i_gpix_p() rejects only an index greater than the count, so an index equal to it reads the first unpopulated entry, and getpixel() returns it.\n\ni_glin_p() skips any index at or beyond the count without writing that pixel to the caller's buffer. The palette-to-RGB conversion reads each row through an uninitialised buffer, so those pixels of the converted image hold prior heap contents.\n\nReading an attacker-supplied image through Imager-\u003eread() and then fetching its pixels or converting it to RGB discloses process heap memory.","status":"published","published":"2026-09-18T14:19:04.363Z","modified":"2026-09-22T19:16:57.277Z","cvss":[{"version":"3.1","score":5.5,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium","assessor":"secondary"}],"cwes":["CWE-193","CWE-908"],"updated_at":"2026-11-02T14:12:49.70655Z"}],"osv":[{"id":"CVE-2026-93018","title":"Imager versions before 1.036 for Perl disclose uninitialised heap memory reading a paletted image with pixel indexes past its colour map in i_gpix_p and i_glin_p","description":"Imager versions before 1.036 for Perl disclose uninitialised heap memory reading a paletted image with pixel indexes past its colour map in i_gpix_p and i_glin_p.\n\nThe palette is allocated uninitialised, and only the entries a reader adds count as populated. The TGA reader stores pixel indexes without checking them against the colour map. i_gpix_p() rejects only an index greater than the count, so an index equal to it reads the first unpopulated entry, and getpixel() returns it.\n\ni_glin_p() skips any index at or beyond the count without writing that pixel to the caller's buffer. The palette-to-RGB conversion reads each row through an uninitialised buffer, so those pixels of the converted image hold prior heap contents.\n\nReading an attacker-supplied image through Imager-\u003eread() and then fetching its pixels or converting it to RGB discloses process heap memory.","status":"published","published":"2026-09-18T13:57:37.837Z","modified":"2026-10-28T11:09:52.990318217Z","cvss":[{"version":"3.1","score":5.5,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium"}],"cwes":["CWE-193","CWE-908"],"updated_at":"2026-11-02T15:45:20.588039Z"},{"id":"DEBIAN-CVE-2026-93018","description":"Imager versions before 1.036 for Perl disclose uninitialised heap memory reading a paletted image with pixel indexes past its colour map in i_gpix_p and i_glin_p.  The palette is allocated uninitialised, and only the entries a reader adds count as populated. The TGA reader stores pixel indexes without checking them against the colour map. i_gpix_p() rejects only an index greater than the count, so an index equal to it reads the first unpopulated entry, and getpixel() returns it.  i_glin_p() skips any index at or beyond the count without writing that pixel to the caller's buffer. The palette-to-RGB conversion reads each row through an uninitialised buffer, so those pixels of the converted image hold prior heap contents.  Reading an attacker-supplied image through Imager-\u003eread() and then fetching its pixels or converting it to RGB discloses process heap memory.","status":"published","published":"2026-09-18T14:19:04.363Z","modified":"2026-09-23T09:00:17.421818449Z","cvss":[{"version":"3.1","score":5.5,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium"}],"updated_at":"2026-11-02T15:46:06.846102Z"},{"id":"UBUNTU-CVE-2026-93018","description":"Imager versions before 1.036 for Perl disclose uninitialised heap memory reading a paletted image with pixel indexes past its colour map in i_gpix_p and i_glin_p. The palette is allocated uninitialised, and only the entries a reader adds count as populated. The TGA reader stores pixel indexes without checking them against the colour map. i_gpix_p() rejects only an index greater than the count, so an index equal to it reads the first unpopulated entry, and getpixel() returns it. i_glin_p() skips any index at or beyond the count without writing that pixel to the caller's buffer. The palette-to-RGB conversion reads each row through an uninitialised buffer, so those pixels of the converted image hold prior heap contents. Reading an attacker-supplied image through Imager-\u003eread() and then fetching its pixels or converting it to RGB discloses process heap memory.","status":"published","published":"2026-09-18T14:19:00Z","modified":"2026-10-17T13:01:17.868335234Z","cvss":[{"version":"3.1","score":5.5,"vector":"CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N","level":"medium"}],"updated_at":"2026-11-02T16:57:40.980117Z"},{"id":"MGASA-2026-0500","title":"Updated perl-Imager package fixes security vulnerabilities","description":"Buffer read underflows on 32-bit size_t systems decoding EXIF data.\n(CVE-2026-73638)\nPalette off-by-one discloses uninitialized heap memory. (CVE-2026-93018)\nTGA reader: signed colourmaplength causes process-killing allocator\nabort. (CVE-2026-93019)\nUnvalidated raw_datachannels can cause incorrect memory allocations.\n(CVE-2026-102504)\ngetsamples(... type =\u003e \"float\") called on a paletted image allocated\nbuffer overflow. (CVE-2026-102505)\n","status":"published","published":"2026-10-13T01:20:53Z","modified":"2026-10-13T01:42:51.938639787Z","updated_at":"2026-11-02T15:49:43.795591Z"}]}}
