CVE-2026-93018
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
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->read() and then fetching its pixels or converting it to RGB discloses process heap memory.
Attack profile
How easy it is to exploit
- Attack vector
- Local
- Complexity
- Low
- Privileges needed
- None
- User interaction
- Required
What an attacker can affect
- Confidentiality
- High
- Integrity
- None
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
5.5
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
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->read() and then fetching its pixels or converting it to RGB discloses process heap memory.
- Record
CVE-2026-93018- CVSS 3.1
- 5.5 Medium
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N - Weakness
- CWE-908, CWE-193
- Updated
- 2026-11-02
EUVDEUVD-2026-82926
5.5
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->read() and then fetching its pixels or converting it to RGB discloses process heap memory.
- Record
EUVD-2026-82926- CVSS 3.1
- 5.5 Medium
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N - Updated
- 2026-11-02
NVD
5.5
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->read() and then fetching its pixels or converting it to RGB discloses process heap memory.
- Record
CVE-2026-93018- CVSS 3.1
- 5.5 Medium
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N - Weakness
- CWE-193, CWE-908
- Updated
- 2026-11-02
OSV
5.5
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
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->read() and then fetching its pixels or converting it to RGB discloses process heap memory.
- Record
CVE-2026-93018- CVSS 3.1
- 5.5 Medium
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N - Weakness
- CWE-193, CWE-908
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-93018
5.5
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->read() and then fetching its pixels or converting it to RGB discloses process heap memory.
- Record
DEBIAN-CVE-2026-93018- CVSS 3.1
- 5.5 Medium
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N - Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-93018
5.5
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->read() and then fetching its pixels or converting it to RGB discloses process heap memory.
- Record
UBUNTU-CVE-2026-93018- CVSS 3.1
- 5.5 Medium
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N - Updated
- 2026-11-02
OSVMGASA-2026-0500 No score
Updated perl-Imager package fixes security vulnerabilities
Buffer read underflows on 32-bit size_t systems decoding EXIF data. (CVE-2026-73638) Palette off-by-one discloses uninitialized heap memory. (CVE-2026-93018) TGA reader: signed colourmaplength causes process-killing allocator abort. (CVE-2026-93019) Unvalidated raw_datachannels can cause incorrect memory allocations. (CVE-2026-102504) getsamples(... type => "float") called on a paletted image allocated buffer overflow. (CVE-2026-102505)
- Record
MGASA-2026-0500- Updated
- 2026-11-02
Affected packages
| Package | Affected | Fixed |
|---|---|---|
libimager-perlDebian:12 |
All versions, plus listed versions 1.019+dfsg-11.019+dfsg-21.020+dfsg-11.022+dfsg-11.023+dfsg-1 Show 14 moreShow less1.024+dfsg-11.024+dfsg-21.025+dfsg-11.027+dfsg-11.028+dfsg-11.029+dfsg-11.030+dfsg-11.031+dfsg-11.032+dfsg-11.033+dfsg-11.034+dfsg-11.034+dfsg-21.035+dfsg-11.036+dfsg-1 |
None known |
libimager-perlDebian:13 |
All versions, plus listed versions 1.027+dfsg-11.028+dfsg-11.029+dfsg-11.030+dfsg-11.031+dfsg-1 Show 6 moreShow less1.032+dfsg-11.033+dfsg-11.034+dfsg-11.034+dfsg-21.035+dfsg-11.036+dfsg-1 |
None known |
libimager-perlDebian:14 |
before 1.036+dfsg-1, plus listed versions 1.027+dfsg-11.028+dfsg-11.029+dfsg-11.030+dfsg-11.031+dfsg-1 Show 5 moreShow less1.032+dfsg-11.033+dfsg-11.034+dfsg-11.034+dfsg-21.035+dfsg-1 |
1.036+dfsg-1 |
perl-ImagerMageia:10 From an advisory covering 5 CVEs |
before 1.37.0-1.mga10 | 1.37.0-1.mga10 |
libimager-perlUbuntu:16.04:LTS |
All versions, plus listed versions 1.003+dfsg-11.004+dfsg-11.004+dfsg-1build1 |
None known |
libimager-perlUbuntu:18.04:LTS |
All versions, plus listed versions 1.005+dfsg-2build11.006+dfsg-1 |
None known |
libimager-perlUbuntu:20.04:LTS |
All versions, plus listed versions 1.011+dfsg-11.011+dfsg-1build1 |
None known |
libimager-perlUbuntu:22.04:LTS |
All versions, plus listed versions 1.012+dfsg-1build11.012+dfsg-21.012+dfsg-2build1 |
None known |
libimager-perlUbuntu:24.04:LTS |
All versions, plus listed versions 1.019+dfsg-21.020+dfsg-11.022+dfsg-11.023+dfsg-11.023+dfsg-1build11.023+dfsg-1build2 |
None known |
libimager-perlUbuntu:26.10 |
All versions, plus listed versions 1.029+dfsg-11.031+dfsg-11.033+dfsg-11.035+dfsg-1 |
None known |
libimager-perlUbuntu:26.04:LTS |
All versions, plus listed versions 1.027+dfsg-11.029+dfsg-1 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | ||
| first indexed | CVE List, EUVD, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-93018 is a medium vulnerability (CVSS 5.5) in libimager-perl, published September 18, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.18%, the 7th percentile. Fixed in libimager-perl 1.036+dfsg-1.
References
github.com/tonycoz/imager/security/advisories/GHSA-j7v7-cm4g-vrgf
github.com/tonycoz/imager/commit/dcf0a52e2732399d42ab44d98af6934658d068ee.patch
metacpan.org/release/TONYC/Imager-1.036/changes
openwall.com/lists/oss-security/2026/09/18/8
cpan.org/modules
github.com/CVEProject/cvelistV5/tree/main/cves/2026/93xxx/CVE-2026-93018.json
Show 21 moreShow less
nvd.nist.gov/vuln/detail/CVE-2026-93018
github.com/tonycoz/imager
security-tracker.debian.org/tracker/CVE-2026-93018
advisories.mageia.org/MGASA-2026-0500.html
bugs.mageia.org/show_bug.cgi?id=36330
openwall.com/lists/oss-security/2026/09/17/5
github.com/tonycoz/imager/security/advisories/GHSA-j47j-8w8p-3mmc
github.com/tonycoz/imager/issues/568
bugs.debian.org/cgi-bin/bugreport.cgi?bug=1144226
metacpan.org/release/TONYC/Imager-1.035/changes
lists.fedoraproject.org/archives/list/[email protected]/message/M2IGAORFTDV6NM2L2NZCBWRWLAWHXUHK
lists.security.metacpan.org/cve-announce/msg/43654795
lists.security.metacpan.org/cve-announce/msg/43654761
github.com/tonycoz/imager/security/advisories/GHSA-p4vw-rc54-p2c2
openwall.com/lists/oss-security/2026/10/01/9
github.com/tonycoz/imager/security/advisories/GHSA-g549-r73g-x7x6
metacpan.org/release/TONYC/Imager-1.037/changes
openwall.com/lists/oss-security/2026/10/01/10
github.com/tonycoz/imager/security/advisories/GHSA-4rx6-cgv3-fmxp
ubuntu.com/security/CVE-2026-93018
cve.org/CVERecord?id=CVE-2026-93018