CVE-2026-61721 Overview
FluidSynth is a software synthesizer that implements the SoundFont 2 specification and is widely embedded in Linux audio stacks, games, and MIDI toolchains. A heap buffer overflow in the native Downloadable Sounds (DLS) loader affects versions 2.5.0 through 2.5.5. The loader assigns file-controlled wsmp.loop_start and wsmp.loop_length values to samples without invoking fluid_sample_validate() or fluid_sample_sanitize_loop(). A crafted DLS file can position loop points outside the sample buffer, producing out-of-bounds reads during audio rendering. The flaw is tracked under [CWE-122] and is fixed in version 2.5.6.
Critical Impact
A malicious DLS file processed by an application using FluidSynth can trigger out-of-bounds reads, causing memory disclosure, undefined behavior, and denial of service.
Affected Products
- FluidSynth 2.5.0 through 2.5.5 (native DLS loader enabled)
- Builds compiled with the CMake option enable-native-dls=ON
- Downstream applications and distributions bundling vulnerable FluidSynth releases
Discovery Timeline
- 2026-09-18 - CVE-2026-61721 published to NVD
- 2026-09-23 - Last updated in NVD database
Technical Details for CVE-2026-61721
Vulnerability Analysis
The defect resides in the native DLS parser located in src/sfloader/fluid_dls.cpp. When constructing fluid_sample_t objects from parsed DLS data, the loader copies wsmp chunk fields directly into the sample descriptor. The loop boundaries (loop_start and loop_end) are attacker-controlled and never bounds-checked against the sample buffer extents defined by start and end. During playback, the audio rendering path reads sample data at those loop positions, dereferencing memory outside the allocated buffer.
Because the parser feeds untrusted values straight into the rendering engine, the resulting out-of-bounds read can leak adjacent heap memory into the audio output or crash the process. Builds compiled with enable-native-dls=OFF are not exposed, since the vulnerable parser is excluded at build time.
Root Cause
The loader omits the standard sample validation routines that other FluidSynth loaders apply. Specifically, fluid_sample_validate() and fluid_sample_sanitize_loop() are never called for samples produced by the native DLS path. Without these checks, invalid loop ranges bypass all guardrails and are treated as authoritative sample metadata.
Attack Vector
Exploitation requires an application built against a vulnerable FluidSynth release to load an attacker-supplied DLS file. This can occur through a music player, game engine, or MIDI rendering service that accepts user-supplied sound banks. No authentication or user interaction beyond opening the file is required by the library itself.
// Patch excerpt from src/sfloader/fluid_dls.cpp
// Fix a Heap buffer overrun for DLS samples (GHSA-59ph-rx8r-8p4j)
std::runtime_error{ "Exception thrown while allocating fluid_sample_t" });
}
+ bool invalid_loops_were_sanitized = false;
for(auto &sample : samples)
{
- auto &fluid = samples_fluid.emplace_back();
+ fluid_sample_t fluid;
fluid.start = sample.start;
fluid.end = sample.end - 1;
fluid.samplerate = sample.samplerate;
Source: FluidSynth commit 2354c2a. The patch restructures sample construction so that loop values are validated and sanitized before being committed to the sample list.
Detection Methods for CVE-2026-61721
Indicators of Compromise
- Crashes or segmentation faults in processes linked against libfluidsynth when opening .dls files
- Audio output containing unexpected noise patterns consistent with uninitialized heap memory being rendered
- Unusual file-open telemetry showing untrusted DLS files being loaded by media applications or MIDI services
Detection Strategies
- Inventory installed FluidSynth versions across Linux, macOS, and Windows hosts and flag any build earlier than 2.5.6
- Inspect distribution package metadata to identify whether FluidSynth was compiled with enable-native-dls=ON
- Use AddressSanitizer or Valgrind in test environments to surface out-of-bounds reads when parsing DLS corpora
Monitoring Recommendations
- Alert on repeated crashes of audio, game, or MIDI processes that consume user-supplied sound banks
- Monitor endpoints for DLS files delivered through email, chat, or download channels and correlate with FluidSynth process activity
- Track patch adoption of fluidsynth packages via configuration management and vulnerability scanning tools
How to Mitigate CVE-2026-61721
Immediate Actions Required
- Upgrade FluidSynth to version 2.5.6 or later on every affected host and container image
- Rebuild any statically linked applications that embed FluidSynth against the patched release
- Restrict which users and services can supply DLS files to applications that call into FluidSynth
Patch Information
The fix is included in the FluidSynth v2.5.6 release and documented in GitHub Security Advisory GHSA-59ph-rx8r-8p4j. The upstream commit adding sample validation and loop sanitization for the native DLS loader is commit 2354c2a.
Workarounds
- Rebuild FluidSynth with the CMake option -Denable-native-dls=OFF to remove the vulnerable parser entirely
- Block or filter .dls files at email gateways and file-sharing services until patching completes
- Run FluidSynth-dependent services under sandboxing (for example, seccomp or AppArmor) to limit the impact of memory disclosure
# Rebuild FluidSynth without the native DLS loader as a temporary mitigation
cmake -S fluidsynth -B build \
-DCMAKE_BUILD_TYPE=Release \
-Denable-native-dls=OFF
cmake --build build --parallel
cmake --install build
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.
