CVE-2024-47575漏洞分析及三种利用方式

admin 2025-12-29 00:53:38 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文分析了FortinetFortiManagerCVE-2024-47575漏洞,该漏洞允许未授权攻击者通过FGFM协议执行任意代码。文章详细阐述了FGFM协议结构及三种利用方式:7.4.1版本通过dmworker触发命令注入、利用som/export接口注入,以及7.6.0版本直接生成shell。结论建议在漏洞挖掘时对比不同大版本以简化分析思路。 综合评分: 95 文章分类: 漏洞分析,漏洞POC


cover_image

CVE-2024-47575 漏洞分析及三种利用方式

原创

p1Kk

奇安信天工实验室

2025年6月4日 11:30 北京

一、前  言

二、FGFM

三、漏洞利用方式一

四、漏洞利用方式二

五、漏洞利用方式三

六、总  结

前  言

2024年10月23日,Fortinet官方发布了针对CVE-2024-47575的安全公告:

A missing authentication for critical function vulnerability [CWE-306] in FortiManager fgfmd daemon may allow a remote unauthenticated attacker to execute arbitrary code or commands via specially crafted requests.

表明该漏洞存在于fgfmd服务中,可能允许远程未经身份验证的攻击者通过特制的请求执行任意代码。本文主要分享之前对CVE-2024-47575的1day分析过程和其他利用方式的学习

FGFM

FortiManager的FGFM功能允许管理员对FortiGate设备进行集中管理和配置。管理员可以通过FortiManager来查看和配置托管设备的接口、HA、DNS等设置,并进行路由管理。此外,FGFM还支持通过修订历史记录进行故障排除,帮助管理员识别和解决配置相关的问题‌。

在FortiManager中处理FGFM请求的是fgfmsd进程,通过TCP端口541建立的SSL连接运行。

01

FGFM协议结构

在之前对FortiGate-FGFM协议的分析中,我们用一种比较粗略的方式生成了合法的FGFM请求头,满足请求头第三字节低位等于1,第四字节小于等于2,以及长度检查;然后导出合法的Fortigate证书建立连接。

但这次分析重新抓取fgfm请求可以得到原始请求格式。

分为几个部分:

  • magic_number == b’\x36\xe0\x11′
  • msg_type*   eg b’\x00′
  • len
  • command     eg ‘put script’
  • key-value      eg ‘devid=0’
  • param_end == ‘\r\n’
  • end == ‘\r\n\r\n’

*请求头第四字节决定了不同的分支

漏洞利用方式一

以7.4.1版本为分析目标。

请求类型为type 0时,根据不同的command 返回的request_type调用函数表0x42EB77中对应的处理函数:

当客户端C请求get connect_tcp时:

服务器S响应:

客户端C请求localid = 服务器S返回remoteid。

服务器S同时也会返回一个localid用于对应C-localid和S-remoteid,标识信道。

负责处理get connect_tcp请求的是connect_tcp函数:

svc http监听该套接字,并在libfmgsvrd.so中可以找到定义和回调函数:

dmworker让我联想到之前的分析中,在libdmserver.so中off_FE84C0路由表注册了多个函数,最终在rcs/checkout对应函数dmworker_rcs_checkout中发现命令注入:

查看使用libdmserver.so的进程,可以锁定dmworker:

启动dmworker调试可以捕获json请求格式:

该注入可通过认证后HTTP请求触发,但如何通过fgfm请求触发?

继续分析fgfmsd,如果请求type 2会进入fgfm_chan_handler函数,通过localid标识 发送请求数据:

那么请求格式为:

发送该请求测试,并调试svc httpd进程发现会对(un)compressed_data检查是否为合法的HTTP请求格式,合法才会转发,将(un)compressed_data设置为合法的POST /jsonrpc请求头+dmworker请求体即可触发漏洞。

漏洞利用方式二

第二种利用方法来自watchtowrLabs。

在分析get请求时发现一条命令put_json_cmd,当参数file_exch_cmd=put_json_cmd时进入下面的处理逻辑,解析json对象并将其传递给svc_rpc_uclient:

svc_rpc_uclient在libsvcclt.so中定义,通过对RPC调用终止位置进一步逆向分析,发现它通过Unix套接字进入了fdssrvd。

在该文件中发现可以通过put_json_cmd接口访问的函数表,其中som/export对应的函数中存在命令注入:

要触发som/export需要请求get file_exchange命令分配文件传输句柄。

客户端请求:

服务器响应:

同上面的分析,不通过type 2而是通过channel命令指明localid同样可以达到sub_40BB6D发送请求。

watchtowrLabs在文末也分析了漏洞patch并发现了利用方式一的命令注入patch点但不知如何触发,相比该利用过程,第一种利用方法有点复杂走远了。

漏洞利用方式三

在学习attackerkb这篇文章对7.6.0版本的分析时,可以发现一些与7.4版本的不同之处。

同样请求get connect_tcp,对应函数sub_1B978:

此时只是生成了一个 shell,可通过channel请求 -> 调用fgfm_sock_write将输入和输出传输到服务器创建的新 FGFM通道(和前面原理一样通过localid匹配)。

总  结

本文分享了三种针对CVE-2024-47575的利用方式,该漏洞成因是与未授权的设备建立不安全通信,结合(认证后)命令注入点实现远程代码执行。同时在漏洞刚披露时,我选择7.4大版本进行漏洞分析,随着网上漏洞分析文章的公开,对比7.4版本,7.6版本中的漏洞点非常明显利用也较简单,因此大家在以后做漏洞挖掘时可以多个大版本对比分析。

【版权说明】

【版权说明】

本作品著作权归p1Kk所有

未经作者同意,不得转载

p1Kk

天工实验室安全研究员

专注于iot漏洞挖掘与利用

往期回顾

01

通用Linux x64内核态shellcode编写技巧

02

基于路由转发导致的权限认证绕过漏洞分析

03

隐匿与追踪:Rootkit检测与绕过技术分析

04

二进制混淆对抗技术研究

每周三更新一篇技术文章  点击关注我们吧!


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:奇安信天工实验室 p1Kk《CVE-2024-47575 漏洞分析及三种利用方式》

探索WMI 网络安全文章

探索WMI

文章总结: 本文介绍了WindowsServer2016及以上版本默认存在的WMI类MSFT_MTProcess,其CreateProcess方法可替代Win3
评论:0   参与:  0