Announcement

👇Official Account👇

Welcome to join the group & private message

Article first/tail QR code

Skip to content

FortiBleed 深度复盘:CVE-2026-35616 如何收割 1.1 亿凭证、瘫痪 354 个组织

事件概览

2026 年 7 月 2 日,Orca Security 发布了一份震惊安全社区的深度分析报告——FortiBleed。这不是一次普通的漏洞利用,而是一场规模空前的 Fortinet 凭证窃取行动:

  • 430,000+ 台面向互联网的 FortiGate 防火墙被扫描
  • 1.1 亿+ 条凭证被窃取
  • 409 个目标获得管理员权限
  • 354 个组织完全域沦陷
  • ~12,000 台设备被部署 Golang 嗅探器
  • 12+ 起勒索软件部署已确认

攻击者利用 FortiClient EMS 产品的访问控制漏洞 CVE-2026-35616(CVSS 9.1,无需认证),在 FortiGate 设备上部署名为 FortigateSniffer 的自定义 Golang 数据包嗅探器,滥用 FortiOS 原生的 diagnose sniffer packet 命令被动拦截认证流量,覆盖 RADIUS、NTLM、Kerberos 等 24 种协议,不触发传统入侵检测系统。

SOCRadar 威胁研究团队将攻击活动溯源至 INC RansomLynx RaaS 勒索软件组织。截至 7 月 7 日攻击仍处于活跃状态。

CVE-2026-35616 漏洞技术分析

漏洞基础信息

属性
CVE IDCVE-2026-35616
CVSS 3.19.1(Critical)
CWECWE-284: Improper Access Control
受影响版本FortiClient EMS 7.4.5 – 7.4.6
不受影响版本7.2 及以下、7.4.7+
利用前提无需认证,远程可利用
CISA KEV2026-04-06 列入
联邦修复截止2026-04-09(3 天窗口)

漏洞原理

FortiClient EMS 是 Fortinet 的企业端点管理平台,负责集中管理所有 FortiClient 代理。CVE-2026-35616 的核心问题在于 API 请求处理路径中的访问控制逻辑缺陷

  1. EMS 的某些敏感 API 端点未正确验证用户凭证或会话令牌
  2. 攻击者可以构造特制的未认证 API 请求,绕过身份验证检查
  3. 服务器将这些请求视为有效的已认证命令进行处理
  4. 攻击者获得 EMS 服务器的完全管理控制权

这不是一个简单的配置错误——它是访问控制逻辑的代码级缺陷,需要厂商针对性修复。攻击者无需任何凭证、会话令牌或前置访问权限, bypass 是完全预认证的。

利用时间线

2026-03-31  watchTowr honeypot 首次捕获利用活动
2026-04-03  Defused Cyber 确认零日利用
2026-04-04  Fortinet 发布带外安全公告 FG-IR-26-099 + 热修复
2026-04-06  CISA 列入 KEV 目录,联邦 3 天修复窗口
2026-04-09  联邦机构修复截止日
2026-05-XX  Arctic Wolf 发现 EKZ Stealer 信息窃取器 Campaign
2026-07-02  Orca Security 发布 FortiBleed 深度分析
2026-07-07  攻击仍在活跃,SOCRadar 溯源至 INC/Lynx

从 watchTowr honeypot 首次捕获到 Fortinet 发布公告之间存在 6 天的零日窗口——在此期间攻击者已针对生产目标发起攻击,而防御者毫不知情。

攻击链完整拆解

第一阶段:初始入侵——EMS 服务器接管

攻击者通过互联网扫描暴露的 FortiClient EMS 管理接口(默认端口 8013),利用 CVE-2026-35616 绕过认证获得管理员权限:

python
# 检测脚本:扫描暴露的 FortiClient EMS 实例
import requests
import socket
from urllib.parse import urljoin

def check_forticlient_ems_exposure(target_url):
    """检测 FortiClient EMS 是否暴露且可能受 CVE-2026-35616 影响"""
    indicators = {
        "port_8013_open": False,
        "ems_version": None,
        "vulnerable": False,
        "internet_exposed": False
    }

    # 检查端口 8013 是否开放
    try:
        parsed = socket urlparse(target_url)
        host = parsed.hostname
        port = parsed.port or 8013

        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.settimeout(5)
        result = sock.connect_ex((host, port))
        if result == 0:
            indicators["port_8013_open"] = True
            indicators["internet_exposed"] = True
        sock.close()
    except Exception:
        pass

    # 检查 EMS 版本
    try:
        # EMS 信息端点通常不需要认证
        resp = requests.get(
            urljoin(target_url, "/api/v1/system/info"),
            timeout=10,
            verify=False,
            headers={"User-Agent": "FortiClient-EMS-Check/1.0"}
        )
        if resp.status_code == 200:
            data = resp.json()
            version_str = data.get("version", "")
            indicators["ems_version"] = version_str

            # 检查是否在受影响版本范围内
            if version_str.startswith("7.4."):
                minor = int(version_str.split(".")[2])
                if 5 <= minor <= 6:
                    indicators["vulnerable"] = True
    except Exception:
        pass

    return indicators


