---
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.


  The palette is allocated uninitialised, and only the entries a reader add…
summary: >-
  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 add…
severity: medium
cvss: 5.5
cvssVector: 'CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N'
cwe:
  - CWE-193
  - CWE-908
product: Imager
affected:
  - Imager < 1.036
published: '2026-09-18'
updated: '2026-09-22'
sourceUpdated: '2026-09-22T19:16:57.277'
source: NVD
sourceUrl: 'https://nvd.nist.gov/vuln/detail/CVE-2026-93018'
references:
  - url: >-
      https://github.com/tonycoz/imager/commit/dcf0a52e2732399d42ab44d98af6934658d068ee.patch
    label: 9b29abf9-4ab0-4765-b253-1875cd9b441e
  - url: 'https://github.com/tonycoz/imager/security/advisories/GHSA-j7v7-cm4g-vrgf'
    label: 9b29abf9-4ab0-4765-b253-1875cd9b441e
  - url: 'https://metacpan.org/release/TONYC/Imager-1.036/changes'
    label: 9b29abf9-4ab0-4765-b253-1875cd9b441e
  - url: 'http://www.openwall.com/lists/oss-security/2026/09/18/8'
    label: af854a3a-2127-422b-91ae-364da2661108
tags:
  - nvd
  - cve.org
epss: 0.00176
epssPercentile: 0.06224
ssvc:
  exploitation: none
  automatable: 'no'
  technicalImpact: partial
  timestamp: '2026-09-22T18:14:30.766435Z'
ingestedAt: '2026-09-18T14:43:13.055Z'
---

## Overview

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.

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
