The Zero Day Initiative has published ZDI-26-713, disclosing a stack-based buffer overflow in GIMP's APNG (Animated PNG) file parsing code, tracked as CVE-2026-92183 with a CVSS score of 7.8 (High). The flaw allows remote attackers to execute arbitrary code on affected GIMP installations — exploitation requires user interaction, meaning the target must open a malicious APNG file or visit a malicious page that delivers one.
If your immediate reaction is "we're an enterprise, who runs GIMP?" — you are thinking about this wrong. GIMP is a free, open-source image editor with a massive install base across creative teams, marketing departments, developers, and security practitioners themselves. It is frequently installed outside of formal software inventory and patch management processes, making it a classic shadow-IT attack surface. A CVSS 7.8 client-side code execution flaw in a widely deployed, often unmanaged application is exactly the kind of foothold initial-access brokers and phishing operators look for: deliver a weaponized image via email, a compromised website, or a chat platform, wait for someone to open it, and land code execution in the context of that user.
This post breaks down the vulnerability from a defender's perspective and delivers concrete detection content and remediation steps you can act on today.
Technical Analysis
Vulnerability Overview
| Attribute | Detail |
|---|---|
| CVE | CVE-2026-92183 |
| Advisory | ZDI-26-713 (zerodayinitiative.com/advisories/ZDI-26-713) |
| CVSS | 7.8 (High) — typical vector for this class: AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
| Vulnerability class | Stack-based buffer overflow (CWE-121) |
| Affected component | GIMP APNG file format parsing (file-apng plug-in / image loader) |
| Attack vector | Malicious APNG file opened by the victim, or rendered via a malicious page |
| Authentication | None required — unauthenticated remote attacker |
| User interaction | Required (victim must open the file) |
How the Vulnerability Works
APNG is the animated extension of the PNG format. Like all image parsers, GIMP's APNG loader must parse attacker-controllable structured data — chunk headers, frame control blocks (acTL, fcTL, fdAT), dimensions, offsets, and lengths — before rendering anything to the screen.
A stack-based buffer overflow in this code path means the parser copies attacker-controlled data from the file into a fixed-size buffer allocated on the stack without adequate bounds checking. When the crafted data exceeds the buffer size, it overwrites adjacent stack memory, including saved return addresses. A well-constructed payload can hijack execution flow and achieve arbitrary code execution in the security context of the user who opened the file.
Key exploitation characteristics defenders should internalize:
- File-borne delivery. The weaponized object is an image file (
.apng, or.pngcarrying APNG chunks). Delivery channels are the usual suspects: phishing attachments, malicious downloads, waterhole pages, messaging platforms, and files shared through collaboration tools. - Silent trigger surface. The overflow occurs during parsing — the victim does not need to do anything beyond opening the file. In many workflows, thumbnails or preview handlers can also exercise parsing code, expanding the effective trigger surface.
- Code execution as the user. Post-exploitation, attackers inherit the victim's privileges. On a developer or admin workstation, that is frequently enough to begin credential theft and lateral movement.
- Memory corruption on the stack. Exploitation attempts often destabilize the process. Expect crashes of
gimp(Linux/macOS) orgimp-2.99.exe/gimp.exe(Windows) to be a leading indicator — both of failed exploit attempts and of successful-but-sloppy ones.
Exploitation Status
At publication, ZDI-26-713 is a coordinated disclosure of a patched/disclosed flaw. There is no confirmed in-the-wild exploitation and no CISA KEV listing at this time, and no public weaponized PoC has been attributed to this CVE. That said, ZDI disclosures reliably attract reverse-engineering attention — the delta between the vulnerable and fixed parsing code tells an exploit developer exactly where to aim. Client-side file-format bugs with a CVSS of 7.8 and a "open a file" trigger have historically been weaponized quickly once public. Treat the patch window as short.
Detection & Response
Detection for a client-side file-format exploit centers on three observable behaviors: (1) the GIMP process crashing or behaving abnormally, (2) GIMP spawning child processes — which it essentially never should in normal use, and (3) suspicious APNG/PNG files arriving via email or download channels.
Sigma Rules
The highest-fidelity signal is GIMP spawning a child process. Legitimate GIMP usage does not spawn shells, script interpreters, or Office processes. The second rule hunts for anomalous APNG file creation in download/temp locations as a triage pivot.
---
title: GIMP Process Spawning Suspicious Child Process
tid: 9c2e7a41-3d6b-4f85-b1a9-7e5d2c8f4091
status: experimental
description: Detects GIMP (gimp.exe, gimp-2.99.exe, or Linux gimp binary) spawning a shell, script interpreter, or other unusual child process — a strong indicator of successful exploitation of a file-parsing vulnerability such as CVE-2026-92183 (ZDI-26-713, APNG stack buffer overflow).
references:
- http://www.zerodayinitiative.com/advisories/ZDI-26-713/
- https://attack.mitre.org/techniques/T1203/
- https://attack.mitre.org/techniques/T1204.002/
author: Security Arsenal
date: 2026/04/06
tags:
- attack.execution
- attack.t1203
- attack.t1204.002
logsource:
category: process_creation
product: windows
detection:
selection_parent:
ParentImage|endswith:
- '\gimp.exe'
- '\gimp-2.99.exe'
- '\gimp-2.10.exe'
selection_child:
Image|endswith:
- '\cmd.exe'
- '\powershell.exe'
- '\pwsh.exe'
- '\wscript.exe'
- '\cscript.exe'
- '\mshta.exe'
- '\rundll32.exe'
- '\regsvr32.exe'
- '\wmic.exe'
- '\certutil.exe'
- '\bitsadmin.exe'
- '\curl.exe'
condition: selection_parent and selection_child
falsepositives:
- Extremely rare; GIMP script-fu batch operations may invoke external tools in unusual workflows
level: high
---
title: Suspicious APNG File Written to Download or Temp Locations
tid: 4f1b8c72-6a3d-4e29-9c5f-2b7a1d3e8096
status: experimental
description: Detects creation of APNG/PNG image files in user download, temp, or email attachment cache locations around potential phishing delivery — a triage pivot for hunting CVE-2026-92183 delivery attempts.
references:
- http://www.zerodayinitiative.com/advisories/ZDI-26-713/
- https://attack.mitre.org/techniques/T1204.002/
author: Security Arsenal
date: 2026/04/06
tags:
- attack.initial_access
- attack.t1204.002
logsource:
category: file_event
product: windows
detection:
selection_path:
TargetFilename|contains:
- '\Downloads\'
- '\AppData\Local\Temp\'
- '\AppData\Local\Microsoft\Windows\INetCache\'
- '\Content.Outlook\'
selection_ext:
TargetFilename|endswith:
- '.apng'
condition: selection_path and selection_ext
falsepositives:
- Legitimate download of animated PNG assets by designers; tune by correlating with email/web proxy telemetry
level: medium
The first rule is the one that matters. APNG files are rare enough in most enterprises that the second rule is useful as a hunting pivot, but child-process spawning from GIMP is the signal you should page on.
KQL (Microsoft Sentinel / Defender)
This query hunts for GIMP spawning child processes across the fleet via Defender for Endpoint process telemetry, and joins file events for APNG artifacts in delivery locations for context.
// Hunt 1: GIMP spawning child processes (post-exploitation indicator)
DeviceProcessEvents
| where TimeGenerated > ago(14d)
| where InitiatingProcessFileName in~ ("gimp.exe", "gimp-2.99.exe", "gimp-2.10.exe", "gimp")
| where FileName !in~ ("gimp.exe", "gimp-2.99.exe", "gimp-2.10.exe")
| project TimeGenerated, DeviceName, AccountName, InitiatingProcessFileName,
InitiatingProcessCommandLine, FileName, ProcessCommandLine, SHA256
| order by TimeGenerated desc;
// Hunt 2: APNG file delivery into user-controlled locations
DeviceFileEvents
| where TimeGenerated > ago(14d)
| where FileName endswith ".apng"
| where FolderPath has_any ("\\Downloads\\", "\\Temp\\", "INetCache", "Content.Outlook")
| project TimeGenerated, DeviceName, InitiatingProcessFileName, FolderPath,
FileName, SHA256, InitiatingProcessAccountName
| order by TimeGenerated desc;
// Hunt 3: GIMP process crash events via Windows Error Reporting (Sysmon/SecurityEvent ingestion)
Event
| where TimeGenerated > ago(14d)
| where EventLog == "Application" and Source == "Application Error"
| where EventData has_any ("gimp.exe", "gimp-2.99.exe", "gimp-2.10.exe")
| project TimeGenerated, Computer, EventData
| order by TimeGenerated desc
Hunt 1 should return near-zero results in a healthy environment — any hit warrants investigation. Hunt 3 catches exploit attempts that crash GIMP before achieving code execution; a cluster of GIMP crashes on one workstation after receiving an external image is a strong compromise indicator.
Velociraptor VQL
For DFIR teams running Velociraptor, this artifact triages a suspect endpoint: it enumerates running GIMP processes and their children, and sweeps user download/temp directories for APNG files with timestamps.
-- CVE-2026-92183 triage: GIMP processes, child processes, and APNG artifacts
LET procs = SELECT Pid, Ppid, Name, CommandLine, Exe, Username, CreateTime
FROM pslist()
LET gimp_procs = SELECT * FROM procs
WHERE Name =~ '(?i)gimp'
LET gimp_children = SELECT child.Pid AS Pid, child.Name AS Name,
child.CommandLine AS CommandLine, child.Exe AS Exe,
child.Username AS Username, child.CreateTime AS CreateTime,
parent.Name AS ParentName, parent.Pid AS ParentPid
FROM procs AS child
JOIN gimp_procs AS parent
ON child.Ppid = parent.Pid
LET apng_files = SELECT FullPath, Size, Mtime, Atime, Ctime
FROM glob(globs=[
'C:/Users/*/Downloads/**/*.apng',
'C:/Users/*/AppData/Local/Temp/**/*.apng',
'/home/*/Downloads/**/*.apng',
'/tmp/**/*.apng'
])
SELECT * FROM gimp_children
UNION ALL
SELECT NULL AS Pid, 'APNG_ARTIFACT' AS Name, FullPath AS CommandLine,
'' AS Exe, '' AS Username, Mtime AS CreateTime,
'' AS ParentName, NULL AS ParentPid
FROM apng_files
Any row where GIMP appears as a parent of a shell, interpreter, or LOLBin is a confirmed investigation. The APNG file sweep gives you the delivery artifact for sandbox detonation and hash-based scoping across the rest of the fleet.
Remediation & Verification Script
Use this PowerShell script to inventory GIMP installations on Windows endpoints, flag vulnerable (unpatched) versions, and — as a stopgap — restrict execution pending patching. For Linux fleets, an equivalent Bash check follows.
# CVE-2026-92183 (ZDI-26-713) - GIMP APNG buffer overflow inventory & mitigation check
# Run elevated. Audits GIMP installs and reports patch status.
$results = @()
# 1. Locate GIMP installations (registry uninstall keys + common paths)
$uninstallPaths = @(
'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*',
'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*'
)
$gimpApps = Get-ItemProperty $uninstallPaths -ErrorAction SilentlyContinue |
Where-Object { $_.DisplayName -match 'GIMP' } |
Select-Object DisplayName, DisplayVersion, InstallLocation
foreach ($app in $gimpApps) {
$results += [PSCustomObject]@{
Product = $app.DisplayName
Version = $app.DisplayVersion
InstallPath = $app.InstallLocation
Status = 'REVIEW - Verify against patched GIMP release for CVE-2026-92183'
}
}
# 2. Check for portable/standalone installs outside the registry
$commonPaths = @("$env:ProgramFiles\GIMP*", "${env:ProgramFiles(x86)}\GIMP*", "$env:LOCALAPPDATA\Programs\GIMP*")
foreach ($p in $commonPaths) {
Get-ChildItem $p -Recurse -Filter 'gimp*.exe' -ErrorAction SilentlyContinue |
ForEach-Object {
$results += [PSCustomObject]@{
Product = 'GIMP (standalone/portable)'
Version = $_.VersionInfo.ProductVersion
InstallPath = $_.DirectoryName
Status = 'REVIEW - unmanaged install detected'
}
}
}
# 3. Mitigation (stopgap): rename the APNG plug-in so malicious files cannot be parsed
# Only apply if patching is not immediately possible; this disables APNG support.
$apngPlugins = Get-ChildItem "$env:ProgramFiles\GIMP*" -Recurse -Filter 'file-apng*' -ErrorAction SilentlyContinue
foreach ($plugin in $apngPlugins) {
Write-Warning "APNG plugin found: $($plugin.FullName)"
# Uncomment to disable as a stopgap:
# Rename-Item $plugin.FullName ($plugin.FullName + '.disabled') -Force
}
if ($results.Count -eq 0) { Write-Host '[+] No GIMP installations detected on this host.' }
else { $results | Format-Table -AutoSize }
#!/bin/bash
# CVE-2026-92183 - GIMP inventory and APNG plugin check (Linux)
# Run with sudo for complete package visibility.
echo "=== GIMP package inventory ==="
if command -v dpkg &>/dev/null; then
dpkg -l | grep -i gimp || echo "No GIMP packages found (dpkg)"
elif command -v rpm &>/dev/null; then
rpm -qa | grep -i gimp || echo "No GIMP packages found (rpm)"
fi
if command -v flatpak &>/dev/null; then
echo "=== Flatpak installs ==="
flatpak list | grep -i gimp || echo "No GIMP Flatpak found"
fi
if command -v snap &>/dev/null; then
echo "=== Snap installs ==="
snap list 2>/dev/null | grep -i gimp || echo "No GIMP Snap found"
fi
echo "=== APNG plugin locations ==="
find /usr/lib/gimp /usr/lib64/gimp /usr/share/gimp ~/.config/GIMP -name '*apng*' 2>/dev/null
echo ""
echo "ACTION: Update GIMP via your package manager to the release containing the"
echo "CVE-2026-92183 fix (e.g., apt update && apt upgrade gimp, or flatpak update)."
echo "Stopgap: remove/rename the file-apng plugin until patched."
Remediation
-
Patch GIMP immediately. Apply the GIMP release containing the CVE-2026-92183 fix as published via the GIMP project's official channels (gimp.org) and the ZDI advisory at zerodayinitiative.com/advisories/ZDI-26-713. Inventory first — the script above will find installs your SCCM/Intune catalog may have missed, including Flatpak, Snap, and portable deployments that fall outside standard patching.
-
Apply the stopgap if patching must wait. Removing or renaming the
file-apngplug-in prevents GIMP from parsing APNG content at all. Users lose animated-PNG editing, but the vulnerable code path is closed. This is a defensible temporary control for high-risk user populations. -
Block or flag APNG at the perimeter (temporarily). Configure email gateways and web proxies to flag or strip
.apngattachments andimage/apngMIME content until patching is complete. APNG is rare in legitimate business traffic; the false-positive cost of a temporary block is low. -
Reduce the execution blast radius. Ensure users run GIMP — and everything else — without local administrator rights. Enforce attack surface reduction rules, exploit protection (DEP/ASLR are baseline; verify they're enabled for the GIMP binaries via Windows Exploit Protection), and EDR coverage on endpoints where creative tools are installed.
-
Hunt retroactively. Run the KQL and VQL hunts above across at least the last 14–30 days. A memory-corruption exploit that failed may have crashed GIMP; one that succeeded may show GIMP spawning children or unexpected outbound connections from the workstation shortly after an image file was received.
-
Governance follow-up. Add GIMP and similar open-source creative tools to your formal software inventory and vulnerability management scope. Shadow IT with network-reachable file parsers is a recurring initial-access pattern — this CVE is the reminder, not the exception.
Related Resources
Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.