CVE-2024-47575 漏洞分析及三种利用方式
CVE-2024-47575 漏洞分析及三种利用方式
原创 p1Kk 奇安信天工实验室 2025-06-04 03: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
02
03
04
每周三更新一篇技术文章 点击关注我们吧!