Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-35616 — CVE-2026-35616 检测工具包,针对 FortiClient EMS 中的预认证 API 绕过漏洞。包含 Python 扫描器和 Nmap NSE 脚本,用于识别易受攻击的版本并提供修复指导。 | Kitploit
工具/GitHubGitHub/keraattin/cve-2026-35616
漏洞扫描器漏洞分析漏洞利用信息收集Web安全网络安全渗透测试身份验证
GitHubkeraattin/cve-2026-35616

CVE-2026-35616

CVE-2026-35616 检测工具包,针对 FortiClient EMS 中的预认证 API 绕过漏洞。包含 Python 扫描器和 Nmap NSE 脚本,用于识别易受攻击的版本并提供修复指导。

查看仓库
12175个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-35616 - FortiClient EMS 预认证 API 绕过导致远程代码执行

CVE-2026-35616 CVSS 9.1 CISA KEV CWE-284

摘要

Fortinet FortiClient EMS 7.4.5 和 7.4.6 中存在一个严重的认证绕过漏洞,允许完全未认证的远程攻击者通过伪造单个 HTTP 头(X-SSL-CLIENT-VERIFY)绕过 API 认证。该缺陷源于 Django 中间件信任来自用户可控请求头中的客户端证书元数据,而不仅仅信任受信任的反向代理。这使攻击者能够获得完整的管理 API 访问权限——并由此在企业内受管端点上执行任意代码。

自 2026 年 3 月 31 日起已被积极利用。2026 年 4 月 6 日被加入 CISA KEV 目录。


目录

  • 快速事实
  • 什么是 FortiClient EMS?
  • 漏洞深入分析
    • 架构
    • 漏洞所在
    • 攻击流程
  • 影响分析
  • 受影响版本
  • 利用时间线
  • 检测
    • Python 扫描器
    • Nmap NSE 脚本
    • 手动验证
  • 入侵指标
  • 修复措施
  • 参考资料
  • 作者

快速事实

字段详情
CVE IDCVE-2026-35616
厂商Fortinet
产品FortiClient 企业管理服务器(EMS)
受影响版本7.4.5、7.4.6
不受影响7.2.x 分支、7.4.4 及更早版本
CVSS v3.19.1(严重)
CWECWE-284 - 访问控制不当
攻击向量网络
认证无需认证
用户交互无
利用成熟度已在野外被利用
CISA KEV2026 年 4 月 6 日添加(截止日期:2026 年 4 月 9 日)
补丁已发布热修复;完整修复在 7.4.7 中
发现者Simo Kohonen(Defused Cyber)、Nguyen Duc Anh

什么是 FortiClient EMS?

FortiClient 企业管理服务器(EMS)是 Fortinet 的集中式端点管理平台。它充当在整个组织中部署、配置和监控 FortiClient 代理的指挥控制层。可以将其视为管理 Fortinet 管理环境中每个端点的大脑:

  • 向端点推送安全策略和 VPN 配置文件
  • 管理端点合规性和态势检查
  • 分发软件更新和补丁
  • 与 FortiGate 防火墙集成以实现零信任网络访问(ZTNA)
  • 存储和管理端点遥测数据、证书和凭据

当攻击者获得 EMS 的管理访问权限时,他们实际上就掌握了组织中每个受管端点的所有密钥。


漏洞深入分析

架构

FortiClient EMS 在后台使用相当标准的 Web 应用技术栈:

+----------------+          +----------------+          +----------------+
|   浏览器 /     |  HTTPS   |    Apache      |   WSGI   |    Django      |
|   API 客户端   | -------> |   (mod_ssl)    | -------> |    后端        |
+----------------+          +----------------+          +----------------+

当配置了双向 TLS(mTLS)时,Apache 的 mod_ssl 负责客户端证书验证。验证证书后,Apache 通过受信任的 WSGI 环境变量将验证结果传递给下游的 Django:

  • SSL_CLIENT_VERIFY - 验证状态(SUCCESS、NONE、FAILED)
  • SSL_CLIENT_S_DN - 证书中的主题专有名称
  • SSL_CLIENT_SERIAL - 证书序列号

这是标准且安全的模式。问题在于 Django 中间件如何读取这些数据。

漏洞所在

在 FortiClient EMS 7.4.5 和 7.4.6 中,Django 认证中间件被修改为也接受来自 HTTP 请求头 的相同信息:

  • X-SSL-CLIENT-VERIFY
  • X-SSL-CLIENT-S-DN
  • X-SSL-CLIENT-SERIAL

