fortiweb-未授权RCE(CVE-2025-25257)
字数 1288 2025-08-30 06:50:27
FortiWeb 未授权RCE漏洞分析 (CVE-2025-25257)
漏洞概述
FortiWeb Fabric Connector 是 Fortinet 公司开发的用于连接 FortiWeb (Web应用防火墙)与其他 Fortinet 生态系统组件的中间件。该组件存在预授权SQL注入漏洞,攻击者可通过在 Authorization: Bearer 头中注入恶意SQL语句,最终实现远程代码执行(RCE)。
影响版本
- 7.6.0 <= FortiWeb <= 7.6.3
- 7.4.0 <= FortiWeb <= 7.4.7
- 7.2.0 <= FortiWeb <= 7.2.10
- 7.0.0 <= FortiWeb <= 7.0.10
环境搭建
-
从 Fortinet 官方下载页面获取受影响版本的 FortiWeb VM 镜像:
https://support.fortinet.com/support/#/downloads/vm -
下载并安装 FortiWeb V7.6.3 虚拟机
-
完成基础服务配置后,可通过以下命令查看接口信息:
# 查看接口信息命令 -
配置网络网关确保测试环境可达
漏洞分析
漏洞位置
漏洞存在于 /bin/httpsd 进程的 get_fabric_user_by_token 函数中,该函数存在明显的字符串拼接问题。
调用链分析
fabric_access_check函数执行数据库操作- 该函数调用
get_fabric_user_by_token - 输入参数来源于 HTTP 头中的
Authorization字段
触发点
通过分析 httpd.conf 配置文件,发现 /api/fabric/authenticate URL 可触发 fabric_access_check 函数。
漏洞利用
调试方法
-
使用 GDB 附加到 httpsd 进程进行调试:
gdb -p <httpsd_pid> -
由于 httpsd 是多进程架构,可能需要多次尝试才能附加到正确的进程
SQL注入分析
- 攻击向量:
Authorization: Bearer头 - 注入点存在输入格式化问题:
- 单引号可成功注入
- 但后续内容可能被截断
__isoc23_sscanf函数会在第一个空格处停止读取,因此注入语句中不能包含空格- 解决方案:使用
/**/代替空格
- 解决方案:使用
利用限制绕过
由于空格被限制,构造有效载荷时需注意:
- 使用
/**/替代所有空格 - 示例PoC结构:
Authorization: Bearer 'OR/**/1=1/**/--
完整利用流程
- 通过
/api/fabric/authenticate端点发送恶意请求 - 在
Authorization: Bearer头中注入SQL语句 - 利用SQL注入实现RCE:
- 方法一:上传C2马实现持久化控制
- 方法二:上传gdbserver辅助调试
- 通过命令执行获取服务器权限
漏洞修复
Fortinet 在新版本中已采用预编译语句修复此漏洞。建议用户升级到以下版本:
- FortiWeb 7.6.4 或更高版本
- FortiWeb 7.4.8 或更高版本
- FortiWeb 7.2.11 或更高版本
- FortiWeb 7.0.11 或更高版本
参考链接
原始漏洞分析文章 (请替换为实际链接)