Where
-Infinity
0

Vendor Risk Score

See how libpng compares to other vendors in security performance

View Risk Score →

Hello, everyone,

This is an out-of-band notice. Unlike previous libpng announcements, this one doesn't coincide with a libpng release, and the disclosure cadence differs from the usual coordinated pattern:

- The fix landed on the libpng18 development branch (commit faf0692468) approximately one month before this announcement. libpng 1.8.0 is in late beta with no tagged release yet, so there is no upstream release version with which to align the disclosure. Downstream consumers building directly from the libpng18 branch have had the fix available since it landed. - The vulnerable code originates in the third-party libpng-apng patch, which is not under upstream libpng control. The patch is applied downstream by Firefox and Thunderbird, as well as several Linux distributions (Gentoo and LFS/BLFS among others). The libpng-apng maintainer, Daisuke Nishikawa, has since released fixed revisions (libpng-1.6.57-apng.patch v2 and libpng-1.6.58-apng.patch); downstream consumers should either update to those (verifying that both upstream commits are included), or backport the upstream commits themselves (see "Related fix" below).

=== CVE-2026-40930 ===

Chunk smuggling in the push-mode APNG parser via unconsumed chunk body

Security advisory: https://github.com/pnggroup/libpng/security/advisories/GHSA-c4v6-gxrq-6g2x

Fix on libpng18: https://github.com/pnggroup/libpng/commit/faf06924688b62d7c1654b5ceddedbde66ffadb4

CVSS 3.1: 5.4 (Medium); CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:L CWE: CWE-436 (Interpretation Conflict) Affected (upstream): libpng 1.8.0 development branch (libpng18) Affected (downstream): libpng-1.6.49-apng.patch through libpng-1.6.57-apng.patch (original v1) on SourceForge Not affected: upstream libpng 1.6.x releases (no APNG support) Fixed (upstream): libpng18 at commit faf0692468 Fixed (downstream): libpng-1.6.57-apng.patch v2 and libpng-1.6.58-apng.patch on SourceForge, released by the libpng-apng maintainer Build-time mitigation: building libpng 1.8 with APNG disabled (i.e., without PNGAPNGSUPPORTED), or building libpng 1.6 without the libpng-apng patch, removes the vulnerable code. No runtime workaround exists for push-mode applications.

Three inter-frame chunk discard paths in the push-mode APNG parser clear the chunk-header flag without consuming the chunk body and CRC, allowing attacker-controlled bytes inside a discarded chunk to be reinterpreted as a fresh chunk header on the next call to pngprocessdata.

Impact depends on the application's CRC handling:

- Default configuration: libpng calls pngerror on the resulting CRC mismatch or APNG sequence-number violation, and the image fails to load. Impact is denial of service. - Relaxed configuration (pngsetcrcaction with PNGCRCQUIETUSE or PNGCRCWARNUSE): smuggled bytes reach the APNG sequence counter and the zlib decompressor, and are decoded as frame pixel data. No code execution: zlib output writes into a pre-allocated row buffer. A crafted fake length exceeding the carrier chunk body causes cascading desynchronization beyond the carrier.

Sequential-mode reading (pngreadinfo / pngreadrow / pngreadend) is not affected. Only push-mode (pngprocessdata) is vulnerable, and the Gecko-based browsers (for example) use it.

=== Related fix ===

A sibling defect in the same push-mode fdAT path was reported separately in GitHub issue pnggroup/libpng#854 and fixed on the libpng18 branch in commit 9ec49c2d56. It is distinct from CVE-2026-40930 and is not covered by the advisory above. Downstream consumers of libpng-apng should apply both commits to fully remediate the push-mode fdAT path. Those updating to the fixed libpng-apng revisions instead should verify that both commits are included; otherwise, 9ec49c2d56 must be backported separately.

Related fix on libpng18: https://github.com/pnggroup/libpng/commit/9ec49c2d56cec19107ddc458b648ce224c9697b3

