← Back to Feed CACHED · 2026-07-01 01:25:00 · CACHE_KEY CVE-2025-48798
CVE-2025-48798 · CWE-416 · Disclosed 2025-05-27

A flaw was found in GIMP when processing XCF image files

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

A booby-trapped GIMP save-file that only detonates when a designer double-clicks it

CVE-2025-48798 is a use-after-free in xcf_load_image() inside app/xcf/xcf-load.c, the loader for GIMP's native XCF file format. A malformed XCF can free an object and then have GIMP dereference the stale pointer, giving the attacker a shot at arbitrary code execution in the context of the user running GIMP. It affects GIMP 2.10.x through 2.10.38 and was fixed in 2.10.40 upstream, with backports in Debian bookworm (2.10.34-1+deb12u3), Debian bullseye LTS (2.10.22-4+deb11u3), SUSE (2.10.30-150400.3.20.1), and Mageia.

The vendor HIGH (7.3) rating is technically defensible per the CVSS vector (AV:L/AC:L/PR:L/UI:R) but overstates operational risk. XCF is a proprietary GIMP-only container; users almost never receive .xcf files from untrusted sources the way they do PDFs, Office docs, or PNGs. Delivery friction is high, the blast radius is a single desktop user account, and there is no server-side or headless GIMP footprint in a typical enterprise. This is a MEDIUM for practical purposes.

"Client-side XCF parser UAF that needs a user to open a proprietary GIMP file — desktop-only, no lateral value."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Craft a malicious XCF

Attacker constructs an XCF file that triggers the use-after-free in xcf_load_image, using techniques similar to the ZDI-disclosed GIMP XCF fuzz corpus. Heap grooming is required to convert the UAF into a controllable primitive. Reliable RCE on modern glibc with ASLR/relro is non-trivial but demonstrated by multiple prior GIMP XCF bugs.
Conditions required:
  • knowledge of GIMP heap layout on target build
  • target running vulnerable 2.10.x
Where this breaks in practice:
  • ASLR + full RELRO on most modern Linux builds
  • distro hardening flags (-D_FORTIFY_SOURCE=2, stack canaries)
Detection/coverage: No scanner signatures for weaponized XCFs; YARA rules would be bespoke.
STEP 02

Deliver the file to a GIMP user

Attacker gets the XCF onto a target workstation via phishing attachment, malicious download link, or a shared design/asset drop. XCF's .xcf extension is unusual outside creative/design teams, so credible pretexts require targeting: game studios, VFX shops, marketing/design departments, open-source contributors.
Conditions required:
  • target has GIMP installed and used regularly
  • attacker knows the user handles XCF assets
Where this breaks in practice:
  • .xcf is not a routine attachment — high suspicion
  • secure email gateways (Proofpoint, Mimecast) may not detonate but will flag unusual attachment types
  • browser download warnings on unknown MIME
Detection/coverage: Email gateway attachment-type policies; EDR file-write telemetry.
STEP 03

User opens the XCF in GIMP

The victim must double-click / File→Open the file in GIMP — UI:R is a hard requirement. Preview handlers do not invoke the full XCF parser. There is no auto-open, drive-by, or headless server pathway in a default enterprise environment.
Conditions required:
  • user actively opens the file in GIMP
Where this breaks in practice:
  • Users rarely open unsolicited XCFs
  • no thumbnailer RCE path in the referenced sink
Detection/coverage: EDR process-tree telemetry: gimp opening a file from Downloads/ or a mail-quarantine path.
STEP 04

UAF → code execution as the desktop user

Successful exploitation yields code execution under the invoking user's UID — no privilege escalation on its own. Attacker uses this as an initial access foothold on the workstation, then chains to local priv-esc, credential theft (browser cookies, SSH keys, ~/.aws), or C2 beacon.
Conditions required:
  • successful heap primitive → RIP control
  • no MAC policy (SELinux/AppArmor) confining GIMP
Where this breaks in practice:
  • SELinux user_home_t on RHEL/Fedora limits post-exploit reach
  • EDR behavioral rules on gimp spawning shells
  • no default AppArmor profile on Debian/Ubuntu limits this friction