这可能是为了支持 Apache 不是 TLS 终止点的反向代理部署而添加的。然而,中间件无法区分这两个来源。它首先检查 WSGI 变量,但如果这些变量不存在(未配置 mTLS,或直接连接),则会回退到 HTTP 请求头——而任何客户端都可以设置这些请求头。

以下是概念分解:

安全路径(预期):
  Apache mod_ssl 验证证书 --> 设置 WSGI 环境变量 --> Django 读取环境变量  [正常]

不安全路径(漏洞):
  攻击者直接设置 HTTP 请求头 --> Django 读取请求头 --> 信任它们  [失败]

中间件实际上信任客户端自行证明其证书验证状态。这就像保安问某人“嘿,另一个保安已经检查过你的身份证了吗?”然后当对方说“是的”时就放行。

攻击流程

步骤 1:攻击者向 EMS API 端点发送 POST 请求
        并携带以下请求头:
        
        X-SSL-CLIENT-VERIFY: SUCCESS
        X-SSL-CLIENT-S-DN: CN=admin
        X-SSL-CLIENT-SERIAL: 0000000000000001

步骤 2:Django 中间件检查 WSGI 环境变量 → 不存在
        回退到 HTTP 请求头 → 找到 X-SSL-CLIENT-VERIFY: SUCCESS

步骤 3:中间件将请求视为以管理员身份认证

步骤 4:攻击者获得完整的管理 API 访问权限

步骤 5:通过管理 API,攻击者可以:
        - 向所有受管端点推送恶意策略
        - 提取存储的凭据和证书
        - 通过软件分发部署载荷
        - 修改 ZTNA 配置
        - 横向渗透到更广泛的网络

整个攻击只需一个 HTTP 请求。无需暴力破解、无需凭据填充、无需社会工程学。只需一个伪造的请求头。


影响分析

此漏洞的严重性超出了服务器本身。FortiClient EMS 是一个力量倍增器——攻陷它使攻击者能够控制每个受管端点:

直接影响:

  • 完全控制 EMS 控制台
  • 访问所有存储的端点配置、凭据和证书
  • 能够读取/修改/删除端点策略
  • 访问 VPN 配置和 ZTNA 设置

下游影响(通过受管端点):

  • 通过软件分发向所有受管设备部署恶意软件
  • 从端点遥测数据中窃取凭据
  • 禁用或削弱所有受管端点上的安全控制
  • 通过 VPN/ZTNA 配置操纵进行横向移动
  • 通过基于策略的载荷交付实现持久后门访问

企业风险:

  • 在典型的企业部署中,EMS 管理数百到数千个端点
  • 单个被利用的 EMS 实例可导致整个组织被攻陷
  • FortiClient EMS 通常位于具有广泛访问权限的受信任网络区域

受影响版本

版本状态
FortiClient EMS 7.4.6存在漏洞
FortiClient EMS 7.4.5存在漏洞
FortiClient EMS 7.4.4 及更早版本不受影响
FortiClient EMS 7.2.x不受影响

利用时间线

日期事件
约 2026 年 3 月下旬Simo Kohonen 和 Nguyen Duc Anh 发现并报告该漏洞
2026 年 3 月 31 日首次记录到针对蜜罐的利用尝试(Defused Cyber)
2026 年 4 月 4 日Fortinet 为 7.4.5 和 7.4.6 发布紧急热修复
2026 年 4 月 6 日CISA 将 CVE-2026-35616 添加到 KEV 目录(截止日期:2026 年 4 月 9 日)
2026 年 4 月 13 日本检测工具包发布

检测

Python 扫描器

该 Python 脚本使用差分响应技术测试多个 API 端点。

工作原理:

  1. 指纹识别 - 通过 HTTP 响应体和请求头识别 FortiClient EMS
  2. 基线请求 - 向每个 API 端点发送不带伪造请求头的 POST 请求(预期返回 HTTP 401 Unauthorized)
  3. 伪造请求 - 发送相同的请求,但注入 X-SSL-CLIENT-VERIFY: SUCCESS
  4. 比较 - 如果状态码从 401 变为其他任何状态码(通常为 500 或 200),则确认认证绕过

不会发送任何利用载荷。该测试对生产环境安全。

用法:

# 安装依赖(此脚本仅需标准库)
pip install -r requirements.txt

# 单个目标
python CVE-2026-35616_FortiClientEMS_detector.py -t 192.168.1.100

