Skip to main content

AdPlug CVE-2026-110875

| EUVDEUVD-2026-102350 MEDIUM
Out-of-bounds Write (CWE-787)
2026-10-15 VulnCheck GHSA-jrh8-g7qr-96vg
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 .ksm module to victim
  2. Exploit
    Victim opens file in AdPlug ≤2.4
  3. Execution
    CksmPlayer::update() writes past databuf[2048]
  4. Impact
    Heap corruption and crash (DoS)

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

Requires the victim to open or play an attacker-supplied crafted .ksm (Ken Silverman KSM) module file in an application that uses AdPlug ≤2.4; the malicious file must contain notes arranged to share a single time slot so the per-slot write count exceeds the fixed databuf[2048] buffer. No special configuration is needed - default handling of .ksm files is vulnerable. Exploitation is LIMITED by its local attack vector (the file must reach and be processed on the target) and by required user interaction (passive: opening/playing the file); it is not remotely or network-triggerable without that action, which substantially reduces real-world risk despite the unauthenticated nature of the parsing code.

Impact

This is a genuine but modest-severity memory-safety flaw, not a high-urgency priority. The authoritative signal is the vendor-supplied CVSS 4.0 vector (AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:H), yielding 6.9 (Medium): exploitation is local and requires the victim to open/play a crafted .ksm file (passive user interaction), with impact dominated by availability (VA:H) and only low integrity (VI:L), no confidentiality impact. CWE-787 (out-of-bounds write) technically carries code-execution potential, but the reporter (VulnCheck) and description scope the realistic outcome to memory corruption and denial of service, consistent with VC:N/VI:L. No EPSS score, no CISA KEV listing, and no explicit POC/exploit-code flag were provided in the input; a detailed third-party technical writeup (hackmd) and an upstream issue exist, which raise the practical likelihood that a crash/PoC is reproducible, but that is INFERRED from the references, not a confirmed weaponized exploit. There is no conflict among the signals - local vector plus DoS-centric impact plus absence of KEV/EPSS all point to a low real-world exploitation urgency. Priority should be driven by patch hygiene for anyone embedding AdPlug, not emergency response.

Exploit ScenarioDerived

An attacker crafts a malicious .ksm AdLib module whose notes are arranged to share a single time slot, then distributes it (e.g., via a music archive or download) to a victim who opens or plays it in an application using AdPlug ≤2.4. When CksmPlayer::update() processes the file, it writes past the fixed databuf[2048] array, corrupting the heap and crashing the player. A detailed technical writeup exists, but no confirmed weaponized exploit code is referenced in the input.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 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

AdPlug through 2.4 contains a heap-based buffer overflow in the KSM (Ken Silverman Music) module player, CksmPlayer::update() in src/ksm.cpp, where register writes accumulated for a single time slot overflow the fixed databuf[2048] array and corrupt the heap-resident player object. A crafted .ksm module whose notes share one time slot triggers the out-of-bounds write without authentication (CVSS PR:N), but the attacker-supplied file must reach and be opened or played on the target (AV:L, UI:R/UI:P), so the real-world exposure is local and interaction-dependent, with the dominant impact being availability loss (A:H) and minor integrity effects (I:L) rather than code execution. An upstream fix is available in GitHub PR #295; no public exploit code was identified at time of analysis.

RemediationAI

Upstream fix available (PR/commit); a released patched version is not independently confirmed in the provided data - apply the vendor patch or upgrade AdPlug to a build that includes https://github.com/adplug/adplug/pull/295, which adds the bufnum + 15 > sizeof(databuf) bounds check in src/ksm.cpp plus related hardening in ksm.cpp, ksm.h, coktel.cpp, rat.cpp, sop.cpp and vgm.cpp (see also the issue at https://github.com/adplug/adplug/issues/292). Until a patched build can be deployed, stop processing untrusted .ksm files: block or strip .ksm input at the application boundary or remove KSM support from the build, accepting the trade-off that legitimate KSM playback is lost; alternatively, sandbox the parsing process (run the player as a low-privilege user, restrict its filesystem and memory access with seccomp/AppArmor/container isolation, and keep ASLR enabled) so that the resulting heap corruption degrades to a contained crash instead of host compromise - this reduces, but does not eliminate, the denial-of-service impact (A:H) and the minor memory-corruption effects (I:L). Rewriting or sanitizing malformed .ksm files is not a reliable mitigation because the trigger is a valid structural property of the format (multiple notes in one time slot), not an obvious file-level anomaly.