Detection/coverage: EDR anomaly: GIMP spawning bash, curl, python, or making outbound C2 — high-confidence detection.
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNone observed. No public campaigns, no incident-response reporting.
KEV listedNo.
EPSS0.0017 (~0.17%, well below action threshold)
Public PoCNo weaponized PoC public as of assessment; ZDI-style crash corpuses exist for prior GIMP XCF bugs and could be adapted.
CVSS vectorCVSS:3.1/AV:L/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:HLocal, User Interaction Required, low-priv attacker
CWECWE-416 Use-After-Free in xcf_load_image (app/xcf/xcf-load.c)
Affected versionsGIMP 2.10.x ≤ 2.10.38; GIMP 3.0 branch also patched via parallel commits
Fixed versionsUpstream 2.10.40; Debian bookworm 2.10.34-1+deb12u3; Debian bullseye LTS 2.10.22-4+deb11u3; SUSE 2.10.30-150400.3.20.1; Mageia MGASA-2026-0012; RHEL via access.redhat.com/security/cve/cve-2025-48798
Disclosure2025-05-27, credited via ZDI/Trend Micro pipeline (bundled with sibling XCF UAF/double-free CVEs)
Exposure populationNo internet-facing exposure — desktop app. Enterprise install base concentrated in design, marketing, open-source contributor endpoints. Not on servers.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.3/10)

This is a client-side file-format parser bug in a desktop-only application, requiring the victim to explicitly open a proprietary GIMP-native XCF file — a format that virtually never arrives from untrusted sources in normal workflows. The single most decisive factor is delivery friction against a niche file type combined with blast radius capped at one non-privileged desktop user; there is no server, service, or fleet-scale role GIMP plays.

HIGH vendor score overstates real-world risk
HIGH no server-side / headless attack surface exists
MEDIUM exploit reliability against modern hardened Linux/macOS builds

Why this verdict

  • Local + UI:R gate: The CVSS vector itself concedes this needs a user to double-click a hand-crafted XCF. No wormability, no drive-by, no server component.
  • Proprietary file format: XCF is GIMP-only. Users don't routinely email XCFs — unlike PDFs or Office docs, an unsolicited .xcf attachment is inherently suspicious and easy to policy-block at the mail gateway.
  • Blast radius = one user account: Code executes as the invoking user, no service/daemon context. Role multiplier: GIMP is 100% workstation software — there is no domain controller, CI runner, hypervisor, or identity-provider role for this component. The role floor is (a) low-value desktop, so no HIGH/CRITICAL role floor applies.
  • No KEV, EPSS 0.0017: Zero real-world exploitation signal seven months post-disclosure.
  • Modern mitigations bite hard: ASLR, RELRO, FORTIFY_SOURCE, EDR behavioral detection on gimp → shell all substantially raise exploit cost.
  • Patch is trivial: Distro package update, no downtime, no dependency risk — the 365-day remediation window is more than adequate.

Why not higher?

HIGH would imply a chain that either bypasses user interaction, hits a server role, or has active exploitation. None of those apply: UI:R is mandatory, GIMP has no server surface, EPSS is near-zero, and KEV does not list it. The vendor's 7.3 mechanically follows CVSS scoring but ignores that XCF is not a plausible delivery vector at enterprise scale.

Why not lower?

LOW/IGNORE is wrong because this is a remote-code-execution primitive on a still-widely-installed desktop tool. Targeted actors going after design shops, game studios, or high-value open-source contributors have a credible use case for this. Backlog-only treatment (LOW) would ignore the credential-theft-from-workstation follow-on.

05 · Compensating Control

What to do — in priority order.

  1. Block .xcf attachments at the email gateway — XCF has no legitimate business use in email for 95%+ of organizations. Add .xcf to Proofpoint/Mimecast/M365 mail-flow attachment blocklists. No mitigation SLA at MEDIUM — implement opportunistically within the 365-day remediation window.
  2. Push GIMP patch via existing endpoint software management — Roll upstream 2.10.40 or the distro-backported package (Debian 2.10.34-1+deb12u3, SUSE 2.10.30-150400.3.20.1) through Intune/Jamf/Ansible/unattended-upgrades. Standard 365-day remediation SLA — bundle with next quarterly workstation image refresh.
  3. EDR rule: alert on gimp spawning shells or network utilities — Detect post-exploitation with a behavioral rule that fires when the gimp process creates a child bash, sh, powershell, curl, wget, nc, python. This catches this CVE and any future GIMP parser bug.
  4. Restrict GIMP install to roles that need it — Design, marketing, and engineering-artwork users typically. Remove GIMP from finance/HR/exec workstations via app-inventory tooling — you don't need to patch what isn't installed.
What doesn't work
  • Perimeter firewalls / WAF: No network-facing service — irrelevant.
  • MFA: Post-file-open, MFA offers no help against local code execution.
  • Disabling macros: XCF is not an Office format; there is no macro toggle.
  • Antivirus signature scanning: Weaponized XCFs will trivially evade signature detection; behavioral EDR is the only useful layer.