def detect_fortigate_sniffer_iocs(fortigate_config):
    """检测 FortigateSniffer 相关 IOC"""
    iocs = {
        "sniffer_command_found": False,
        "suspicious_admin_accounts": [],
        "unknown_certs": []
    }

    # FortigateSniffer 使用 diagnose sniffer packet 命令
    sniffer_patterns = [
        "diagnose sniffer packet any",
        "FortigateSniffer",
        "83.138.53.110",  # 已知 C2 IP
    ]

    config_str = str(fortigate_config)
    for pattern in sniffer_patterns:
        if pattern.lower() in config_str.lower():
            iocs["sniffer_command_found"] = True
            break

    # 检查后门管理员账户
    # FortiBleed 攻击者会创建隐藏的 admin 账户
    suspicious_admin_names = ["adminin", "support_ext", "config_sync"]
    for name in suspicious_admin_names:
        if name in config_str:
            iocs["suspicious_admin_accounts"].append(name)

    return iocs

第二阶段:FortigateSniffer 部署

获得 EMS 控制权后,攻击者通过 EMS 的管理通道向 FortiGate 防火墙推送 FortigateSniffer——一个用 Golang 编写的自定义数据包嗅探器。

FortigateSniffer 的关键特征:

  • 语言:Golang 编译,静态链接,跨平台
  • 部署方式:通过 EMS 管理通道静默推送,伪装为合法 Fortinet 更新
  • 隐蔽性:滥用 FortiOS 原生 diagnose sniffer packet 命令,不触发 IDS
  • 覆盖面:拦截 24 种协议的认证流量

覆盖的 24 种协议包括但不限于:

协议类别具体协议
认证协议RADIUS, NTLM, NTLMv2, Kerberos, LDAP(s)
远程访问VPN (SSL/IPSec), SSH, Telnet, RDP
Web 协议HTTP Basic, HTTP Digest, NTLM over HTTP
邮件协议SMTP Auth, POP3, IMAP
文件协议SMB, FTP, SFTP
目录服务LDAP, LDAPS, Global Catalog
其他SNMP, TACACS+, 802.1X, EAP

第三阶段:凭证收集与横向移动

FortigateSniffer 被动收集的凭证被回传至 C2 服务器(已知 IP: 83.138.53.110,关联 Tor 出口节点)。攻击者利用这些凭证实现:

  1. 管理员权限获取:409 个目标获得 FortiGate 管理员登录
  2. 域沦陷:354 个组织通过 Kerberos/NTLM 凭证实现完整域控接管
  3. 横向移动:利用 RDP/SSH/VPN 凭证渗透内部网络
  4. 持久化:在 ~12,000 台设备上维持嗅探器驻留

第四阶段:勒索软件部署

INC Ransom 和 Lynx RaaS 勒索软件组织利用窃取的凭证发起最终攻击:

  • 12+ 起勒索软件部署已确认
  • 数百 端点被加密
  • 受影响行业:制造业、科技、物流
  • 地域分布:拉美和亚太地区

SOCRadar 发现,一个 FortiBleed 基础设施操作者同时登录了 INC Ransom 和 Lynx 的勒索谈判面板,受害者数据存在重叠。内部文件显示这是一个约 20 人的组织化团队,有明确分工,核心操作者驱动大部分高影响入侵。

EKZ Stealer:供应链维度

2026 年 5 月,Arctic Wolf 发现了另一个利用 CVE-2026-35616 的 Campaign——EKZ Stealer 信息窃取器:

  1. 攻击者通过 EMS 管理通道推送伪装为 FortiEndpoint_Patch.exe 的恶意载荷
  2. 修改 EMS 管理配置,注入恶意 PowerShell 命令在所有受管端点上执行
  3. EKZ Stealer 针对 Chromium 内核浏览器和 Firefox 窃取:
    • 保存的密码
    • Cookie
    • 自动填充数据
    • 绕过 Chrome 加密密码存储
  4. 凭证通过 HTTP 外传,单个被攻陷的 EMS 服务器感染其管理的 每一个端点

这揭示了 FortiClient EMS 作为供应链瓶颈的危险性——它不是传统的端点安全工具,而是集中化的命令与控制层。控制了 EMS 就等于控制了整个端点安全态势。

为什么传统检测失效

FortiBleed 攻击之所以能大规模成功,关键在于它绕过了多层安全防御:

1. 原生命令滥用

FortigateSniffer 使用的 diagnose sniffer packet 是 FortiOS 的合法诊断命令。传统 IDS/IPS 不会标记管理员使用内置诊断工具的行为,即使该命令正在捕获所有认证流量。

2. 管理通道信任

EMS 到 FortiGate 的通信走的是可信管理通道。恶意载荷推送看起来与正常的策略更新无异,端点 EDR 不会标记来自"官方安全管理服务器"的指令。

3. 被动嗅探模式

FortigateSniffer 是被动嗅探器——不发送探测包、不发起连接、不修改网络流量。它只是监听并记录,这种低交互模式极难被网络行为分析检测到。

