Imager::File::PNG versions from 1.003 before 1.004 for Perl write past the end of the row buffer reading a PNG with a tRNS transparency chunk in read_direct8. With a tRNS chunk, read_direct8() adds an alpha channel to the image it creates but still sizes the row buffer from the original channel count. libpng expands the transparency into that extra channel, so png_read_row() fills one channel more than the buffer holds, at one byte per sample, and writes width bytes past the end of the allocation. Palette images go to read_paletted() and 16-bit images to read_direct16(), which sizes its buffer from png_get_rowbytes() and allocates enough for the expanded row. The same reader ships bundled in the Imager distribution. Reading an attacker-supplied PNG through Imager->read() corrupts the heap, which can crash the process.
History

Tue, 22 Sep 2026 19:30:00 +0000

Type Values Removed Values Added
Metrics cvssV3_1

{'score': 9.1, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H'}

ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Fri, 18 Sep 2026 21:30:00 +0000

Type Values Removed Values Added
First Time appeared Tonyc
Tonyc imager::file::png
Vendors & Products Tonyc
Tonyc imager::file::png

Fri, 18 Sep 2026 01:30:00 +0000

Type Values Removed Values Added
References

Thu, 17 Sep 2026 21:30:00 +0000

Type Values Removed Values Added
Description Imager::File::PNG versions from 1.003 before 1.004 for Perl write past the end of the row buffer reading a PNG with a tRNS transparency chunk in read_direct8. With a tRNS chunk, read_direct8() adds an alpha channel to the image it creates but still sizes the row buffer from the original channel count. libpng expands the transparency into that extra channel, so png_read_row() fills one channel more than the buffer holds, at one byte per sample, and writes width bytes past the end of the allocation. Palette images go to read_paletted() and 16-bit images to read_direct16(), which sizes its buffer from png_get_rowbytes() and allocates enough for the expanded row. The same reader ships bundled in the Imager distribution. Reading an attacker-supplied PNG through Imager->read() corrupts the heap, which can crash the process.
Title Imager::File::PNG versions from 1.003 before 1.004 for Perl write past the end of the row buffer reading a PNG with a tRNS transparency chunk in read_direct8
Weaknesses CWE-787
References

cve-icon MITRE

Status: PUBLISHED

Assigner: CPANSec

Published: 2026-09-17T21:18:59.207Z

Updated: 2026-09-22T18:27:56.365Z

Reserved: 2026-08-13T12:51:42.912Z

Link: CVE-2026-73639

cve-icon Vulnrichment

Updated: 2026-09-18T00:18:32.862Z

cve-icon NVD

Status : Deferred

Published: 2026-09-17T22:17:03.763

Modified: 2026-09-22T19:16:44.383

Link: CVE-2026-73639

cve-icon Redhat

No data.