CVE-2026-107392: CWE-248: Uncaught Exception in Borewit 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
Affected software
Borewit
music-metadata
AI-Powered Analysis
Machine-generated threat intelligence
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.
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 reviewsCrowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.
Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.
Actions
Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.
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
Check if your credentials are on the dark web
Instant breach scanning across billions of leaked records. Free tier available.