4. Golang 静态二进制

Golang 编译的静态二进制文件没有外部依赖,不触发 DLL 加载监控,也不匹配传统 YARA 规则。二进制大小可能被伪装为合法 Fortinet 组件。

检测与防御方案

紧急检测清单

bash
#!/bin/bash
# FortiBleed 检测脚本 - 在 FortiGate 设备上运行

echo "=== FortiBleed 检测 ==="

# 1. 检查异常管理员账户
echo "[1] 检查管理员账户列表..."
config system admin
show | grep -E "adminin|support_ext|config_sync"
end

# 2. 检查 diagnose sniffer 残留
echo "[2] 检查 sniffer 进程..."
diagnose sniffer packet status 2>/dev/null || echo "  无活跃 sniffer"

# 3. 检查异常出站连接
echo "[3] 检查到已知 C2 的连接..."
diagnose firewall iprope lookup src 83.138.53.110 2>/dev/null

# 4. 检查 EMS 连接状态
echo "[4] 检查 EMS 连接..."
diagnose endpoint fctems status

# 5. 检查配置变更历史
echo "[5] 检查近期配置变更..."
execute log filter category system
execute log display | tail -20

网络层防御

python
# Suricata 规则:检测 FortigateSniffer 行为
# 规则 1: 检测从 FortiGate 到已知 C2 的连接
alert ip $HOME_NET any -> [83.138.53.110/32] any (
    msg:"FortiBleed C2 Communication - Known FortigateSniffer C2";
    sid:2026356161;
    rev:1;
    reference:cve,2026-35616;
    classtype:trojan-activity;
    priority:1;
)

# 规则 2: 检测大量凭证协议流量从同一源发起(嗅探器特征)
alert tcp $FORTIGATE_NET any -> $INTERNAL_NET any (
    msg:"Potential FortigateSniffer - Mass credential protocol capture";
    flow:established;
    detection_filter:track by_src, count 100, seconds 60;
    sid:2026356162;
    rev:1;
    reference:cve,2026-35616;
    classtype:trojan-activity;
)

加固清单

优先级措施详情
P0升级 FortiClient EMS升级至 7.4.7+ 或应用带外热修复
P0凭证轮换轮换所有 FortiGate 管理基础设施凭证(VPN/RADIUS/NTLM/Kerberos/管理员)
P0审计后门账户检查是否存在 adminin 等未授权管理员账户
P1端口限制将 EMS 端口 8013 限制为仅可信 IP 白名单
P1启用 MFA在所有 FortiGate 管理接口上启用多因素认证
P1封锁 C2封锁 IP 83.138.53.110 及关联 Tor 出口节点
P2网络分段将 EMS 服务器隔离在受限网络段
P2部署 IOC 检测使用 FortigateSniffer IOC 进行威胁狩猎
P3替代方案评估将 FortiGate 管理接口从公网撤下,改用 ZTNA 方案

MITRE ATT&CK 映射

战术技术ID
Initial AccessExploit Public-Facing ApplicationT1190
Initial AccessValid AccountsT1078
PersistenceCreate AccountT1136
PersistenceModify Authentication ProcessT1556
Credential AccessNetwork SniffingT1040
Credential AccessOS Credential DumpingT1003
Lateral MovementRemote ServicesT1021
ImpactData Encrypted for ImpactT1486

与其他 Fortinet 漏洞的关联

FortiBleed 并非孤立事件。Fortinet 产品线在 2024-2026 年间频繁成为攻击目标:

  • CVE-2024-55591:FortiManager 任意文件上传(2024 年末在野利用)
  • CVE-2025-22271:FortiManager 缺少认证(2025 年初在野利用)
  • CVE-2026-21643:FortiClient EMS 未认证 SQL 注入(2026 年初在野利用)
  • CVE-2026-35616:FortiClient EMS 访问控制绕过(本次 FortiBleed)

攻击者正在系统性地将 FortiClient EMS 作为企业入口的高价值目标。EMS 的供应链特性——一个服务器控制所有端点——使其成为初始访问经纪人的理想跳板。

经验教训

1. 管理平面是新的攻击面

传统安全关注数据平面(用户流量),但 FortiBleed 证明管理平面才是真正的软肋。一个 EMS 服务器被攻陷,等于整个端点安全体系被攻陷。

2. 原生工具是最佳伪装

FortigateSniffer 之所以隐蔽,是因为它使用 FortiOS 自带的诊断命令。安全团队需要重新审视所有内置诊断/调试工具的滥用风险。

3. KEV 不等于安全

CISA 在 4 月 6 日就将 CVE-2026-35616 列入 KEV,但截至 7 月仍有大量组织未完成修补。漏洞披露 ≠ 漏洞修复——攻击者专门扫描已知但未修补的漏洞。

4. 凭证轮换是必修课

即使已经打了补丁,被窃取的 1.1 亿条凭证仍然有效。凭证轮换不是可选项,而是事件响应的标准动作。

参考资料

上次更新于: