Skip to main content

music-metadata CVE-2026-107391

| EUVDEUVD-2026-95245 HIGH
Uncontrolled Resource Consumption (CWE-400)
2026-10-08 GitHub_M GHSA-f94x-6692-553q
7.5
CVSS 3.1 · NVD
View

Attack ChainAIDerived

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

  1. Access
    Upload crafted 48-byte MP4 to parser
  2. Delivery
    Trigger stsd sample-entry size==0
  3. Exploit
    Zero-advance loop spins synchronously
  4. Execution
    Event loop blocked, memory exhausted
  5. Impact
    Process hang or crash (DoS)

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK

1 technique across 1 tactic: Impact

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

Exploitation Conditions

Exploitable only when the application parses attacker-supplied MP4-family input through music-metadata AND is running the unreleased master-branch code containing commit d2a7d6f (the off += size - 4 change) up to but not including the 11.16.0 fix - no published npm release (11.14.0 or earlier) is vulnerable, which is the dominant limiting factor. No authentication or user interaction is required at the parser level (PR:N/UI:N): any of parseBuffer, parseFile, parseStream, parseBlob, or parseWebStream will trigger it on a crafted MP4 declaring a large entry_count and a first sample-entry size field of 0. The practical limiter for defenders is therefore install method (git/master vs npm) rather than configuration.

Impact

This is a CWE-400 uncontrolled-resource-consumption (DoS) flaw with no confidentiality or integrity impact (C:N/I:N/A:H). The single most important risk signal is NOT the CVSS score but the release status: per the GHSA advisory and the reporter's own note, the vulnerable off += size - 4 change existed ONLY on the public master branch (introduced by commit d2a7d6f after PR #2693) and was NEVER shipped in music-metadata 11.14.0 or any earlier npm release; 11.16.0 is the fix. Consequently, any consumer installing from npm is unaffected, and real-world exploitable exposure is limited to the rare case of installing directly from git/master between the regression and the fix. No EPSS score was provided and the CVE is not in CISA KEV, so there is no evidence of active exploitation; a working crafted reproducer (a 48-byte MP4 buffer) is embedded in the advisory and regression test, so a functional proof-of-concept is public. CONFLICTING SIGNAL worth flagging: NVD scored this AV:L (local, score 6.2), but the advisory explicitly describes the trigger as user-uploaded media processed by services via parseBuffer/parseFile/parseStream/parseBlob/parseWebStream - that is network-delivered attacker data, which argues for AV:N and a higher (~7.5) base score. Verify the attack vector against your deployment: if the parser handles network-uploaded files, treat it as remotely reachable. Net assessment: genuine, easily triggered DoS in code terms, but LOW real-world priority because no released package version is affected.

Exploit ScenarioDerived

An attacker uploads a tiny (48-byte) crafted MP4-family file to a Node.js service that extracts audio/video metadata using music-metadata built from the master branch. The file declares a huge stsd entry_count and a first sample-entry size of 0, so the synchronous StsdAtom.get loop never advances its cursor, pinning one CPU at ~100% and blocking the entire Node event loop until the process is killed or memory is exhausted. A public proof-of-concept buffer exists in the GHSA advisory and the project's regression test.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.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 08, 2026

