Share
## https://sploitus.com/exploit?id=7727A36F-D877-542F-B284-515BF9D1AE39
# cve-2024-21762-poc
CVE-2024-21762 是 Fortinet 公司的 FortiOS 和 FortiProxy 产品中的一个严重漏洞,存在于其 SSL VPN 组件中。该漏洞允许未经身份验证的远程攻击者通过特制的 HTTP 请求在目标系统上执行任意代码或命令,可能导致系统被完全控制。
**危害:**
由于该漏洞的存在,攻击者可以在不需要任何身份验证的情况下,远程执行任意代码,进而完全控制受影响的设备。这可能导致敏感数据泄露、服务中断,甚至进一步的网络攻击。
**攻击方法:**
攻击者利用该漏洞的主要手段是发送特制的 HTTP 请求,触发 SSL VPN 组件中的越界写入漏洞。具体而言,攻击者可以通过精心构造的请求,操控内存中的数据,最终实现远程代码执行。
**防护措施:**
为防止受到该漏洞的攻击,建议立即将 FortiOS 和 FortiProxy 升级至官方提供的最新安全版本。此外,禁用 SSL VPN 功能也是一种临时的防护措施。
-----
### CVE-2024-21762漏洞详解:Fortinet FortiOS中的越界写漏洞
#### 漏洞背景
**CVE-2024-21762** 是 Fortinet FortiOS SSL VPN 中的一种高危漏洞,属于未经授权的越界写漏洞。漏洞可能被用于远程代码执行 (RCE),对企业网络安全构成威胁。
FortiGate 于 2024 年 2 月发布了更新,修复了多个中高危漏洞。其中,本文重点分析 CVE-2024-21762 的利用过程,包括如何利用该漏洞实现远程代码执行。
---
#### 漏洞利用示例代码(PoC)
以下 PoC 代码由 [assetnote](https://www.assetnote.io/resources/research/two-bytes-is-plenty-fortigate-rce-with-cve-2024-21762) 提供,展示了利用此漏洞的基本步骤。
```python
# 简化的漏洞利用代码片段
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` 中。修复主要集中在以下两点:
1. 在解析 `chunk` 格式时,添加了对 `chunk` 长度的校验。如果解码后的长度超过 16,视为非法。
2. 修复了 `chunk trailer` 的写入逻辑,防止越界写入 `\r\n`。
---
#### 漏洞利用原理
1. **触发越界写入**:
- 当解析 `chunk` 时,若长度字段解码后为 0,则触发读取 `chunk trailer`。
- 写入 `chunk trailer` 时,根据长度字段向栈中写入 `\r\n`。
- 若长度字段为大量 `0`,将触发越界写入 `\r\n` 到返回地址附近。
2. **栈溢出与劫持**:
- 通过精心构造的 `chunk` 数据,可以覆盖栈中的返回地址,达到劫持程序控制流的目的。
- 利用 ROP 技术,结合 FortiOS 的内存布局,实现远程代码执行。
---
#### 漏洞利用难点
虽然可以通过 ROP 链进行劫持,但 FortiGate 主程序中 `/bin/sh` 不具备直接执行命令的能力,因此需要寻找其他可利用的函数。例如,通过伪造结构体指针,利用 `SSL_do_handshake` 进行进一步的攻击。
---
#### 漏洞利用演示
即使在默认配置下(关闭 Web 模式),该漏洞仍然可以被利用。
![漏洞利用演示](https://github.com/h4x0r-dz/CVE-2024-21762/assets/26070859/0e8188fa-de85-4579-b932-924c0e54b334)
---
#### 结论
CVE-2024-21762 是一个具有较高复杂度的漏洞,其利用过程需要对 FortiOS 的代码逻辑和内存布局有深入理解。与传统的 CTF 题目相比,真实漏洞的利用需要更复杂的上下文和结构分析。
---
#### 原文链接
作者提供了更详细的中文分析文章,可参考:[原文地址](https://mp.weixin.qq.com/s?__biz=Mzk0OTU2ODQ4Mw==&mid=2247484811&idx=1&sn=2e0407a32ba0c2925d6d857f4cdf7cbb&chksm=c3571307f4209a110d6b28cea9fe59ac0f0a2079c998a682e919860f397ea647fa0794933906&mpshare=1&scene=1&srcid=0313EaETjGzEAvOdByUt6ovU#rd)