CVE-2026-84444
High · 7.4CVSS
7.4
EPSS
0.5%
Published
Sep 18, 2026
CISA due date
—
Cloudanix analysis
A flaw in a common photo-format library can let a crafted image tile crash the program or scramble the saved image when uncompressed encoding is turned on, and updating the library stops it.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- High
- Impact
- Remote Code Execution
- Component
- Library
- Class
- Buffer Overflow
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
When libheif is built with WITH_UNCOMPRESSED_CODEC, heif_context_add_image_tile() accepts an independently constructed tile whose component-plane dimensions do not match the prototype image's tile geometry. ImageItem_uncompressed::add_image_tile() forwards that tile to unc_encoder::encode_tile() without check_component_sizes(). The encoder sizes its heap output from the configured tile geometry but copies the tile's actual plane dimensions, so an oversized plane causes unc_encoder_component_interleave::encode_tile() to write attacker-controlled data past the heap output buffer. Result is heap memory corruption with high integrity and availability impact (process crash or corrupted encoded output) and no confidentiality impact.
Why it matters to the business
Any product that encodes HEIF or AVIF with libheif's uncompressed codec can be crashed or have encoded output silently corrupted, interrupting media pipelines, UGC processing, and imaging features. The flaw is about 16 days old, is not on CISA KEV, is not associated with ransomware, and has no known exploit maturity, so mass exploitation is not indicated; unpatched encoders still pose an integrity and availability risk until upgraded to 1.23.2.
How an attack unfolds
An attacker targets a network-reachable encoder or API that uses libheif built with uncompressed-codec support and can add image tiles without authenticating. They supply a tile whose component planes are larger than the prototype tile geometry. Because add_image_tile() skips the size gate, encode_tile() allocates from the smaller configured geometry and memcpy-style copies the oversized planes, overflowing the heap buffer. High attack complexity applies: the build flag must be on and the tile must be constructed independently of the prototype. No privileges or user interaction are required. Success yields a crash (denial of service) or corrupted in-process state and encoded bytes rather than information disclosure. No named threat actors or KEV/ransomware use are reported.
How to fix it
Upgrade libheif to 1.23.2 or later on every build and distribution that ships the library. Rebuild and redeploy all applications, containers, and native packages that statically or dynamically link libheif. If uncompressed HEIF encoding is not required, rebuild without WITH_UNCOMPRESSED_CODEC to remove the vulnerable path. Inventory transcoders, media workers, and mobile/desktop apps that vendor libheif and pin them to the fixed release. There is no complete configuration workaround while remaining on a pre-1.23.2 build with the uncompressed codec enabled.
How to confirm the fix worked
Confirm the running libheif is 1.23.2 or newer (package version, shared-object SONAME/metadata, or heif_get_version()). For source builds, verify WITH_UNCOMPRESSED_CODEC is off unless needed, and that ImageItem_uncompressed::add_image_tile() / unc_encoder::encode_tile() include check_component_sizes() (or equivalent) before copying planes. Regression-test encoding of uncompressed tiles whose component-plane sizes do not match prototype geometry and confirm rejection rather than overflow or crash. Scan images, lockfiles, and SBOM/CPE data for libheif < 1.23.2.
Typical attack path
- Locate a reachable HEIF/AVIF encoding path that uses libheif compiled with WITH_UNCOMPRESSED_CODEC.
- Cause the application to create a prototype image (tile geometry) and then add a separately constructed uncompressed tile.
- Make that tile's component-plane dimensions larger than the prototype tile geometry.
- Invoke heif_context_add_image_tile() so ImageItem_uncompressed::add_image_tile() calls unc_encoder::encode_tile() without check_component_sizes().
- Heap overflow in unc_encoder_component_interleave::encode_tile() corrupts adjacent heap, crashing the process or corrupting encoded output.
How to detect it
This overflow happens in-process during encode, so look for crashes and heap corruption rather than a network signature. Collect coredumps and crash reports from HEIF/AVIF encoding workers and search stack traces for heif_context_add_image_tile, ImageItem_uncompressed::add_image_tile, unc_encoder::encode_tile, or unc_encoder_component_interleave::encode_tile. Correlate abrupt encoder-process deaths, allocator abort logs (e.g. malloc/free assertion, AddressSanitizer heap-buffer-overflow), and failed or truncated HEIF/AVIF outputs around the same time. Review whether the crashed binary linked libheif older than 1.23.2 with uncompressed codec enabled. No public exploit, KEV listing, or named actor activity is documented, so treat hits as suspicious crashes to triage, not confirmed compromise.
- heif_context_add_image_tile
- ImageItem_uncompressed::add_image_tile
- unc_encoder::encode_tile
- unc_encoder_component_interleave::encode_tile
- libheif.so
- WITH_UNCOMPRESSED_CODEC
What your security team should do
- Patch or rebuild to libheif 1.23.2 immediately on all encoding paths; treat static links and container base images as in-scope.
- Inventory where WITH_UNCOMPRESSED_CODEC is enabled and disable it if uncompressed encoding is unused.
- Prioritize internet-facing or unauthenticated media-encoding APIs given AV:N, PR:N, UI:N.
- Add SBOM/dependency tracking for libheif so future decoder/encoder CVEs are visible.
- Watch for worker crashes and heap-corruption telemetry in image-encoding processes; known exploit maturity is none and KEV is false, so hunting is precautionary rather than incident-driven.
The record
libheif is a HEIF and AVIF file format decoder and encoder. Prior to 1.23.2, when WITH_UNCOMPRESSED_CODEC is enabled, heif_context_add_image_tile() accepts an independently constructed tile whose component-plane dimensions do not match the tile geometry established by the prototype image. ImageItem_uncompressed::add_image_tile() passes that tile directly to unc_encoder::encode_tile(), which lacked the check_component_sizes() gate and sizes its output from the configured tile geometry while copying the tile's actual component-plane dimensions. An oversized component plane can therefore make unc_encoder_component_interleave::encode_tile() copy attacker-controlled data beyond the heap output buffer. This issue is fixed in version 1.23.2.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|
Related vulnerabilities
- CVE-2026-111497 A buffer overflow vulnerability in the Brotli decoder (c/dec/decode.c) in Google Brotli… CWE-787
- CVE-2026-112397 Pillow is a Python imaging library. CWE-787
- CVE-2026-112059 libLAS through 1.8.1 contains a heap out-of-bounds write vulnerability in the point… CWE-787
- CVE-2026-89088 A flaw was found in parted. CWE-787
- CVE-2026-89085 A flaw was found in parted. CWE-787
- CVE-2026-85746 MariaDB server is a community developed fork of MySQL server. CWE-787
- CVE-2026-107815 MariaDB server is a community developed fork of MySQL server. CWE-787
- CVE-2026-56851 The Nickname profile can panic with an out-of-bounds slice error when transforming… CWE-787