Credits: - Seung Min Shin (CVE-2026-40930 discovery) - Ryo Shimada (GitHub issue pnggroup/libpng#854)

--- Cosmin Truta libpng maintainer

Severity
5.1
Use After Free
AV:L/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N

Last updated 18 August 2026

1 / 3
Source: Ubuntu
First published (updated )

Hello, everyone,

libpng 1.6.57 has been released, fixing a medium-severity use-after-free vulnerability in the chunk setter API, including a long-standing defect in pngsethIST present since at least 1.0.9 and regressions in pngsetPLTE and pngsettRNS introduced in 1.6.56.

Users should either upgrade to libpng 1.6.57 or apply the fixes described below.

=== CVE-2026-34757 ===

Use-after-free in pngsetPLTE, pngsettRNS and pngsethIST leading to corrupted chunk data and potential heap information disclosure

Security advisory: https://github.com/pnggroup/libpng/security/advisories/GHSA-6fr7-g8h7-v645

Fixes: https://github.com/pnggroup/libpng/commit/398cbe3df03f4e11bb031e07f416dfdde3684e8a https://github.com/pnggroup/libpng/commit/55d20aaa322c9274491cda82c5cd4f99b48c6bcc

CVSS 3.1: 5.1 (Medium) - CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N CWE: CWE-416 (Use-After-Free) Affected (pngsetPLTE, pngsettRNS): libpng 1.6.56 only Affected (pngsethIST): all versions since at least libpng 1.0.9 Fixed: libpng 1.6.57

Passing a pointer obtained from pnggetPLTE, pnggettRNS, or pnggethIST back into the corresponding setter on the same pngstruct/pnginfo pair causes the setter to free the internal buffer before copying from the caller-supplied pointer, which now dangles. The subsequent copy reads from freed memory, producing corrupted chunk data or leaking unrelated heap contents into the chunk struct.

The pngsetPLTE and pngsettRNS defects are regressions introduced by the CVE-2026-33416 fix in libpng 1.6.56; earlier versions tolerated the aliased pointer by accident. The pngsethIST defect has been present since at least libpng 1.0.9.

The defect cannot be triggered by a crafted PNG file alone; it requires the application to call the getter and setter in sequence on the same struct pair. Any valid image carrying the relevant chunk suffices to populate the internal pointer that the application then aliases.

Impact: - Corrupted chunk data: the setter copies stale or reallocated heap contents into the replacement buffer, silently corrupting chunk metadata - Information disclosure: unrelated heap data may become visible through subsequent getter calls

The same release also hardens the append-style setters (pngsettext, pngsetsPLT, pngsetunknownchunks) against a theoretical variant of the same aliasing pattern.

Workaround: applications that pass a getter's return value back to the corresponding setter on the same struct pair can simply remove the redundant setter call, or copy the getter's output into a caller-owned buffer before passing it to the setter.

Credits: - @Iv4n550 (discovery of PLTE and tRNS defects) - Cosmin Truta (discovery of hIST defect and fix of all defects)

=== References ===

- Release: https://github.com/pnggroup/libpng/releases/tag/v1.6.57 - libpng homepage: http://www.libpng.org/pub/png/libpng.html

--- Cosmin Truta libpng maintainer

First published (updated )
Severity
4

LIBPNG is a reference library for use in applications that read, create, and manipulate PNG (Portable Network Graphics) raster image files. In versions 1.6.36 through 1.6.55, an out-of-bounds read and write exists in libpng's ARM/AArch64 Neon-optimized palette expansion path. When expanding 8-bit paletted rows to RGB or RGBA, the Neon loop processes a final partial chunk without verifying that enough input pixels remain. Because the implementation works backward from the end of the row, the final iteration dereferences pointers before the start of the row buffer (OOB read) and writes expanded pixel data to the same underflowed positions (OOB write). This is reachable via normal decoding of attacker-controlled PNG input if Neon is enabled. Version 1.6.56 fixes the issue.

First published (updated )
Severity
4

LIBPNG is a reference library for use in applications that read, create, and manipulate PNG (Portable Network Graphics) raster image files. In versions 1.2.1 through 1.6.55, pngsettRNS and pngsetPLTE each alias a heap-allocated buffer between pngstruct and pnginfo, sharing a single allocation across two structs with independent lifetimes. The transalpha aliasing has been present since at least libpng 1.0, and the palette aliasing since at least 1.2.1. Both affect all prior release lines pngsettRNS sets pngptr->transalpha = infoptr->transalpha (256-byte buffer) and pngsetPLTE sets infoptr->palette = pngptr->palette (768-byte buffer). In both cases, calling pngfreedata (with PNGFREETRNS or PNGFREEPLTE) frees the buffer through infoptr while the corresponding pngptr pointer remains dangling. Subsequent row-transform functions dereference and, in some code paths, write to the freed memory. A second call to pngsettRNS or pngsetPLTE has the same effect, because both functions call pngfreedata internally before reallocating the infoptr buffer. Version 1.6.56 fixes the issue.

First published (updated )
Severity
7.5
Use After Free
AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H

Last updated 18 August 2026

1 / 3
Source: Ubuntu
First published (updated )
Severity
7.6
AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:H

Last updated 18 August 2026

1 / 3
Source: Ubuntu
First published (updated )

Hello, everyone,

libpng 1.6.56 has been released, fixing two high-severity vulnerabilities: a use-after-free in the low-level API affecting all versions, and an out-of-bounds read/write in the ARM Neon palette expansion affecting versions 1.6.36 through 1.6.55.

Users should either upgrade to libpng 1.6.56 or apply the fixes described below.

=== CVE-2026-33416 ===

Use-after-free via pointer aliasing in pngsettRNS and pngsetPLTE

Security advisory: https://github.com/pnggroup/libpng/security/advisories/GHSA-m4pc-p4q3-4c7j

Fixes: https://github.com/pnggroup/libpng/commit/23019269764e35ed8458e517f1897bd3c54820eb https://github.com/pnggroup/libpng/commit/7ea9eea884a2328cc7fdcb3c0c00246a50d90667

CVSS 3.1: 7.5 (High) - CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H CWE: CWE-416 (Use-After-Free) Affected: all versions through 1.6.55 Fixed: libpng 1.6.56

pngsettRNS and pngsetPLTE each alias a heap-allocated buffer between pngstruct and pnginfo, sharing a single allocation across two structs with independent lifetimes. Calling pngfreedata (or a second call to pngsettRNS / pngsetPLTE) frees the buffer through infoptr while the corresponding pngptr pointer remains dangling. Subsequent row-transform functions dereference and, in some code paths, write to the freed memory.

Impact: - Read-after-free: freed heap memory read via dangling pointer in row-transform functions; may leak sensitive heap contents - Write-after-free: the PNGREADINVERTALPHA complement loop (transalpha) and bit-shift transforms (palette) write attacker-influenced values to freed heap memory - Arbitrary code execution has been demonstrated in proof-of-concept exploits on allocators with deterministic reuse (e.g. glibc tcache)

The crafted PNG files that trigger this vulnerability are valid per the PNG specification and pass all PNG validators.

Credits: - Halil Oktay (discovery and fix) - Ryo Shimada (independent discovery and exploitability demonstration) - Cosmin Truta (follow-up fix)

=== CVE-2026-33636 ===

Out-of-bounds read/write in the palette expansion on ARM Neon

Security advisory: https://github.com/pnggroup/libpng/security/advisories/GHSA-wjr5-c57x-95m2

Fix: https://github.com/pnggroup/libpng/commit/aba9f18eba870d14fb52c5ba5d73451349e339c3

CVSS 3.1: 7.6 (High) - CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:H CWE: CWE-125 (Out-of-bounds Read), CWE-787 (Out-of-bounds Write) Affected: libpng 1.6.36 through 1.6.55 Fixed: libpng 1.6.56

The ARM/AArch64 Neon-optimized palette expansion functions process rows in fixed-size chunks (4 pixels for RGBA, 8 for RGB), working backward from the end of the row. The loop bound permits a final iteration when fewer than a full chunk of input pixels remain, causing reads before the start of the row buffer and writes of expanded pixel data to the same underflowed positions.

Impact: - Out-of-bounds read: may leak heap contents through decoded pixel output, since the palette is attacker-controlled - Out-of-bounds write: attacker-influenced palette data written at deterministic negative offsets from the row buffer (heap corruption) - Denial of service: reliable process crashes confirmed

Only ARM/AArch64 builds with Neon enabled are affected. Builds targeting Intel SSE2, PowerPC VSX, LoongArch LSX, or generic C code are NOT affected.

Workaround: build with CFLAGS set to "-DPNGARMNEONOPT=0".

Credits: - Taegu Ha (discovery and fix) - Cosmin Truta (follow-up fix)

=== References ===

- Release: https://github.com/pnggroup/libpng/releases/tag/v1.6.56 - libpng homepage: http://www.libpng.org/pub/png/libpng.html

--- Cosmin Truta libpng maintainer

Severity
7

LIBPNG is a reference library for use in applications that read, create, and manipulate PNG (Portable Network Graphics) raster image files. Prior to 1.6.55, an out-of-bounds read vulnerability exists in the pngsetquantize() API function. When the function is called with no histogram and the number of colors in the palette is more than twice the maximum supported by the user's display, certain palettes will cause the function to enter into an infinite loop that reads past the end of an internal heap-allocated buffer. The images that trigger this vulnerability are valid per the PNG specification. This vulnerability is fixed in 1.6.55.

First published (updated )
Severity
8.3
EPSS
0.06%
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:L/VI:L/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X

LIBPNG is a reference library for use in applications that read, create, and manipulate PNG (Portable Network Graphics) raster image files. Prior to 1.6.55, an out-of-bounds read vulnerability exists in the pngsetquantize() API function. When the function is called with no histogram and the number of colors in the palette is more than twice the maximum supported by the user's display, certain palettes will cause the function to enter into an infinite loop that reads past the end of an internal heap-allocated buffer. The images that trigger this vulnerability are valid per the PNG specification. This vulnerability is fixed in 1.6.55.

First published (updated )

Hello, everyone,

libpng 1.6.55 has been released to address a heap buffer overflow vulnerability in the low-level API. This release fixes one high-severity CVE affecting all versions of libpng.

CVE-2026-25646 (High): Heap buffer overflow in pngsetquantize when called with no histogram and a palette larger than twice the requested maximum number of colors.

The vulnerability exists in the color quantization code that reduces the number of colors in a palette. A logic error in the color distance table causes current palette indices to be stored where original indices are expected. After palette entries are swapped during color pruning, the index mismatch causes the pruning loop to fail to find valid candidates, the search bound grows past the end of a heap-allocated buffer, and out-of-bounds reads occur.

The images that trigger this vulnerability are valid per the PNG specification. The bug has existed since the initial version of pngsetquantize (then called pngsetdither).

Unlike the recent CVEs fixed in libpng 1.6.51, 1.6.52 and 1.6.54, which affected the simplified API, this vulnerability affects the low-level function pngsetquantize.

This can result in denial of service and potentially information disclosure or arbitrary code execution via heap corruption.

GitHub Security Advisory: - CVE-2026-25646: https://github.com/pnggroup/libpng/security/advisories/GHSA-g8hp-mq4h-rqm3

Fix: - https://github.com/pnggroup/libpng/commit/01d03b8453eb30ade759cd45c707e5a1c7277d88

Release: https://github.com/pnggroup/libpng/releases/tag/v1.6.55

Credit: Joshua Inscoe (reporter and fixer)

Users should upgrade to libpng 1.6.55 immediately.

--- Cosmin Truta libpng maintainer

Severity
5.5
Buffer Overflow
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

Buffer Overflow vulnerability in libpng 1.6.43-1.6.46 allows a local attacker to cause a denial of service via pngcreatereadstruct() function.

First published (updated )
Severity
5.5
Buffer Overflow
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

Buffer Overflow vulnerability in libpng 1.6.43-1.6.46 allows a local attacker to cause a denial of service via the pngimage with AddressSanitizer (ASan), the program leaks memory in various locations, eventually leading to high memory usage and causing the program to become unresponsive

First published (updated )
Severity
4

LIBPNG is a reference library for use in applications that read, create, and manipulate PNG (Portable Network Graphics) raster image files. From 1.6.26 to 1.6.53, there is an integer truncation in the libpng simplified write API functions pngwriteimage16bit and pngwriteimage8bit causes heap buffer over-read when the caller provides a negative row stride (for bottom-up image layouts) or a stride exceeding 65535 bytes. The bug was introduced in libpng 1.6.26 (October 2016) by casts added to silence compiler warnings on 16-bit systems. This vulnerability is fixed in 1.6.54.

First published (updated )
Severity
4

LIBPNG is a reference library for use in applications that read, create, and manipulate PNG (Portable Network Graphics) raster image files. From 1.6.51 to 1.6.53, there is a heap buffer over-read in the libpng simplified API function pngimagefinishread when processing interlaced 16-bit PNGs with 8-bit output format and non-minimal row stride. This is a regression introduced by the fix for CVE-2025-65018. This vulnerability is fixed in 1.6.54.

First published (updated )

Hello, everyone,

libpng 1.6.54 has been released, fixing two medium-severity heap buffer over-read vulnerabilities in the simplified API.

=== CVE-2026-22695 ===

Heap buffer over-read in pngimagereaddirectscaled (regression from CVE-2025-65018 fix)

Security advisory: https://github.com/pnggroup/libpng/security/advisories/GHSA-mmq5-27w3-rxpp Remediation commit: https://github.com/pnggroup/libpng/commit/e4f7ad4ea2

CVSS 3.1: 6.1 (Medium) - CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H CWE: CWE-125 (Out-of-bounds Read) Affected: libpng 1.6.51 through 1.6.53 Fixed: libpng 1.6.54

This is a regression introduced by the fix for CVE-2025-65018. When processing interlaced 16-bit PNGs with 8-bit output format and non-minimal row stride, the pngimagereaddirectscaled() function used the caller's stride instead of the actual row width for memcpy, causing a heap buffer over-read.

Impact: - Information disclosure (low): over-read may expose adjacent heap data - Denial of service (high): negative stride causes deterministic crash

Applications using the default stride (rowstride = 0 or rowstride = PNGIMAGEROWSTRIDE(image)) are NOT affected.

Credit: Petr Simecek, Stanislav Fort and Pavel Kohout (discovery), Petr Simecek (fix)

=== CVE-2026-22801 ===

Integer truncation causing heap buffer over-read in pngimagewrite

Security advisory: https://github.com/pnggroup/libpng/security/advisories/GHSA-vgjq-8cw5-ggw8 Remediation commit: https://github.com/pnggroup/libpng/commit/cf155de014

CVSS 3.1: 6.1 (Medium) - CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H CWE: CWE-125 (Out-of-bounds Read), CWE-190 (Integer Overflow or Wraparound) Affected: libpng 1.6.26 through 1.6.53 Fixed: libpng 1.6.54

The simplified write API functions pngwriteimage16bit and pngwriteimage8bit cast ptrdifft rowbytes to pnguint16 before pointer arithmetic. This truncation causes heap buffer over-read when the caller provides a negative row stride (for bottom-up layouts) or a stride exceeding 65535 bytes.

Impact: - Information disclosure (low): over-read may expose heap data in output - Denial of service (high): infinite loop or crash from reading unmapped memory

Applications using default stride with images narrower than 65535 bytes per row and top-down layout are NOT affected.

Credit: Cosmin Truta (discovery and fix)

=== References ===

- GitHub Issue (CVE-2026-22695): https://github.com/pnggroup/libpng/issues/778 - libpng homepage: http://www.libpng.org/pub/png/libpng.html

--- Cosmin Truta libpng maintainer

First published (updated )
Severity
7.8
EPSS
0.01%
Integer Overflow
AV:L/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H

LIBPNG has an integer truncation causing heap buffer over-read in pngimagewrite

1 / 2
Source: Microsoft
First published (updated )
Severity
7.1
EPSS
0.02%
AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H

LIBPNG is a reference library for use in applications that read, create, and manipulate PNG (Portable Network Graphics) raster image files. From 1.6.51 to 1.6.53, there is a heap buffer over-read in the libpng simplified API function pngimagefinishread when processing interlaced 16-bit PNGs with 8-bit output format and non-minimal row stride. This is a regression introduced by the fix for CVE-2025-65018. This vulnerability is fixed in 1.6.54.

First published (updated )

Greg

On 2025-12-03 13:33, Cosmin Truta wrote: [Cc-ing Greg Roelofs, who owns and maintains libpng.org [1]]

On Wed, Dec 3, 2025 at 11:09 PM Alan Coopersmith <alan.coopersmith () oracle com> wrote: Does this bug (and the recent bugs fixed in 1.6.51) not affect the older> branches of libpng, or is the statement that "libpng 1.2.x continues to get security fixes, as has 1.0.x for well over a decade" on https://libpng.org/pub/png/libpng.html no longer correct? The good news is this: neither this bug nor the ones in the previous v1.6.51 release affect those ancient libpng releases. What these bugs DO affect is a thing called "the simplified libpng API", which was added in libpng-1.6.0.

The bad news is this: https://libpng.org/pub/png/libpng.html I have seen that page a thousand times, and... yet... OOPSIE!! Is the statement on https://libpng.sourceforge.io/index.html that the older branches "ARE NO LONGER UPDATED" and were frozen in 2017 the correct one now?

Yes, that is correct.

Sincerely, Cosmin

Links: ------ [1] http://libpng.org

[Cc-ing Greg Roelofs, who owns and maintains libpng.org]

On Wed, Dec 3, 2025 at 11:09 PM Alan Coopersmith < alan.coopersmith () oracle com> wrote: Does this bug (and the recent bugs fixed in 1.6.51) not affect the older branches of libpng, or is the statement that "libpng 1.2.x continues to get security fixes, as has 1.0.x for well over a decade" on https://libpng.org/pub/png/libpng.html no longer correct? The good news is this: neither this bug nor the ones in the previous v1.6.51 release affect those ancient libpng releases. What these bugs DO affect is a thing called "the simplified libpng API", which was added in libpng-1.6.0.

The bad news is this: https://libpng.org/pub/png/libpng.html I have seen that page a thousand times, and... yet... OOPSIE!! Is the statement on https://libpng.sourceforge.io/index.html that the older branches "ARE NO LONGER UPDATED" and were frozen in 2017 the correct one now?

Yes, that is correct.

Sincerely, Cosmin

On 12/3/25 12:51, Cosmin Truta wrote: Hello, everyone,

libpng 1.6.52 has been released to address an out-of-bounds read vulnerability in the simplified API. This release fixes one high-severity CVE affecting libpng 1.6.0 through 1.6.51. Does this bug (and the recent bugs fixed in 1.6.51) not affect the older branches of libpng, or is the statement that "libpng 1.2.x continues to get security fixes, as has 1.0.x for well over a decade" on https://libpng.org/pub/png/libpng.html no longer correct?

Is the statement on https://libpng.sourceforge.io/index.html that the older branches "ARE NO LONGER UPDATED" and were frozen in 2017 the correct one now?

-- -Alan Coopersmith- alan.coopersmith () oracle com Oracle Solaris Engineering - https://blogs.oracle.com/solaris

Severity
7

LIBPNG is a reference library for use in applications that read, create, and manipulate PNG (Portable Network Graphics) raster image files. Prior to 1.6.52, an out-of-bounds read vulnerability in libpng's simplified API allows reading up to 1012 bytes beyond the pngsRGBbase[512] array when processing valid palette PNG images with partial transparency and gamma correction. The PNG files that trigger this vulnerability are valid per the PNG specification; the bug is in libpng's internal state management. Upgrade to libpng 1.6.52 or later.

First published (updated )

Hello, everyone,

libpng 1.6.52 has been released to address an out-of-bounds read vulnerability in the simplified API. This release fixes one high-severity CVE affecting libpng 1.6.0 through 1.6.51.

CVE-2025-66293 (CVSS 7.1, High): Out-of-bounds read in pngimagereadcomposite when processing palette PNG images with partial transparency and gamma correction.

Note: Unlike typical image parsing vulnerabilities, this bug is triggered by valid PNG files that conform to the PNG specification. Any palette image with a tRNS chunk containing partial alpha values (1–254) and a gAMA chunk will trigger the vulnerability when processed through the simplified API with an output format without alpha and no explicit background color. The bug is in libpng's internal flag synchronization, not in the image data.

A flag synchronization bug causes the compositing code to assume linear premultiplied data when the data is actually sRGB, resulting in reads up to 1012 bytes past the pngsRGBbase array. This can result in information disclosure and/or denial of service.

To the best of my knowledge, web browsers use the low-level libpng API rather than the simplified API, and are not affected by this vulnerability.

This is distinct from CVE-2025-64720 (fixed in 1.6.51), which also involved pngsRGBbase but occurred in a different code path and required a maliciously crafted PNG file to trigger.

GitHub Security Advisory: - CVE-2025-66293: https://github.com/pnggroup/libpng/security/advisories/GHSA-9mpm-9pxh-mg4f

Fixes: - https://github.com/pnggroup/libpng/commit/788a624d7387a758ffd5c7ab010f1870dea753a1 - https://github.com/pnggroup/libpng/commit/a05a48b756de63e3234ea6b3b938b8f5f862484a

Release: https://github.com/pnggroup/libpng/releases/tag/v1.6.52

Credit: flyfish101

Users should upgrade to libpng 1.6.52 immediately.

--- Cosmin Truta libpng maintainer

Severity
7.1
AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H

LIBPNG has an out-of-bounds read in pngimagereadcomposite

1 / 2
Source: Microsoft
First published (updated )
Severity
7
Buffer Overflow

LIBPNG is a reference library for use in applications that read, create, and manipulate PNG (Portable Network Graphics) raster image files. From version 1.6.0 to before 1.6.51, there is a heap buffer overflow vulnerability in the libpng simplified API function pngimagefinishread when processing 16-bit interlaced PNGs with 8-bit output format. Attacker-crafted interlaced PNG files cause heap writes beyond allocated buffer bounds. This issue has been patched in version 1.6.51.

First published (updated )
Severity
7

LIBPNG is a reference library for use in applications that read, create, and manipulate PNG (Portable Network Graphics) raster image files. From version 1.6.0 to before 1.6.51, an out-of-bounds read vulnerability exists in pngimagereadcomposite when processing palette images with PNGFLAGOPTIMIZEALPHA enabled. The palette compositing code in pnginitreadtransformations incorrectly applies background compositing during premultiplication, violating the invariant component ≤ alpha × 257 required by the simplified PNG API. This issue has been patched in version 1.6.51.

First published (updated )
Severity
6.1
Buffer Overflow, Use After Free, Input Validation, Null Pointer Dereference, Race Condition, Integer Overflow
AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H

802.1X. An authentication issue was addressed with improved state management.

1 / 44
Source: Apple
First published (updated )
Severity
6.1
AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H

LIBPNG is a reference library for use in applications that read, create, and manipulate PNG (Portable Network Graphics) raster image files. From version 1.6.0 to before 1.6.51, a heap buffer over-read vulnerability exists in libpng's pngwriteimage8bit function when processing 8-bit images through the simplified write API with convertto8bit enabled. The vulnerability affects 8-bit grayscale+alpha, RGB/RGBA, and images with incomplete row data. A conditional guard incorrectly allows 8-bit input to enter code expecting 16-bit input, causing reads up to 2 bytes beyond allocated buffer boundaries. This issue has been patched in version 1.6.51.

1 / 2
Source: MITRE
First published (updated )
Severity
7.1
Buffer Overflow
AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H

LIBPNG is a reference library for use in applications that read, create, and manipulate PNG (Portable Network Graphics) raster image files. From version 1.6.0 to before 1.6.51, an out-of-bounds read vulnerability exists in pngimagereadcomposite when processing palette images with PNGFLAGOPTIMIZEALPHA enabled. The palette compositing code in pnginitreadtransformations incorrectly applies background compositing during premultiplication, violating the invariant component ≤ alpha × 257 required by the simplified PNG API. This issue has been patched in version 1.6.51.

1 / 2
Source: MITRE
First published (updated )
Severity
7.1
Buffer Overflow
AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:H

Libpng has been updated to version 1.6.51, which contains fixes for security vulnerabilities including CVE-2025-65018 and CVE-2025-64720.

1 / 3
Source: GitLab
First published (updated )

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203