Skip to main content

libmodplug CVE-2026-111270

| EUVDEUVD-2026-102525 MEDIUM
Out-of-bounds Write (CWE-787)
2026-10-15 VulnCheck GHSA-rxvf-jg5h-5fv5
6.9
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Deliver crafted DSM file to victim
  2. Exploit
    Victim's app parses PATT chunks via ReadDSM()
  3. Execution
    nPat exceeds MAX_PATTERNS, out-of-bounds heap write
  4. Impact
    Heap corruption crashes consuming process

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Bounds checking, write limits
MITRE ATT&CK

2 techniques across 2 tactics: Execution, Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires an application built against libmodplug through 0.8.9.1 to parse an attacker-supplied DSM module file whose header declares more than 240 PATT (pattern) chunks, or whose patt_len field wraps, so that nPat is never bounded by MAX_PATTERNS in CSoundFile::ReadDSM(). The practical trigger is a victim opening or loading the crafted file (CVSS UI:P), which limits exploitation to workflows that process untrusted module files. Impact is bounded to heap corruption and process crash (availability) with only limited integrity effect and no confidentiality disclosure; no authentication is required, but no remote-service exposure exists absent an application that ingests such files.

Impact

Signals converge on a medium-severity memory-safety defect, not a top-tier priority. The CVSS 4.0 vector (AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:H, base 6.9) frames this as a locally-triggered flaw requiring a victim to process a malicious file, with impact dominated by availability (VA:H, i.e. process crash) and only limited integrity (VI:L) and zero confidentiality (VC:N). The CWE-787 out-of-bounds write theoretically raises the specter of code execution, but the description and the vendor advisory characterize the realistic outcome as heap corruption that 'crash[es] the consuming process,' which is consistent with the VA:H / VI:L / VC:N emphasis rather than a full RCE. No EPSS score, KEV listing, or confirmed public exploit is present in the input, so there is no evidence of active or at-scale exploitation; the attached hackmd write-up is a technical analysis whose exploit-code status is not confirmed by the provided data. Note one tension to verify: the 4.0 vector uses AV:L (local) while the attack is actually driven by delivering a crafted file that the target application parses - the 'local' rating reflects that the attacker does not touch the network directly, not that physical/shell access is needed. Overall this reads as a genuine but moderate bug: patch during normal cycles, prioritize only where libmodplug parses untrusted/attacker-supplied module files.

Exploit ScenarioDerived

An attacker crafts a malicious DSM module file containing more than 240 PATT chunks (or a wrapping patt_len value) and delivers it to a victim who opens it in a media player or application that uses libmodplug ≤0.8.9.1. When CSoundFile::ReadDSM() parses the file without validating nPat against MAX_PATTERNS, it writes past the allocated pattern array, corrupting the heap and crashing the process. No public exploit has been identified in the provided data, though a technical write-up describing the flaw is referenced.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 15, 2026

Processing a malicious DSM module file with libmodplug through 0.8.9.1 triggers a heap-based out-of-bounds write in CSoundFile::ReadDSM(), corrupting heap memory and crashing the consuming process. Exploitation is local in nature: it requires a victim to open or load a crafted DSM file whose header declares more than 240 PATT chunks or whose patt_len value wraps, defeating the missing nPat bound against MAX_PATTERNS. Impact is bounded to availability (process crash) with limited integrity effect and no confidentiality disclosure, and no public exploit code was identified at time of analysis; a public technical write-up of the defect exists, and the risk converges on a medium-severity memory-safety issue rather than a top-tier priority.

RemediationAI

No vendor-released patch was identified at time of analysis, so remediation depends on mitigation until an upstream fix lands. The most direct measure is to apply a source-level bounds check so that nPat is rejected once it exceeds MAX_PATTERNS (i.e. abandon parsing when the declared pattern count exceeds 240 or when patt_len wraps), mirroring the missing validation in src/load_dsm.cpp; teams that vendor or package libmodplug can carry this patch themselves, at the trade-off of maintaining a local fork. Where patching is impractical, disable DSM (and ideally other legacy module) parsing in any application that does not legitimately need it, eliminating the vulnerable code path entirely. For workflows that must process untrusted module files, isolate parsing in a separate low-privilege, sandboxed process with memory and crash-recovery limits so a heap-corruption crash cannot affect the parent or host; this adds architectural complexity and latency but contains the availability impact. Pre-scanning or rejecting untrusted DSM files with more than 240 PATT chunks, or with malformed/wrapping length fields, before handing them to libmodplug is a useful but weak control since it depends on the validator being at least as strict as the parser. Consult https://www.vulncheck.com/advisories/libmodplug-through-0.8.9.1-heap-out-of-bounds-write-via-csoundfile-readdsm and the upstream repository for any subsequent fix, and note that exact fixed versions are not confirmed from the available data.

Affected VersionsENISA

libmodplug 0 ≤0.8.9.1

Affected Packages

euvd libmodplug no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

libmodplug is a library for decoding legacy tracker/module music formats, and its DSM (Digital Sound Module) loader lives in CSoundFile::ReadDSM() in src/load_dsm.cpp. The loader reads the DSM header, iterates PATT (pattern) chunks, and increments an internal pattern counter (nPat) without ever validating it against the MAX_PATTERNS ceiling - the vulnerable logic is the pattern-count handling referenced around lines 130-139 of the upstream source. Because nPat is unbounded, a file declaring more than 240 PATT chunks, or a patt_len value that wraps around, drives the parser to write past the end of a heap allocation. The root-cause class is CWE-787 (out-of-bounds write), and the defect maps to the affected CPE cpe:2.3:a:konstanty_bialkowski:libmodplug:*:*:*:*:*:*:*:*, i.e. the upstream Konstanty Bialkowski project. There is no authentication or network exposure inherent to the library itself; the attack surface is any application that parses attacker-supplied module files with the affected code path.

Know when Libmodplug gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 6.9 MEDIUM
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:H/SC:N/SI:N/SA:N
vuln.today AI 6.1 MEDIUM

File must be opened locally by a victim (AV:L, UI:R), no privileges needed (PR:N); impact is a crash (A:H) with limited heap-write integrity effect (I:L) and no data disclosure (C:N).

3.1 AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:H
4.0 AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Local
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
Passive
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

libmodplug through 0.8.9.1 contains a heap-based out-of-bounds write in CSoundFile::ReadDSM() in src/load_dsm.cpp because nPat is never checked against MAX_PATTERNS. Attackers can supply a crafted DSM file with over 240 PATT chunks or a wrapping patt_len value to corrupt heap memory and crash the consuming process.

Threat Intelligence Overview

EPSS Score
0.1%
Top 98% exploitable
Prevalence
Medium
audio module-playback library historically bundled in various media players
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.1%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
None
System Exposure· derived
Small
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

34
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +34
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.

Memory corruption occurs when a program writes data beyond the boundaries of allocated memory regions or accesses memory in unintended ways, violating the integrity of the process's address space.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy