CVE-2026-82328
Executive Summary
CVE-2026-82328 is an unpatched heap out-of-bounds read vulnerability in the file-ico plugin of the GNU Image Manipulation Program (GIMP). The flaw is triggered when a user opens a specially crafted ICO image file, where the plugin fails to properly validate the used_clrs (palette count) parameter, leading to improper memory bounds checking and a heap out-of-bounds read. Exploitation can cause an application crash (denial of service) or result in a limited, out-of-bounds read of heap memory contents, potentially disclosing sensitive process memory to the attacker. The vulnerability has a CVSS score of 6.1 (Medium severity), a CWE classification of CWE-125 (Out-of-bounds Read), and resides in the client-side attack surface, requiring user interaction to trigger.
At the time of this report, there is no patch available, no known public exploit code, and the vulnerability has not been added to the CISA Known Exploited Vulnerabilities (KEV) catalog. The exact affected version range is unknown; however, any deployment of GIMP with the default file-ico plugin is potentially at risk.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
The vulnerability resides in the file-ico plugin within GIMP, which is responsible for parsing ICO (Icon) image files. ICO files are used by Windows operating systems to store icons and can contain multiple images of different resolutions and color depths. Each image entry inside the ICO file includes an ICONDIRENTRY structure, which points to a BITMAPINFOHEADER structure defining the image properties, including the biClrUsed field — this corresponds to the used_clrs parameter mentioned in the vulnerability description.
The attack mechanism is a classic integer/parameter validation flaw combined with improper bounds checking. When the plugin reads an ICO file, it retrieves the used_clrs value (which represents the number of color palette entries) from the file header without adequate validation. Under normal conditions, this value should be constrained to reasonable limits based on the image's bit depth (e.g., for 8-bit images, a maximum of 256 palette entries, and for 32-bit images, typically zero or a usage count). However, a crafted ICO file can specify an arbitrarily large or inconsistent used_clrs value. The plugin then relies on this unsanitized value during memory allocation and subsequent processing loops. This leads to the plugin dereferencing heap memory locations that lie beyond the bounds of the allocated buffer — a classic heap out-of-bounds read condition.
The out-of-bounds read occurs when the plugin attempts to read color palette entries (rgb quad structures) or perform color processing loops based on the corrupted used_clrs count. If the count exceeds the actual allocated heap buffer size, reads will extend past the memory boundary. This can result in:
- Denial of Service (DoS): The read may access invalid memory addresses, causing the plugin (and potentially the entire GIMP application) to crash with a segmentation fault due to reading from unmapped memory pages.
- Information Disclosure: If the out-of-bounds read lands within the bounds of the process's allocated heap (but outside the intended buffer), it may read residual data — such as passwords, cryptographic keys, or other sensitive application data — that resides in adjacent heap blocks. The limited nature of the disclosure means the attacker would only retrieve raw bytes, not necessarily controllable or fully interpretable content, but even partial heap data can aid in further exploitation (e.g., bypassing ASLR).
The attack surface is entirely client-side. The attacker must convince the user to open a malicious ICO file through GIMP. This could be via a phishing email with a malicious icon attachment, a malicious website hosting the crafted icon and prompting the user to open it with GIMP, or a supply-chain-style attack where the malicious ICO is bundled into a project or archive a user is likely to process. The attack requires no special privileges and no network-based preconditions beyond delivering the file. The AV:L component in the CVSS vector reflects that the attacker must deliver the malicious file locally to the target user's machine.
Root Cause: Lack of bounds/range validation on the used_clrs parameter from the ICO header before it is used in memory allocation size calculations and subsequent read loops in the file-ico plugin.
Exploitation Scenarios
The attack chain for CVE-2026-82328 follows a predictable client-side exploitation pattern. As no public PoC or exploit code exists at the time of this writing, the attack chain described below is inferred from the vulnerability class (heap out-of-bounds read via unsanitized header field) and known exploitation techniques for CWE-125.
Step 1: Reconnaissance and Target Identification The attacker typically identifies GIMP users. This can be done through passive techniques such as banner grabbing on public-facing services (though GIMP is a desktop application, not a network service), social engineering, or distributing trojanized files to communities likely to use GIMP (e.g., digital artists, UI/UX designers). Enumeration of the exact GIMP version installed is not strictly necessary since the vulnerability is reportedly unpatched across all versions; however, knowing the version helps determine whether specific mitigation timing is needed.
Step 2: Triggering the Flaw
The attacker crafts a malicious ICO file by modifying the ICONDIRENTRY and BITMAPINFOHEADER structures. Specifically, the biClrUsed (used_clrs) field is set to a value that exceeds the actual palette size or the buffer the plugin will allocate. For example, an 8-bit image would normally have used_clrs set to 256 or less; the attacker might set it to 0xFFFF (65535) while supplying only minimal palette data. The file is then delivered to the target (e.g., as an email attachment, a download link, or embedded in an archive).
Step 3: Payload Execution Mechanism
The exploit is purely memory-based. When the target opens the malicious ICO file with GIMP, the file-ico plugin parses the header. The unsanitized used_clrs value is used to calculate the size of the palette buffer to allocate. If validation is insufficient, the plugin may allocate a buffer sized according to the malicious value or may allocate based on the actual data present but then iterate used_clrs times while reading palette entries — in either case, a read beyond the allocated heap region is triggered. This is a read primitive targeting the heap; it does not directly execute code.
Step 4: Post-Exploitation Impact The direct outcome is a denial of service (GIMP crashes, potentially losing unsaved work for the user). If the crash can be avoided and the OOB read is tolerated, the attacker may observe heap memory contents returned or rendered, which can be used to leak heap addresses (defeating ASLR) or capture sensitive data co-located in heap memory (e.g., portions of clipboard content, image data the user was editing, or remnant decryption buffers). The CVSS confidentiality impact is rated Low (C:L), indicating the exposed data is limited and not necessarily actionable without additional exploitation steps.
Note: No public PoC is available; the attack chain is inferred from the vulnerability class. Absence of a PoC does not indicate absence of private exploitation; however, as of this report, no exploitation in the wild has been reported.
Impact Assessment
Business and Operational Impact: GIMP is widely used in design, media, and creative industries, as well as by government and enterprise users for image manipulation. A denial of service via a crafted ICO file causes user productivity loss and potential data loss (unsaved image work). The information disclosure, though limited in scope, could expose sensitive heap contents, which, in a multi-tenant or high-security environment where GIMP may be used to process classified images, constitutes a data confidentiality breach.
CVSS Subscore Analysis: The base score of 6.1 (Medium) reflects the following: AV:L (Low complexity attack vector) means the attacker cannot remotely trigger this over a network; they must have a way to deliver the file to the local machine. AC:L (Low attack complexity) means the attack does not rely on race conditions or special conditions beyond user interaction. PR:N (No privileges required) — the attacker does not need already-established credentials on the system. UI:R (User interaction required) — the victim must open the malicious ICO file in GIMP. S:U (Unchanged scope) — the exploitation does not cross a trust boundary. C:L (Low confidentiality impact) — limited heap disclosure; I:N (None integrity impact) — the attacker cannot modify data; A:H (High availability impact) — the crash is highly likely and impacts the application severely.
Affected Systems: All platforms where GIMP is distributed (Windows, Linux, macOS) are affected, provided the file-ico plugin is present (which is standard in default GIMP installations). The exact version range is unknown because the flaw is unpatched; logically, all versions up to the most recent are potentially affected.
Blast Radius: The blast radius is limited to a single client machine per successful phishing attempt. There is no lateral movement or network propagation. However, in enterprise SOCs or design agencies using GIMP as a standard tool, a single infection vector (malicious ICO in a shared drive, email, or design asset) can sink multiple machines.
Detection Guidance
Sigma Rule
title: GIMP file-ico Heap OOB Read Attempt Detection
id: 5f6a4b1c-2e8d-4f3a-9b0e-7c1a2d3e4f5a
status: experimental
description: Detects GIMP processes potentially crashing or reading out-of-bounds due to CVE-2026-82328. Monitors for anomalous memory access errors in the GIMP process.
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-82328
author: ValtersIT Threat Intelligence
date: 2026/11/15
logsource:
category: process_creation
product: windows
detection:
selection:
Image|endswith: '\gimp-2.10.exe' # Adjust for known gimp executable names
condition: selection
falsepositives:
- Legitimate GIMP usage on ICO files
level: medium
tags:
- attack.t1203
- cve.2026.82328
YARA Rule
rule GIMP_ICO_used_clrs_OOB
{
meta:
author = "ValtersIT Threat Intelligence"
description = "Detect ICO files with malicious used_clrs (biClrUsed) field indicating potential CVE-2026-82328 exploitation"
date = "2026-11-15"
cve = "CVE-2026-82328"
severity = "medium"
strings:
$ico_magic = { 00 00 01 00 } // ICO header ICONDIR: Reserved(0) Type(1)
$ico_magic2 = { 00 00 02 00 } // CUR header, arguably also parsed
condition:
uint16(0) == 0 and uint16(2) == 1 and
uint16(4) > 0 and // count > 0
filesize > 20 and
// Check first bitmapinfoheader for used_clrs > 256 (for low bitdepth)
any of them and (
uint32(24) > 256 // Rough offset: 6 bytes ICONDIR + 16 bytes ICONDIRENTRY
// Note: actual offset may vary; this is a heuristic.
)
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-82328 - GIMP ICO file with suspicious used_clrs field"; flow:established,to_server; content:"HTTP/1.1"; content:"Content-Type|3a 20|image/x-icon"; nocase; content:".ico"; pcre:"/\x00\x00\x01\x00[\x00-\xff]{4}(\x00\x00\x01\x00)?"; offset:0; depth:24; threshold:type limit, track by_src, count 1, seconds 60; classtype:attempted-user; sid:2026823281; rev:1;)
Elastic Detection
Elastic EQL Query to detect GIMP process crashes or high-severity file handling errors:
process where event.action == "end" and process.name == "gimp-2.10.exe" and process.exit_code == -1073741819
Splunk SPL Query
index=windows sourcetype=WinEventLog:Security OR sourcetype=XmlWinEventLog:Security
| rex field=Message "ProcessName:\s+(?<process_name>\S+)"
| where process_name LIKE "%gimp%"
| stats count by process_name, ComputerName, _time
| search NOT count=0
| eval alert="Potential GIMP crash due to CVE-2026-82328 ICO OOB read"
Wazuh OSSEC Rule
<group name="gimp,">
<rule id="608714" level="8">
<decoded_as>json</decoded_as>
<field name="process">gimp-2.10</field>
<field name="status">crashed</field>
<description>GIMP crashed possibly due to malformed ICO file (CVE-2026-82328)</description>
<mitre>
<id>T1203</id>
</mitre>
<group>attack.t1203,</group>
</rule>
</group>
Mitigation & Patch Guidance
Immediate Mitigations (Patch not available; 0/4 confidence):
- Restrict file access: Implement group policy or endpoint security rules to block ICO file types from being opened with GIMP in high-security environments. Use file type association management to route ICO files to a safe viewer other than GIMP.
- User awareness: Issue a security bulletin to users, warning against opening untrusted ICO files downloaded from the internet or received via email.
- Sandboxing: Instruct users to open untrusted image files in a sandboxed virtual machine or a containerized GIMP environment to contain any crash or memory disclosure.
- Increase logging: Enable full process auditing on GIMP to capture crash details for forensic analysis should a crash occur.
Patch/Upgrade Steps:
- As of this reporting date, no vendor patch exists. The vendor (GIMP project) has not acknowledged the issue publicly. Monitor the official GIMP website (gimp.org) and release notes for the next version containing a fix. When released, upgrade to the patched version immediately.
Long-Term Hardening:
- File defense: Use email and web gateways to scan and quarantine ICO files that deviate from standard header structures (e.g., using tools to validate the header fields against the actual file size).
- Alternative software: Where feasible, migrate image processing workflows to alternative open-source or proprietary tools that have demonstrated proactive fuzzing and security hardening of their image parsers (e.g., ImageMagick with strict delegate configuration).
- Memory safety: Encourage use of memory-safe compiled GIMP builds where available. Follow GIMP's build recommendations; some distributions may offer GIMP builds with ASAN (AddressSanitizer) which can harden the plugin by detecting OOB reads earlier, though performance trade-offs exist.
- Vulnerability disclosure: Engage with the GIMP maintainers through responsible disclosure channels to accelerate the patch timeline, given that this flaw remains unpatched.
References
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2026-82328
- MITRE CVE Record: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-82328
- GIMP Official Website (for monitor patch status): https://www.gimp.org
- CWE-125 Reference: https://cwe.mitre.org/data/definitions/125.html
- CISA KEV Catalog (monitoring): https://www.cisa.gov/known-exploited-vulnerabilities-catalog
Threat Actor Activity and Exploit-in-the-Wild: No known threat actor campaigns, no references to active exploitation, and no exploit code has been publicly disclosed or observed in the wild at the time of this writing. The CISA KEV catalog does not list this CVE. The EPSS score has not been assigned by FIRST.org; thus, a probability-of-exploitation metric is currently unavailable. However, the unpatched nature of this flaw and the historical trend of image-parsing vulnerabilities being weaponized suggests the risk vector may widen if a PoC emerges. Security teams should continue to monitor for updates.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.