BishopFox/CVE-2026-35616-check

GitHub: BishopFox/CVE-2026-35616-check

这是一个专门用于检测 FortiClient EMS 服务器是否存在 CVE-2026-35616 API 认证绕过漏洞的非破坏性安全评估工具。

Stars: 0 | Forks: 0

# CVE-2026-35616 漏洞评估工具 在不造成任何中断的情况下,安全检测 [FortiClient EMS](https://www.fortinet.com/products/endpoint-security/forticlient) 服务器是否受 CVE-2026-35616 影响。请参阅 Bishop Fox 博客上的[完整技术分析](https://bishopfox.com/blog/api-authentication-bypass-in-forticlient-ems-7-4-5-7-4-6-cve-2026-35616)。 ## 描述 CVE-2026-35616 是 FortiClient EMS 7.4.5 和 7.4.6 中一个存在于身份认证之前的 API 绕过漏洞,允许远程未经身份验证的攻击者通过 HTTP 请求头欺骗绕过基于证书的身份认证。该 Django 应用程序将用户可控的 HTTP 请求头(`X-SSL-CLIENT-VERIFY`、`X-SSL-CLIENT-CERT`)视为等同于 Apache mod_ssl WSGI 环境变量,而 Apache 配置从未剥离这些请求头。结合仅执行可分辨名称(Distinguished Name)字符串匹配(不进行加密签名验证)的证书链验证机制,攻击者可以伪造证书并获得经过身份验证的 API 访问权限。Fortinet 已确认该漏洞在野外被利用。 该工具通过以下方式执行非破坏性漏洞测试: 1. 向 `/api/v1/fabric_device_auth/fortigate/init` 发送一个不包含任何欺骗请求头的基准 POST 请求 2. 发送相同的 POST 请求,但附带 `X-SSL-CLIENT-VERIFY: SUCCESS` 且不包含证书数据 3. 比较这两个响应以确定请求头是否到达 Django 发送不带证书 PEM 数据的验证请求头会触发检测路径,但由于未提供证书链而无法完成身份认证。服务器保持稳定状态,可以继续处理连接。 * **易受攻击的服务器** 将返回不同的响应:基准请求返回 HTTP 401("Certificate not found in request header"),而欺骗请求返回 HTTP 500(服务器错误),因为 `contains_certificate()` 通过了检查,但 `validate_cert_chain()` 因缺少 PEM 数据而崩溃。 * **已修补的服务器** 对这两个请求将返回相同的 HTTP 401 响应,因为热修复添加了 Apache `RequestHeader unset` 指令,在请求头到达 Django 之前将其剥离。 * **非 EMS 服务器** 将无法访问该端点,在这种情况下,工具将报告 `INCONCLUSIVE`(不确定)结果。 ## 安装 ``` git clone https://github.com/BishopFox/CVE-2026-35616-check cd CVE-2026-35616-check ``` 无外部依赖。该扫描器仅使用 Python 标准库模块。 ## 用法 测试位于 `:` 的 FortiClient EMS 服务器。默认端口为 443/TCP。 ``` python3 CVE-2026-35616-check.py [PORT] ``` ### 示例:易受攻击的服务器 ``` $ python3 CVE-2026-35616-check.py 192.168.1.1 ====================================================================== FortiClient EMS CVE-2026-35616 Vulnerability Scanner Non-Destructive Detection ====================================================================== [*] Target: 192.168.1.1:443 [*] Testing for CVE-2026-35616 (non-destructive) [1] Sending baseline POST (no spoof headers)... HTTP 401 [2] Sending POST with X-SSL-CLIENT-VERIFY: SUCCESS... HTTP 500 [*] Analyzing responses... [+] Baseline: 401 — Certificate not found in request header. [+] Spoofed: 500 — Server encountered an error, please try again later. [!] Spoofed header changed server behavior [!] X-SSL-CLIENT-VERIFY is reaching Django (hotfix not applied) ====================================================================== RESULT: VULNERABLE to CVE-2026-35616 Affected versions: FortiClient EMS 7.4.5 - 7.4.6 Recommendation: Apply Fortinet hotfix or upgrade to 7.4.7+ ====================================================================== ``` ### 示例:已修补的服务器 ``` $ python3 CVE-2026-35616-check.py 192.168.1.1 ====================================================================== FortiClient EMS CVE-2026-35616 Vulnerability Scanner Non-Destructive Detection ====================================================================== [*] Target: 192.168.1.1:443 [*] Testing for CVE-2026-35616 (non-destructive) [1] Sending baseline POST (no spoof headers)... HTTP 401 [2] Sending POST with X-SSL-CLIENT-VERIFY: SUCCESS... HTTP 401 [*] Analyzing responses... [+] Baseline: 401 — Certificate not found in request header. [+] Spoofed: 401 — Certificate not found in request header. [-] Responses identical (header stripped by Apache) ====================================================================== RESULT: NOT VULNERABLE (hotfix applied) Apache is stripping X-SSL-CLIENT-VERIFY before it reaches Django ====================================================================== ``` ## 前置条件 只有在满足以下条件时,该工具才能检测到该漏洞: * 目标运行的是 FortiClient EMS 7.4.5 或 7.4.6 * EMS Web 界面可访问 * `/api/v1/fabric_device_auth/fortigate/init` 端点存在并使用 `cert_chain_approved` 身份验证 如果未满足任何条件,工具将报告 `INCONCLUSIVE`(不确定)结果。 ## 许可证 此代码基于 [MIT 许可证](LICENSE) 分发。 ## 法律免责声明 在未事先获得相互同意的情况下,使用此工具攻击目标是非法的。最终用户有责任遵守所有适用的地方法、州法和联邦法律。开发者不承担任何责任,也不对本程序的任何误用或造成的损害负责。 ## 另请参阅 * [Fortinet 公告 FG-IR-26-099](https://www.fortiguard.com/psirt/FG-IR-26-099) * [Bishop Fox 博客:完整技术分析](https://bishopfox.com/blog/api-authentication-bypass-in-forticlient-ems-7-4-5-7-4-6-cve-2026-35616) * [NVD — CVE-2026-35616](https://nvd.nist.gov/vuln/detail/CVE-2026-35616)
标签:Apache mod_ssl, API认证绕过, CISA项目, CVE-2026-35616, Django安全, FortiClient EMS, HTTP头部欺骗, Maven, SamuraiWTF, SSL证书伪造, 漏洞验证, 网络安全, 逆向工具, 隐私保护, 非破坏性测试, 预认证绕过