Skip to main content

CVE-2026-107392: CWE-248: Uncaught Exception in Borewit music-metadata

0
Medium
Published: 10/08/2026 (10/08/2026, 19:40:45 UTC)
Source: CVE Database V5
Vendor/Project: Borewit
Product: music-metadata

Description

## Summary `DsfParser.parseChunks` skips an unrecognised chunk's payload with an **un-awaited** call: ```js this.tokenizer.ignore(Number(chunkHeader.size) - ChunkHeader.len); // lib/dsf/DsfParser.js:51 — no await ``` `ChunkHeader.len` is 12. A crafted `.dsf` chunk with `id != 'fmt '` and `size` in `0..11` makes the argument negative; strtok3 (≥ 10.3.5) throws `RangeError` on a negative `ignore`. Because the call is fire-and-forget, the rejection is **detached from the `parseBuffer()` promise chain** → unhandled rejection → Node's default (≥ 15) **crashes the process** — **after** `parseBuffer()` already resolved, so a caller's `try/catch` catches nothing and is still taken down. Residual of GHSA-v6c2-xwv6-8xf7: the ASF site was fixed in 11.12.3 (size validation) and strtok3 now throws on negative `ignore`; the DSF site was never validated, and its missing `await` escalates that throw into an **uncatchable** crash. ## Root cause (`lib/dsf/DsfParser.js:34-56`) ```js while (bytesRemaining >= ChunkHeader.len) { // ChunkHeader.len = 12 const chunkHeader = await this.tokenizer.readToken(ChunkHeader); // { id, size } switch (chunkHeader.id) { case 'fmt ': { ...; return; } default: this.tokenizer.ignore(Number(chunkHeader.size) - ChunkHeader.len); break; // size<12 -> negative, no await } bytesRemaining -= chunkHeader.size; } ``` strtok3 `AbstractTokenizer.ignore` (L78-79): `if (length < 0) throw new RangeError('ignore length must be ≥ 0 bytes');` ## Steps to reproduce `repro/` — public API only, Node's default unhandled-rejection mode, `try/catch` around the parse: ``` npm install && node poc.mjs ``` Confirmed on 11.14.0: ``` [app] parseBuffer() RESOLVED — the caller saw no error to catch. RangeError: ignore length must be ≥ 0 bytes at DsfParser.parseChunks (.../lib/dsf/DsfParser.js:51) <process exits non-zero — the "process survived" line never prints> ``` ## Impact DoS: a single crafted `.dsf` (or any file with the `DSD ` magic) crashes the Node process of any app parsing untrusted audio with music-metadata (2.2M weekly downloads). The crash bypasses the caller's error handling, so even apps that correctly `try/catch` per-file parsing are killed — one malicious upload can take down a shared server/worker. ## Remediation Add `await` on line 51 (makes the `RangeError` a catchable parse error), and validate `chunkHeader.size >= ChunkHeader.len` before the skip (as the ASF fix did; also guards the loop counter). Audit other parsers for un-awaited `tokenizer.ignore()`/`readToken()`. ## Scope / honesty Requires the DSF path (a `DSD `-magic file — normal auto-detection). Relies on Node's default unhandled-rejection mode (`throw`, default since Node 15); the point is that the standard defensive per-parse `try/catch` does not protect against it. Crash (availability), not disclosure/RCE. Negatives confirmed alongside: ASF infinite loop fixed; negative-`ignore` infinite-loop class closed at strtok3; unbounded allocation bounded by strtok3's read bound-check. ## Credits Issue also reported by @ryu7eroo

CVSS v3.1

Score 6.2medium

Attack Vector
Local
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Affected software

Borewit

music-metadata

Affected versions
<11.15.0

AI-Powered Analysis

Machine-generated threat intelligence

AILast updated: 10/08/2026, 21:04:46 UTC

Technical Analysis

The music-metadata library's DSF parser, before version 11.15.0, calls tokenizer.ignore without awaiting the promise and does not reject chunk sizes smaller than the 12-byte header. A crafted DSF input can cause a negative ignore length, triggering a RangeError that becomes an unhandled rejection under Node.js default behavior. This unhandled exception can cause the process to crash after the parse call appears to resolve, bypassing try/catch error handling. The vulnerability impacts availability only and requires the DSF parsing path. The issue is resolved in version 11.15.0.

Potential Impact

An attacker can cause the music-metadata process to crash by providing a specially crafted DSF input file. This results in denial of service (availability loss) but does not impact confidentiality or integrity. Exploitation requires triggering the DSF parsing code path.

Mitigation Recommendations

Upgrade music-metadata to version 11.15.0 or later, where this issue is fixed. No other mitigation is required as the vulnerability is resolved in the official patch.

Pro Console: star threats, build custom feeds, automate alerts via Slack, email & webhooks.Upgrade to Pro

Technical Details

Data Version
5.2
Assigner Short Name
GitHub_M
Date Reserved
2026-10-07T21:07:54.989Z
Cvss Version
3.1
State
PUBLISHED

Threat ID: 6ac7feec2cdf04f656318be7

Added to database: 10/08/2026, 20:37:00 UTC

Last enriched: 10/08/2026, 21:04:46 UTC

Last updated: 10/09/2026, 00:08:25 UTC

Views: 8

Community Reviews

0 reviews

Crowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.

Sort by
Loading community insights…

Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.

Actions

PRO

Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.

Please log in to the Console to use AI analysis features.

Need more coverage?

Upgrade to Pro Console for AI refresh and higher limits.

For incident response and remediation, OffSeq services can help resolve threats faster.

Latest Threats

Breach by OffSeqOFFSEQFRIENDS — 25% OFF

Check if your credentials are on the dark web

Instant breach scanning across billions of leaked records. Free tier available.

Scan now
OffSeq TrainingCredly Certified

Lead Pen Test Professional

Technical5-day eLearningPECB Accredited
View courses