# 自定义端口
python CVE-2026-35616_FortiClientEMS_detector.py -t ems.corp.local -p 8443

# 从文件批量扫描
python CVE-2026-35616_FortiClientEMS_detector.py -f targets.txt

# JSON 输出保存到文件
python CVE-2026-35616_FortiClientEMS_detector.py -t 192.168.1.100 --json -o results.json

# 启用 SSL 证书验证
python CVE-2026-35616_FortiClientEMS_detector.py -t 192.168.1.100 --verify-ssl

# 为慢速网络增加超时时间
python CVE-2026-35616_FortiClientEMS_detector.py -t 192.168.1.100 --timeout 20

选项:

标志描述默认值
-t、--target目标 IP 或主机名-
-f、--file包含目标的文件,每行一个(以 # 开头的行将被跳过)-
-p、--port目标端口443
--timeout连接超时时间(秒)10
--verify-ssl启用 SSL 证书验证禁用
--json以 JSON 格式输出结果关闭
-o、--output将结果保存到文件-

示例输出:

╔══════════════════════════════════════════════════════════════╗
║  CVE-2026-35616 - FortiClient EMS 认证绕过检测器           ║
║  预认证 API 访问绕过 → 权限提升                              ║
║  CVSS: 9.1(严重)| CISA KEV:活跃利用                       ║
╚══════════════════════════════════════════════════════════════╝

[*] 正在扫描 192.168.1.100:443...

目标:192.168.1.100:443
============================================================
  [*] 检测到 FortiClient EMS(版本:未知)

  漏洞测试结果:
    [存在漏洞] /api/v1/auth/signin  基线:401 → 伪造:500
    [存在漏洞] /api/v1/system/status  基线:401 → 伪造:500
    [无漏洞] /api/v1/endpoints  基线:401 → 伪造:401

  [!] 目标很可能存在 CVE-2026-35616 漏洞
      已确认预认证 API 绕过。请立即应用热修复!
      修复措施:升级到 FortiClient EMS 7.4.7 或应用热修复

Nmap NSE 脚本

# 安装 NSE 脚本
sudo cp CVE-2026-35616_FortiClientEMS.nse /usr/share/nmap/scripts/
sudo nmap --script-updatedb

# 基本扫描
nmap -p 443 --script CVE-2026-35616_FortiClientEMS <target>

# 扫描子网
nmap -p 443 --script CVE-2026-35616_FortiClientEMS 10.0.0.0/24

# 从文件扫描多个目标
nmap -p 443 --script CVE-2026-35616_FortiClientEMS -iL targets.txt

# 带服务版本检测
nmap -sV -p 443 --script CVE-2026-35616_FortiClientEMS <target>

示例 Nmap 输出:

PORT    STATE SERVICE
443/tcp open  https
| CVE-2026-35616_FortiClientEMS:
|   存在漏洞:
|   FortiClient EMS 预认证 API 绕过
|     状态:存在漏洞
|     ID:CVE:CVE-2026-35616
|     风险因素:严重(CVSS:9.1)
|     披露日期:2026-04-04
|     附加信息:
|       受影响端点:2
|       修复措施:为 FortiClient EMS 7.4.5/7.4.6 应用热修复或升级到 7.4.7
|       CISA KEV 截止日期:2026 年 4 月 9 日
|     参考资料:
|       https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-35616
|_      https://www.cisa.gov/known-exploited-vulnerabilities-catalog

手动验证

如果您想使用 curl 手动确认:

# 步骤 1:基线 - 应返回 401
curl -sk -X POST https://<TARGET>:443/api/v1/auth/signin \
  -H "Content-Type: application/json" \
  -d '{}' \
  -o /dev/null -w "%{http_code}\n"

# 步骤 2:伪造 - 如果返回 401 以外的任何状态码,则很可能存在漏洞
curl -sk -X POST https://<TARGET>:443/api/v1/auth/signin \
  -H "Content-Type: application/json" \
  -H "X-SSL-CLIENT-VERIFY: SUCCESS" \
  -H "X-SSL-CLIENT-S-DN: CN=admin" \
  -H "X-SSL-CLIENT-SERIAL: 0000000000000001" \
  -d '{}' \
  -o /dev/null -w "%{http_code}\n"

如果第一个返回 401,第二个返回 500 或 200,则该实例存在漏洞。


入侵指标

在您的环境中留意以下迹象:

下载工具