Every CVE Search/ Get API key

CVE-2026-73639

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

9.1 CriticalFix available

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.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
High
Integrity
None
Availability
High

Exploit likelihood

0.70%Up 0.5 points since Sep 18, 2026
90%50%10%1%

What each source reports

CVE List Score used 9.1

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

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.

Record
CVE-2026-73639
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
Weakness
CWE-787
Updated
2026-11-02
EUVDEUVD-2026-82492 9.1

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.

Record
EUVD-2026-82492
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
Updated
2026-11-02
NVD 9.1

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.

Record
CVE-2026-73639
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
Weakness
CWE-787
Updated
2026-11-02
OSV 9.1

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

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.

Record
CVE-2026-73639
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
Weakness
CWE-787
Updated
2026-11-02
OSVDEBIAN-CVE-2026-73639 9.1

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.

Record
DEBIAN-CVE-2026-73639
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
Updated
2026-11-02
OSVUBUNTU-CVE-2026-73639 9.1

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.

Record
UBUNTU-CVE-2026-73639
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
Updated
2026-11-02

Affected packages

Affected packages
PackageAffectedFixed
libimager-perl
Debian: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 less
1.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-perl
Debian: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 less
1.032+dfsg-11.033+dfsg-11.034+dfsg-11.034+dfsg-21.035+dfsg-11.036+dfsg-1
None known
libimager-perl
Debian:14
before 1.035+dfsg-1, plus listed versions
1.027+dfsg-11.028+dfsg-11.029+dfsg-11.030+dfsg-11.031+dfsg-1
Show 4 moreShow less
1.032+dfsg-11.033+dfsg-11.034+dfsg-11.034+dfsg-2
1.035+dfsg-1
libimager-perl
Ubuntu:16.04:LTS
All versions, plus listed versions
1.003+dfsg-11.004+dfsg-11.004+dfsg-1build1
None known
libimager-perl
Ubuntu:18.04:LTS
All versions, plus listed versions
1.005+dfsg-2build11.006+dfsg-1
None known
libimager-perl
Ubuntu:20.04:LTS
All versions, plus listed versions
1.011+dfsg-11.011+dfsg-1build1
None known
libimager-perl
Ubuntu:22.04:LTS
All versions, plus listed versions
1.012+dfsg-1build11.012+dfsg-21.012+dfsg-2build1
None known
libimager-perl
Ubuntu: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-perl
Ubuntu:26.10
All versions, plus listed versions
1.029+dfsg-11.031+dfsg-11.033+dfsg-11.035+dfsg-1
None known
libimager-perl
Ubuntu:26.04:LTS
All versions, plus listed versions
1.027+dfsg-11.029+dfsg-1
None known

History

History
RecordedChangedSources
first indexedCVE List, EUVD, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-73639 is a critical vulnerability (CVSS 9.1) in libimager-perl, published September 17, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.70%, the 53rd percentile. Fixed in libimager-perl 1.035+dfsg-1.

References

Show 7 moreShow less
MoveEnter Open