Unbounded synchronous looping in the unreleased music-metadata master-branch MP4 'stsd' sample-description parser lets a crafted 48-byte MP4-family file pin the Node.js event loop at ~100% CPU while an in-memory sample-description table grows until the process is killed externally or exhausts memory. The regression was introduced after 11.14.0 by commit d2a7d6f (PR #2693, which changed the cursor advance to 'off += size - 4' without guarding for small sizes) and exists only on the public master branch - no published npm release, including 11.14.0 and earlier, contains the vulnerable change, and 11.16.0 ships the fix. Exploitation requires an application that parses attacker-supplied MP4-family input through parseBuffer, parseFile, parseStream, parseBlob, or parseWebStream; the assessed vector is CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H (no authentication, no user interaction, availability-only impact), no public exploit targeting released versions was identified at time of analysis, and the practical limiting factor for defenders is install method (git/master build versus npm release) rather than configuration.

RemediationAI

Vendor-released patch: 11.16.0 - upgrade to music-metadata 11.16.0 (or later) via https://github.com/Borewit/music-metadata/releases/tag/v11.16.0, which contains the bounding checks added by PR #2734 / commit 90a7d52c69e921a0b019592d887acd97b1c8b8a5; because the vulnerable code was never published to npm, anyone on 11.14.0 or earlier is already safe and need not rush, while anyone building from master must pull the fix commit or the 11.16.0 tag immediately. If the code cannot be updated at once, the highest-value compensating control is to run all MP4-family parsing in an out-of-process worker or child process with a hard memory cap and an external SIGKILL timeout (the upstream regression test uses exactly this pattern with --max-old-space-size=512 and a 10s kill signal) - the trade-off is IPC serialization overhead and the need for a supervisor, but in-process timeouts and health checks will NOT work because the loop never yields to the event loop. A cheaper if less complete mitigation is input pre-validation: reject any MP4-family upload whose 'stsd' box declares an entry size of 0 or less than 16, or whose entry_count obviously exceeds the remaining box payload, before handing the buffer to the parser; this is narrow, can be bypassed by nesting or by unusual box layouts, and adds a bespoke parser you must maintain. Blocking large MP4 uploads or restricting metadata parsing to trusted media is a coarse last resort that removes legitimate functionality. Full details, including the advisory text and the exact 48-byte reproducer, are in https://github.com/Borewit/music-metadata/security/advisories/GHSA-f94x-6692-553q and the patch diff at https://github.com/Borewit/music-metadata/pull/2734.

Affected VersionsENISA

music-metadata < 11.16.0

Affected Packages

npm music-metadata fix: 11.16.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in npm

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

Technical ContextAI · show details

The flaw is an uncontrolled-resource-consumption (CWE-400) regression in music-metadata's ISO Base Media File Format (MP4) parsing layer. In lib/mp4/AtomToken.ts, StsdAtom.get() walks the MP4 'stsd' (sample description) box entry table, reading a 32-bit big-endian, fully attacker-controlled per-entry size with Token.UINT32_BE.get and then advancing the cursor by 'size - 4' after the nested SampleDescriptionTable read. The preceding fix (commit d2a7d6f, merged via PR #2693 to resolve issue #2691) replaced the original 'off += size' with 'off += size - 4' to stop over-skipping the first entry, but introduced no validation that size is at least the 4-byte size field (or, per the fix, at least the 16 bytes required for a SampleEntry). With size == 0 the net advance per iteration is exactly zero, so the cursor never moves, the same four bytes are re-read as 'size' on every pass, and an attacker-controlled entry_count (up to 0xFFFFFFFF) keeps the loop running while table.push() grows the array without bound - first hanging, then exhausting memory. The critical amplifier is that StsdAtom.get() is invoked synchronously from strtok3's AbstractTokenizer.readToken with no await point inside the loop, so nothing yields to the Node.js event loop: in-process timeouts, keep-alives, and health checks never fire, and the whole process is blocked until an external supervisor kills it. The parser is cached under CPE cpe:2.3:a:borewit:music-metadata:*:*:*:*:*:*:*:*, but because the vulnerable code was never published to npm, that CPE range overstates real exposure: only master-branch builds at or after d2a7d6f and before the 11.16.0 fix are affected. The upstream fix (PR #2734, commit 90a7d52c69e921a0b019592d887acd97b1c8b8a5) adds explicit boundary checks - a 'Truncated stsd header' error when the header does not fit, a 'Truncated stsd sample entry' error when the size field does not fit, and an 'Invalid stsd sample entry size' error when size < 16 or size > end - off - which bounds iteration by the available atom payload rather than by the attacker-supplied entry_count.

Know when Node.js 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 (GitHub_M) PRIMARY MEDIUM
NVD 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 7.5 HIGH

Crafted MP4 is normally delivered over the network to file-upload/metadata services, so AV:N (not NVD's AV:L); no auth or interaction, and only availability is impacted via event-loop blocking and memory exhaustion.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorNVD

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

Lifecycle Timeline

3
Severity Changed
Oct 13, 2026 - 19:53 NVD
MEDIUM HIGH
CVSS changed
Oct 13, 2026 - 19:53 NVD
6.2 (MEDIUM) 7.5 (HIGH)
Patch available
Oct 08, 2026 - 21:17 EUVD

DescriptionNVD

music-metadata is a metadata parser for audio and video media files. In the public development revision introduced after 11.14.0, a development-branch regression in the MP4 stsd sample-description parser allows an attacker-controlled sample-entry size of zero to prevent the StsdAtom.get cursor from advancing while an attacker-controlled entry_count keeps the synchronous loop running. A crafted MP4-family input can block the Node.js event loop and grow the sample-description table until the process is terminated or exhausts memory. The vulnerable change was present on the public master branch but was not included in music-metadata 11.14.0 or any earlier npm release, and version 11.16.0 contains the fix. This issue is fixed in version 11.16.0.

Threat Intelligence Overview

EPSS Score
0.1%
Top 98% exploitable
Prevalence
Medium
popular Node.js audio-metadata library, but vulnerable code never shipped in any npm release
Threat Intel
1
1 source
Data Quality
6 sources
Confidence: High

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 HIGH
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

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

CVE-2025-68613 HIGH POC
8.8 Dec 19

Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation

CVE-2024-41713 CRITICAL POC
9.1 Oct 21

A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could

CVE-2024-55591 CRITICAL POC
9.8 Jan 14

FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote

CVE-2023-44487 HIGH POC
7.5 Oct 10

Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour

CVE-2014-7205 CRITICAL POC
10.0 Oct 08

Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t

CVE-2025-59528 CRITICAL POC
10.0 Sep 22

Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete

CVE-2017-14849 HIGH POC
7.5 Sep 28

Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc

CVE-2017-5941 CRITICAL POC
9.8 Feb 09

An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2014-3744 HIGH POC
7.5 Oct 23

Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi

CVE-2014-9566 HIGH POC
7.5 Mar 10

Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin

CVE-2013-4660 MEDIUM POC
6.8 Jun 28

The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic

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