Affected VersionsENISA

adplug 0 ≤2.4

Affected Packages

euvd adplug 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

AdPlug is a C++ library for playing AdLib/OPL2-based music formats, and the KSM handler (CksmPlayer, src/ksm.cpp, referenced lines 99-229) converts parsed module events into OPL register writes buffered in the fixed-size member array databuf[2048]. The root cause is CWE-787 (out-of-bounds write): the per-time-slot write counter (bufnum) is never checked against sizeof(databuf) before writes, so a .ksm file that packs many notes into one time slot drives the index past the 2048-byte boundary and overflows into adjacent heap memory occupied by the player object. The upstream diff in PR #295 confirms the class of defect by adding an explicit guard (if (bufnum + 15 > sizeof(databuf)) break;), and also hardens related indexing issues in the same codebase (adlibfreq array resized 63 to 64, a zero-division guard on quanter, instrument-range checks in rat.cpp, and bounds checks in coktel.cpp, sop.cpp and vgm.cpp). The single CPE entry cpe:2.3:a:adplug:adplug:*:*:*:*:*:*:*:* reflects that all released AdPlug versions up to and including 2.4 are affected.

Know when Adplug 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

Victim must open a local crafted file (AV:L, UI:R); no privileges needed (PR:N); impact is primarily a crash (A:H) with limited heap 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

AdPlug through 2.4 contains a heap-based buffer overflow in CksmPlayer::update() in src/ksm.cpp that writes past the fixed databuf[2048] array without bounds checking. Attackers can supply a crafted .ksm module whose notes share one time slot to overflow the heap player object, causing memory corruption and denial of service.

Threat Intelligence Overview

EPSS Score
0.1%
Top 97% exploitable
Prevalence
Low
niche retro AdLib/OPL music playback library, limited media-player footprint
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 Yes
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.

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

More in Adplug

View all
CVE-2019-15151 CRITICAL POC
9.8 Aug 18

AdPlug 2.3.1 has a double free in the Cu6mPlayer class in u6m.h. Rated critical severity (CVSS 9.8), this vulnerability

CVE-2018-17825 CRITICAL POC
9.8 Oct 01

An issue was discovered in AdPlug 2.3.1. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable,

CVE-2019-14734 HIGH POC
8.8 Aug 07

AdPlug 2.3.1 has multiple heap-based buffer overflows in CmtkLoader::load() in mtk.cpp. Rated high severity (CVSS 8.8),

CVE-2019-14733 HIGH POC
8.8 Aug 07

AdPlug 2.3.1 has multiple heap-based buffer overflows in CradLoader::load() in rad.cpp. Rated high severity (CVSS 8.8),

CVE-2019-14732 HIGH POC
8.8 Aug 07

AdPlug 2.3.1 has multiple heap-based buffer overflows in Ca2mLoader::load() in a2m.cpp. Rated high severity (CVSS 8.8),

CVE-2019-14692 HIGH POC
8.8 Aug 06

AdPlug 2.3.1 has a heap-based buffer overflow in CmkjPlayer::load() in mkj.cpp. Rated high severity (CVSS 8.8), this vul

CVE-2019-14691 HIGH POC
8.8 Aug 06

AdPlug 2.3.1 has a heap-based buffer overflow in CdtmLoader::load() in dtm.cpp. Rated high severity (CVSS 8.8), this vul

CVE-2019-14690 HIGH POC
8.8 Aug 06

AdPlug 2.3.1 has a heap-based buffer overflow in CxadbmfPlayer::__bmf_convert_stream() in bmf.cpp. Rated high severity (

CVE-2026-110877 MEDIUM POC
6.8 Oct 15

Heap out-of-bounds read in AdPlug through 2.4 can crash an application that parses a truncated TwinTeam DMO file, yieldi

CVE-2026-110876 MEDIUM POC
6.8 Oct 15

Out-of-bounds read in AdPlug through 2.4 lets a crafted XSM file (with 'ofTAZ!' signature and a song byte of 0x80 or hig

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