安全地检测 FortiClient EMS 服务器是否存在 CVE-2026-35616 漏洞,且不会造成任何中断。请参阅 Bishop Fox 博客上的完整技术分析。
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 已确认该漏洞已在野外遭到利用。
该工具通过以下方式进行非破坏性漏洞测试:
/api/v1/fabric_device_auth/fortigate/init 发送不带伪造头的基础 POST 请求X-SSL-CLIENT-VERIFY: SUCCESS 且不包含证书数据发送带有 verify 头但不含证书 PEM 数据的请求会触发检测路径,但由于未提供证书链而无法完成认证。服务器保持稳定,可以继续处理连接。
contains_certificate() 通过了检查,但 validate_cert_chain() 因缺少 PEM 数据而崩溃。RequestHeader unset 指令,会在伪造头到达 Django 之前将其剥离。INCONCLUSIVE 结果。git clone https://github.com/BishopFox/CVE-2026-35616-check
cd CVE-2026-35616-check
无需外部依赖。扫描器仅使用 Python 标准库模块。
测试位于 <TARGET>:<PORT> 的 FortiClient EMS 服务器。默认端口为 443/TCP。
python3 CVE-2026-35616-check.py <TARGET> [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
======================================================================
只有满足以下条件时,该工具才能检测到该漏洞:
/api/v1/fabric_device_auth/fortigate/init 端点存在并使用 cert_chain_approved 认证如果任何条件不满足,工具将报告 INCONCLUSIVE 结果。
本代码根据 MIT 许可证 分发。
在未事先获得双方同意的情况下,使用本工具攻击目标属于违法行为。遵守所有适用的地方、州和联邦法律是最终用户的责任。开发者不承担任何责任,也不对本程序造成的任何滥用或损害负责。