06 · Verification

Crowdsourced verification payload.

Run on each Linux/macOS workstation (or push via your config-management tool) as any user. Invoke: bash check-gimp-cve-2025-48798.sh. No root required — reads GIMP version from the binary and compares against the fixed threshold.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check-gimp-cve-2025-48798.sh
# Detects vulnerable GIMP installations for CVE-2025-48798 (XCF UAF)
# Exit codes: 0 PATCHED, 1 VULNERABLE, 2 UNKNOWN
set -u

FIXED_UPSTREAM="2.10.40"
FIXED_DEB12="2.10.34-1+deb12u3"
FIXED_DEB11="2.10.22-4+deb11u3"

ver_ge() {
  # returns 0 if $1 >= $2 using dpkg --compare-versions if available, else sort -V
  if command -v dpkg >/dev/null 2>&1; then
    dpkg --compare-versions "$1" ge "$2"
    return $?
  fi
  [ "$(printf '%s\n%s\n' "$2" "$1" | sort -V | head -n1)" = "$2" ]
}

GIMP_BIN="$(command -v gimp || command -v gimp-2.10 || true)"
if [ -z "$GIMP_BIN" ]; then
  echo "PATCHED: GIMP not installed"
  exit 0
fi

# Prefer distro package version when available (captures backports)
PKG_VER=""
if command -v dpkg-query >/dev/null 2>&1; then
  PKG_VER="$(dpkg-query -W -f='${Version}' gimp 2>/dev/null || true)"
elif command -v rpm >/dev/null 2>&1; then
  PKG_VER="$(rpm -q --qf '%{VERSION}-%{RELEASE}' gimp 2>/dev/null || true)"
fi

UPSTREAM_VER="$($GIMP_BIN --version 2>/dev/null | awk '{print $NF}')"
if [ -z "$UPSTREAM_VER" ]; then
  echo "UNKNOWN: could not determine GIMP version"
  exit 2
fi

echo "Detected GIMP upstream version: $UPSTREAM_VER"
[ -n "$PKG_VER" ] && echo "Detected distro package version: $PKG_VER"

# Backport check for Debian bookworm / bullseye
if [ -n "$PKG_VER" ] && command -v dpkg >/dev/null 2>&1; then
  if dpkg --compare-versions "$PKG_VER" ge "$FIXED_DEB12" 2>/dev/null; then
    echo "PATCHED: distro-backport $PKG_VER >= $FIXED_DEB12"
    exit 0
  fi
  if dpkg --compare-versions "$PKG_VER" ge "$FIXED_DEB11" 2>/dev/null; then
    echo "PATCHED: distro-backport $PKG_VER >= $FIXED_DEB11"
    exit 0
  fi
fi

if ver_ge "$UPSTREAM_VER" "$FIXED_UPSTREAM"; then
  echo "PATCHED: upstream $UPSTREAM_VER >= $FIXED_UPSTREAM"
  exit 0
fi

echo "VULNERABLE: GIMP $UPSTREAM_VER is below fixed upstream $FIXED_UPSTREAM and no recognized backport detected"
exit 1
07 · Bottom Line

If you remember one thing.

TL;DR
Reassessed MEDIUM (5.3) — the vendor's 7.3 is technically valid but ignores that this needs a user to open a proprietary GIMP file, has zero server surface, and blast radius stops at one desktop UID. Monday morning: (1) push .xcf to your email attachment blocklist and add an EDR rule for gimp spawning shells/network tools — since this is MEDIUM, per the noisgate mitigation SLA there is no formal mitigation deadline, so treat these as opportunistic wins to complete within the next patch cycle; (2) schedule the GIMP package update (upstream 2.10.40 or your distro backport) into the standard workstation patch train under the noisgate remediation SLA of ≤365 days — bundle it with the next quarterly base-image refresh. Do not rearrange this week's queue for this CVE unless you have design/VFX teams handling untrusted XCF assets, in which case bring them forward as a targeted 30-day rollout.

Sources

  1. NVD — CVE-2025-48798
  2. Red Hat Security — CVE-2025-48798
  3. Wiz Vulnerability DB — CVE-2025-48798
  4. Debian Security Tracker — gimp
  5. Debian DSA-5939-1
  6. Debian LTS DLA 4342-1
  7. Mageia MGASA-2026-0012
  8. SUSE openSUSE-SU-2025:02164-1
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.