libheif: Uninitialized Heap Memory Information Leak via Failed Grid Tiles
Key facts
- Attack vector
- Network
- Privileges required
- None
- User interaction
- Required
- Attack complexity
- Low
- Impact type
- Information disclosure
- Confidentiality · integrity · availability
- High · None · None
- Fix status
- Fixed
Attack profile from CVSS 3.1 · CNA. Fix status from CNA. Impact type from CWE-200.
Summary
libheif is a HEIF and AVIF file format decoder and encoder. In versions 1.21.2 and prior, when decoding a HEIF grid image with strict_decoding=false (the default), a corrupted tile silently fails to decode and the library returns heif_error_Ok with no indication of failure, leading to an uninitialized heap memory information leak. The canvas is allocated via create_clone_image_at_new_size() → plane.alloc() → new (std::nothrow) uint8_t[allocation_size] which does not zero the memory; only the alpha plane is explicitly initialized via fill_plane(), so the Y, Cb, and Cr planes contain whatever was previously at that heap address. The failed tile's region of the canvas is never written. It retains uninitialized heap data that is delivered to the caller as decoded pixel values (4,096 bytes per Y/Cb/Cr plane = 12,288+ bytes total). Any application using libheif to decode grid-based HEIF/AVIF files with default settings is vulnerable: a crafted .heic or .avif file causes 4,096+ bytes of heap memory to appear as pixel values in the decoded image, and the calling application receives heif_error_Ok, so it has no indication the output contains heap garbage. In server-side image processing, an uploaded crafted HEIF decoded and re-encoded (e.g., as PNG/JPEG for thumbnails, CDN, social media) can leak cross-user data such as auth tokens, database results, and other users' image data. This issue has been fixed in version 1.22.0.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- Poc
- Automatable
- No
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| strukturag | libheif | before 1.22.0 | 1.22.0 | Patch available | CNA |
- libheif Vendorstrukturag Affected before 1.22.0 Fixed in 1.22.0 Patch available CNA
CPE names Threatist (inferred) · 1
Inferred from how NVD named this product before; not given by a source.
| CPE | Versions | Role | Vendor |
|---|---|---|---|
| cpe:2.3:a:struktur:libheif:*:*:*:*:*:*:*:* | — | — | strukturag |
- cpe:2.3:a:struktur:libheif:*:*:*:*:*:*:*:* Versions — — ·strukturag
Remediation
- Fix · CNA libheif (strukturag) Fixed in 1.22.0
Vendor assessments
Red Hat
Red Hat rating: Moderate. Red Hat's page for this CVE →
Not affected: 1 product
- Red Hat Enterprise Linux 10
Timeline
- 2026-10-02 Threatist record created from CVE-2026-32814
References
More strukturag vulnerabilities
- TI-2026-57994 libheif: Heap buffer overflow in `scale_nearest_neighbor()` via duplicate Alpha planes from nested `iden`/`auxl` items CVSS 3.1CRITICAL 9.8
- TI-2026-25594 NULL Pointer Dereference in libde265 CVSS 4.0HIGH 8.7
- TI-2023-27026 Libde265 v1.0.14 was discovered to contain a global buffer overflow vulnerability in the… CVSS 3.1HIGH 8.8
- TI-2023-27020 libheif v1.17.5 was discovered to contain a segmentation violation via the function… CVSS 3.1HIGH 8.8
- TI-2026-58037 Resource allocation without limits in strukturag libheif CVSS 3.1HIGH 7.5
- TI-2026-57995 libheif: brotli/zlib decompression paths lack output-size limits, allowing decompression-bomb OOM/DoS CVSS 3.1HIGH 7.5
Sources
- CVE-2026-32814 · CVE Program
- CVE-2026-32814 · NVD
- FIRST EPSS
- CVE-2026-32814 · Red Hat security data · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences