IPBUF安全漏洞报告
English
CVE-2026-40165 CVSS 8.7 高危

CVE-2026-40165 authentik SAML认证绕过漏洞

披露日期: 2026-05-21

漏洞信息

漏洞编号
CVE-2026-40165
漏洞类型
认证绕过
CVSS评分
8.7 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
authentik

相关标签

认证绕过SAMLXML注入authentik身份验证

漏洞概述

authentik是一个开源的身份提供商。在2025.12.4及之前版本以及2026.2.0-rc1至2026.2.2版本中,存在通过SAML NameID XML注释注入导致的身份验证绕过漏洞。由于authentik从SAML断言中提取NameID值的方式存在缺陷,攻击者可以诱骗authentik仅看到NameID值的一部分,从而可能获取其他账户的访问权限。利用该漏洞的前提是攻击者在SAML源上拥有账户,能够修改其NameID值(通常是用户名或电子邮件),并且启用了XML签名。攻击者可以通过在NameID值中注入注释来修改发送给authentik的SAML断言,有效地将NameID值截断为注释前的片段,从而允许攻击者访问任何用户账户。该问题已在2025.12.5和2026.2.3版本中修复。

技术细节

该漏洞的核心技术原理在于XML解析器处理SAML NameID节点时的逻辑缺陷。当authentik处理SAML响应时,它提取`<NameID>`标签内的内容作为用户唯一标识。攻击者如果能够控制SAML源端的NameID(例如注册包含特殊字符的用户名),便可以在其中插入XML注释(`<!-- ... -->`)。根据描述,authentik的提取逻辑未能正确处理注释节点,导致解析过程在遇到注释时停止或仅保留注释前的文本。例如,若攻击者构造NameID为`victim<!-- random -->`,解析器可能将其截断为`victim`。反之,如果攻击者构造`attacker<!-- victim -->`且系统逻辑存在特定缺陷,或者利用注释绕过某些校验,即可实现身份冒充。由于SAML断言是经过签名的,攻击者需要能够控制签名内容或利用签名验证的漏洞(但在本例中,描述指出攻击者在源上有账号且能修改NameID,这意味着攻击者生成合法的SAML响应,只是NameID内容被精心构造以利用解析端的截断漏洞),从而欺骗服务端(SP)将请求认证为截断后的用户身份。

攻击链分析

STEP 1
侦察
攻击者识别目标使用的是存在漏洞的authentik版本,并配置了SAML源且启用了XML签名。
STEP 2
准备
攻击者在SAML源上注册一个账户,或者修改现有账户的NameID属性(通常是用户名或邮箱),在其中插入XML注释字符(如<!--)。
STEP 3
利用
攻击者使用该账户发起SAML登录流程。SAML源生成包含恶意NameID的断言并发送给authentik。
STEP 4
绕过认证
authentik解析SAML断言时,由于未能正确处理XML注释,将NameID截断为注释前的内容,错误地将攻击者识别为该截断ID对应的用户。
STEP 5
获得访问权限
攻击者成功以受害者的身份登录目标应用,获得账户的完全访问权限。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2026-40165: SAML NameID XML Comment Injection # This demonstrates how to craft a NameID with an XML comment. def generate_malicious_nameid(base_user, injection_payload): """ Generates a NameID value with an injected XML comment. If authentik truncates at the comment, the effective ID becomes 'base_user'. """ # The attacker injects a comment to potentially truncate the ID # or confuse the parser logic in authentik. malicious_nameid = f"{base_user}<!-- {injection_payload} -->" return malicious_nameid # Example Usage # Attacker controls 'base_user' (e.g., their username). # They try to manipulate the authentication flow. payload = generate_malicious_nameid("attacker", "admin") print(f"Generated Malicious NameID: {payload}") # Conceptual SAML Response structure saml_response = f""" <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"> <saml:Subject> <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"> {payload} </saml:NameID> </saml:Subject> </saml:Assertion> """ print("SAML Assertion Snippet:") print(saml_response)

影响范围

authentik <= 2025.12.4
authentik 2026.2.0-rc1 - 2026.2.2

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用受影响的SAML身份源,或者在SAML源端实施严格输入验证,禁止用户名或邮箱中包含XML注释序列(如<!--)。此外,应审查系统日志,查找是否存在异常的SAML登录尝试或利用此漏洞的迹象。

参考链接

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