Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft PICT with undersized rowBytes
-
DeliveryDeliver file to victim application
-
ExploitVictim opens/parses image
-
ExecutionUnpack32Bits over-reads heap
-
ImpactLeak adjacent memory or crash process
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Bounds checking, read limits
MITRE ATT&CK
1 technique across 1 tactic: Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires an application that links the danoli3 FreeImage fork (through 3.19.23) to load and decode an attacker-supplied PICT file whose PixMap specifies a rowBytes value smaller than the file-controlled width, reaching the Unpack32Bits() 32-bit plane-conversion path. Key LIMITING factors: the vector is LOCAL (AV:L) and requires passive user interaction (UI:P) - a victim must open or process the malicious file; there is no network-facing or unauthenticated path. The target application must support/attempt PICT decoding, and impact is bounded to heap over-read (information disclosure of up to 64 KiB and/or crash), not code execution. |
| Impact | This is a moderate-risk, client-side memory-safety flaw rather than a high-priority remote threat. The authoritative CVSS 4.0 vector (AV:L/AC:L/AT:N/PR:N/UI:P/VC:L/VI:N/VA:H) describes a LOCAL attack requiring passive user interaction (a victim must open or process a malicious file), yielding low confidentiality impact (a bounded heap over-read leaking memory into decoded pixels) and high availability impact (process crash). This is internally consistent with the CWE-125 (out-of-bounds read) classification and the description. Publicly available exploit code exists (per VulnCheck advisory and the hackmd write-up), which raises practical risk, but there is NO CISA KEV listing and no EPSS score was provided, so there is no evidence of active or widespread exploitation - exploitation status is 'publicly available exploit code exists', which must not be conflated with in-the-wild use. No conflicting signals were found: the LOCAL vector and user-interaction requirement correctly reflect a library that parses attacker-supplied files, so the realistic worst case is information disclosure of adjacent heap contents (up to 64 KiB) or denial of service, not remote code execution. Net: a legitimate issue to patch in software bundling the affected fork, but not an emergency. |
| Exploit ScenarioDerived | An attacker crafts a malicious PICT image with a truncated or undersized rowBytes value relative to the file-controlled PixMap width, then delivers it to a victim who opens it in an application that uses the danoli3 FreeImage fork (≤3.19.23). When Unpack32Bits() in PluginPICT.cpp decodes the image, it over-reads up to 64 KiB of adjacent heap memory, leaking that data into the decoded pixels or crashing the process. Public proof-of-concept exploit code is available via the VulnCheck advisory and an associated hackmd write-up. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 15, 2026
Decoding a crafted PICT image with FreeImage (danoli3 fork) through 3.19.23 can over-read up to 64 KiB of heap memory inside Unpack32Bits() in PluginPICT.cpp, leaking process memory into the decoded pixel output or crashing the host application. The flaw affects any application that links the danoli3 fork (or the corresponding FreeImage codebase) and attempts to decode an attacker-supplied PICT file; per the assessed vector (AV:L/PR:N/UI:R) the attack requires a victim to open or process the malicious file, with no network-facing or unauthenticated remote path. Publicly available exploit code exists, but there is no confirmed active exploitation (no CISA KEV entry), and the impact is bounded to information disclosure and denial of service rather than code execution.
RemediationAI
No vendor-released patch version was identified in the available intelligence, so the primary recommendation is to stop passing untrusted PICT files to affected FreeImage builds (danoli3 fork and upstream through 3.19.23) until a fixed release is published, and to monitor https://github.com/danoli3/FreeImage and the VulnCheck advisory for an updated tag. Where PICT support is not a hard requirement, the most effective compensating control is to disable or remove the PICT plugin entirely - delete or exclude the PluginPICT module from the build/plugin directory so the decoder is never registered (side effect: any legitimate legacy PICT assets will no longer load). If PICT decoding must remain available, run the decoder in a constrained worker process or sandbox with a restricted address space, drop privileges, and treat decoded output as untrusted; this bounds the leak of up to 64 KiB of heap data and converts crashes into contained worker failures, at the cost of additional process-isolation complexity and some throughput loss. Additional practical mitigations include rejecting PICT files at intake where the format is not expected, enforcing maximum file and image-dimension limits before decoding, and applying available memory-safety hardening (ASLR, guard pages/allocator hardening) to reduce the reliability of the out-of-bounds read - none of these eliminate the underlying missing rowBytes-vs-width validation, so they should be viewed as risk reduction rather than a fix. Because exploitation requires a victim to open or process a malicious file (AV:L, UI:R per the assessed CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:H vector), user-awareness and email/file-sharing gateway filtering of PICT attachments provide meaningful defense against the client-side delivery path.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The vulnerability is a classic CWE-125 out-of-bounds read rooted in the PICT image decoder shipped with FreeImage. In the 32-bit plane-conversion path of Unpack32Bits() (PluginPICT.cpp, roughly lines 605-650 in the referenced danoli3/FreeImage commit cc2bfc1), the decoder iterates over rows using a rowBytes value taken from the file-controlled PixMap structure, but never validates that rowBytes is large enough for the width/bit-depth it just parsed. When a crafted PICT supplies a truncated or undersized rowBytes, the conversion loop reads past the end of the allocated scanline buffer, exposing up to 64 KiB of adjacent heap contents that are copied into decoded pixel data, or triggering an access violation and process crash. The affected component is the PICT plugin itself, and the CPE entries cpe:2.3:a:danoli3:freeimage:*:*:*:*:*:*:*:* and cpe:2.3:a:freeimage:freeimage:*:*:*:*:*:*:*:* confirm that both the danoli3 fork and the upstream FreeImage product line through 3.19.23 are in scope for the intelligence provided.
Know when Freeimage gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:L/VI:N/VA:H/SC:N/SI:N/SA:N
File-parsing flaw triggered by a victim opening a crafted PICT, so AV:L and UI:R with PR:N; bounded heap over-read gives C:L, no integrity impact, and crash gives A:H.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
FreeImage (danoli3 fork) through 3.19.23 contains a heap out-of-bounds read vulnerability in Unpack32Bits() in PluginPICT.cpp because rowBytes is never checked against the file-controlled PixMap width. Attackers can supply a crafted PICT file with a truncated or undersized rowBytes to over-read up to 64 KiB of heap, leaking memory into decoded pixels or crashing the process.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
FreeImage 3.18.0 has a use-after-free in the TARGA plugin's loadRLE function. Processing a malicious TGA file can lead t
An integer overflow vulnerability in FreeImageIO.cpp::_MemoryReadProc in FreeImage 3.18.0 allows attackers to obtain sen
An integer overflow vulnerability in LoadPixelDataRLE4 function in PluginBMP.cpp in Freeimage 3.18.0 allows attackers to
Buffer Overflow vulnerability in open source FreeImage v.3.19.0 [r1909] allows a local attacker to execute arbitrary cod
Buffer Overflow vulnerability in open source FreeImage v.3.19.0 [r1909] allows a local attacker to execute arbitrary cod
Buffer Overflow vulnerability in open source FreeImage v.3.19.0 [r1909] allows a local attacker to execute arbitrary cod
Buffer Overflow vulnerability in open source FreeImage v.3.19.0 [r1909] allows a local attacker to execute arbitrary cod
Buffer Overflow vulnerability in open source FreeImage v.3.19.0 [r1909] allows a local attacker to execute arbitrary cod
Buffer Overflow vulnerability in open source FreeImage v.3.19.0 [r1909] allows a local attacker to execute arbitrary cod
Buffer Overflow vulnerability in open source FreeImage v.3.19.0 [r1909] allows a local attacker to execute arbitrary cod
A flaw was found in the freeimage library. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, n
In FreeImage 3.18.0, an out-of-bounds access occurs because of mishandling of the OpenJPEG j2k_read_ppm_v3 function in j
EUVD-2026-102276
NVD
CVE.org
EPSS
GitHub
Exploit-DB