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

环境搭建

  1. 从 Fortinet 官方下载页面获取受影响版本的 FortiWeb VM 镜像:

    https://support.fortinet.com/support/#/downloads/vm
    
  2. 下载并安装 FortiWeb V7.6.3 虚拟机

  3. 完成基础服务配置后,可通过以下命令查看接口信息:

    # 查看接口信息命令
    
  4. 配置网络网关确保测试环境可达

漏洞分析

漏洞位置

漏洞存在于 /bin/httpsd 进程的 get_fabric_user_by_token 函数中,该函数存在明显的字符串拼接问题。

调用链分析

  1. fabric_access_check 函数执行数据库操作
  2. 该函数调用 get_fabric_user_by_token
  3. 输入参数来源于 HTTP 头中的 Authorization 字段

触发点

通过分析 httpd.conf 配置文件,发现 /api/fabric/authenticate URL 可触发 fabric_access_check 函数。

漏洞利用

调试方法

  1. 使用 GDB 附加到 httpsd 进程进行调试:

    gdb -p <httpsd_pid>
    
  2. 由于 httpsd 是多进程架构,可能需要多次尝试才能附加到正确的进程

SQL注入分析

  1. 攻击向量:Authorization: Bearer
  2. 注入点存在输入格式化问题:
    • 单引号可成功注入
    • 但后续内容可能被截断
  3. __isoc23_sscanf 函数会在第一个空格处停止读取,因此注入语句中不能包含空格
    • 解决方案:使用 /**/ 代替空格

利用限制绕过

由于空格被限制,构造有效载荷时需注意:

  • 使用 /**/ 替代所有空格
  • 示例PoC结构:
    Authorization: Bearer 'OR/**/1=1/**/--
    

完整利用流程

  1. 通过 /api/fabric/authenticate 端点发送恶意请求
  2. Authorization: Bearer 头中注入SQL语句
  3. 利用SQL注入实现RCE:
    • 方法一:上传C2马实现持久化控制
    • 方法二:上传gdbserver辅助调试
  4. 通过命令执行获取服务器权限

漏洞修复

Fortinet 在新版本中已采用预编译语句修复此漏洞。建议用户升级到以下版本:

  • FortiWeb 7.6.4 或更高版本
  • FortiWeb 7.4.8 或更高版本
  • FortiWeb 7.2.11 或更高版本
  • FortiWeb 7.0.11 或更高版本

参考链接

原始漏洞分析文章 (请替换为实际链接)

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 镜像: 下载并安装 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 进程进行调试: 由于 httpsd 是多进程架构,可能需要多次尝试才能附加到正确的进程 SQL注入分析 攻击向量: Authorization: Bearer 头 注入点存在输入格式化问题: 单引号可成功注入 但后续内容可能被截断 __isoc23_sscanf 函数会在第一个空格处停止读取,因此注入语句中不能包含空格 解决方案:使用 /**/ 代替空格 利用限制绕过 由于空格被限制,构造有效载荷时需注意: 使用 /**/ 替代所有空格 示例PoC结构: 完整利用流程 通过 /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 或更高版本 参考链接 原始漏洞分析文章 (请替换为实际链接)