← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
CVE-2024-21762 · CWE-787 · Disclosed 2024-02-09

A out-of-bounds write in Fortinet FortiOS versions 7

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
01 · The Real Story

This is a deadbolt flaw on the front gate, not a bug buried in the basement

CVE-2024-21762 is an out-of-bounds write in Fortinet sslvpnd, the SSL-VPN component used by FortiOS and FortiProxy. A remote attacker can send a specially crafted HTTP request using chunked transfer encoding and corrupt memory before authentication. Affected FortiOS trains are 7.4.0–7.4.2, 7.2.0–7.2.6, 7.0.0–7.0.13, 6.4.0–6.4.14, 6.2.0–6.2.15, and 6.0.0–6.0.17; affected FortiProxy trains are 7.4.0–7.4.2, 7.2.0–7.2.8, 7.0.0–7.0.14, and 2.0.0–2.0.13, with older 1.x branches requiring migration.

Vendor severity matches reality here. The only real friction is that the vulnerable SSL-VPN service must be reachable, but for the population that matters it is *supposed* to be internet-facing, exploitation was important enough for immediate KEV listing, public research showed reliable crash and code-exec paths, and internet scan data showed a very large exposed population.

"Pre-auth RCE on an internet-facing VPN with KEV and public weaponization is a drop-everything patch."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Reach the SSL-VPN listener

The attacker connects to the FortiGate or FortiProxy HTTPS service that fronts SSL-VPN, typically on 443/tcp. Tooling is trivial: a raw socket, openssl s_client, or custom Python HTTP client is enough because no authentication or session setup is required.
Conditions required:
  • SSL-VPN service is enabled
  • The interface is reachable from the attacker
  • Target runs an affected firmware train
Where this breaks in practice:
  • If SSL-VPN is disabled or isolated behind strict source-IP controls, the attack dies immediately
  • Some FortiGate deployments expose management or VPN only to partners, not the whole internet
Detection/coverage: External ASM and version-based scanners can usually identify exposed Fortinet SSL-VPN; Shadowserver and Bishop Fox both published coverage.
STEP 02

Trigger sslvpnd chunk parsing

Using the pathing described by Bishop Fox and Assetnote, the attacker sends a malformed chunked POST into /remote/ so sslvpnd parses an oversized or malformed chunk-length/trailer sequence. Assetnote showed the vulnerable code path lives in HTTP chunked request handling and that patched builds added length checks around this parsing logic.
Conditions required:
  • HTTP request reaches sslvpnd unmodified
  • Chunked transfer encoding is accepted through the path
Where this breaks in practice:
  • Intermediaries that normalize or reject malformed chunked requests can break the exploit path
  • Some reverse-proxy designs are uncommon for FortiGate SSL-VPN and reduce exposure
Detection/coverage: Fortinet published a virtual patch signature HTTP.Chunk.Length.Invalid.; network telemetry may show malformed chunked POSTs to /remote/.
STEP 03

Corrupt memory and seize execution

The malformed request causes an out-of-bounds write that clobbers stack-adjacent state in sslvpnd. Assetnote documented controlled corruption and a path to code execution, while public scanners showed a safe behavioral test that distinguishes vulnerable from patched devices without full exploitation.
Conditions required:
  • Target must be on a vulnerable build
  • Attacker must shape request bytes closely enough to survive parser behavior
Where this breaks in practice:
  • Reliable RCE is harder than a crash, especially across firmware branches
  • Exploit reliability can vary by build and appliance model
Detection/coverage: Crash-only attempts may show sslvpnd instability or abrupt TLS session drops; safe verification behavior is covered by Bishop Fox.
STEP 04

Use the firewall as a beachhead

Once code runs on the edge appliance, the attacker can harvest config, VPN settings, secrets, and routing information, then pivot inward. On a FortiGate, the blast radius is bigger than a single web app because the box sits in the trust path and often sees credential material, network topology, and admin workflows.
Conditions required:
  • Successful code execution on the appliance
  • Appliance has meaningful trust or visibility into internal networks
Where this breaks in practice:
  • Segmentation can limit pivoting from the appliance
  • Operational logging on hardened appliances may shorten attacker dwell time
Detection/coverage: Look for anomalous admin activity, new local accounts, config downloads, unexpected egress from the appliance, and integrity or process anomalies around sslvpnd.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusConfirmed exploited. NVD flags this CVE as present in CISA KEV, and CISA added it on 2024-02-09 with a federal due date of 2024-02-16.
Proof-of-concept availabilityPublicly weaponized enough to matter. Assetnote published deep exploit research, and Bishop Fox released a safe scanner based on observable parser behavior.
EPSS0.92702 from the provided intel, which is effectively top-tier exploit likelihood; public vulnerability databases place it at roughly 99.8th percentile.
KEV statusYES. Added to KEV on 2024-02-09; NVD shows the CISA due date as 2024-02-16.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — pure network attack, no auth, no user click, full CIA impact.
Affected surfaceNot all FortiGates, but the exposed ones are the dangerous ones. The vulnerable code is in sslvpnd, so the attack population is concentrated in deployments with SSL-VPN enabled and reachable.
Fixed versionsFortiOS: 7.4.3+, 7.2.7+, 7.0.14+, 6.4.15+, 6.2.16+, 6.0.18+. FortiProxy: 7.4.3+, 7.2.9+, 7.0.15+, 2.0.14+; older 1.x branches require migration.
Exposure and scanningShadowserver added active scanning/reporting for this CVE on 2024-02-13, and its March 2024 reporting cited nearly 150,000 vulnerable internet-exposed devices, with 24,000+ in the U.S.
Disclosure and discoveryFortinet PSIRT published on 2024-02-08; the advisory lists discovery as Internal.
Vendor workaround nuanceDisable SSL-VPN is the vendor workaround. Fortinet explicitly says disabling webmode is not a valid workaround; a virtual patch signature named HTTP.Chunk.Length.Invalid. is available in FMWP DB update 24.020.
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to CRITICAL (9.8/10)

The decisive factor is that this is pre-auth code execution on an edge VPN service that is intentionally internet-facing. KEV status and public exploit research remove any argument that this is a theoretical lab bug; the reachable population is large enough and the post-compromise position is strong enough to keep it in the top bucket.

HIGH Exploitation status and severity bucket
MEDIUM Exact exposure count in your environment without asset inventory

Why this verdict

  • No attacker foothold required: unauthenticated remote exploitation over HTTPS means there is no prior compromise stage to discount.
  • Exposure model amplifies risk: SSL-VPN is commonly internet-facing by design, so the required attacker position is the public internet, not an internal segment or valid account.
  • Threat intel supports the vendor number: KEV listing, rapid researcher weaponization, and large internet-exposed counts keep the practical risk aligned with the near-max CVSS.

Why not higher?

There is not much room above this. The only reason this is not a hypothetical 10.0 is that the vulnerable component is not universally enabled across every FortiGate or FortiProxy deployment, so population reach is somewhat narrower than a flaw in the base management plane with no feature dependency.

Why not lower?

Downgrading this because 'not every firewall exposes SSL-VPN' misses the point: the vulnerable population is exactly the population that tends to be exposed to the internet. This is also not an authenticated or post-initial-access bug, so the normal downward pressure from attacker-position friction simply is not there.

05 · Compensating Control

What to do — in priority order.

  1. Disable SSL-VPN if you can — If business permits, turn off the exposed sslvpnd surface immediately; for this KEV-listed bug, deploy this within hours rather than waiting for the standard noisgate timeline.
  2. Restrict source IPs to the VPN edge — If you cannot disable SSL-VPN, reduce reachable population with aggressive allowlisting, partner-only exposure, or upstream ACLs. For a live KEV issue, get this in place within hours as the minimum containment move.
  3. Enable Fortinet's virtual patch signature — Use the vendor-provided virtual patch HTTP.Chunk.Length.Invalid. from FMWP DB update 24.020 to block malformed chunked requests targeting this parser path. Treat this as an emergency control and deploy within hours.
  4. Hunt for appliance compromise — Review FortiGate/FortiProxy logs, admin changes, config access, and unexpected egress because exploitation evidence exists already. Start this triage within 3 days, and sooner for internet-facing gateways with heavy remote-access use.
What doesn't work
  • Disable webmode does not fix this; Fortinet explicitly says it is not a valid workaround.
  • Endpoint EDR on user laptops does nothing for a memory corruption bug in the firewall appliance itself.
  • A generic web WAF is often irrelevant because many FortiGate SSL-VPN deployments are directly exposed and terminate traffic on the appliance.
06 · Verification

Crowdsourced verification payload.

Run this from an auditor workstation that can reach the FortiGate/FortiProxy HTTPS listener; do not run it on the appliance. Invoke it as python3 verify_cve_2024_21762.py https://vpn.example.com:443 with no special privileges required. It performs a safe behavioral check similar to the Bishop Fox technique: patched devices respond quickly, while vulnerable devices tend to hang waiting for more chunk data.

noisgate-verify.py
PYTHONREAD-ONLYSAFE
#!/usr/bin/env python3
"""
Safe behavioral verifier for CVE-2024-21762.
Usage: python3 verify_cve_2024_21762.py https://host:443
Exit codes:
  0 = PATCHED
  1 = VULNERABLE
  2 = UNKNOWN
"""

import socket
import ssl
import sys
from urllib.parse import urlparse

TIMEOUT = 5.0


def parse_target(arg: str):
    if '://' not in arg:
        arg = 'https://' + arg
    u = urlparse(arg)
    if u.scheme != 'https' or not u.hostname:
        raise ValueError('Target must be an https URL or host[:port]')
    host = u.hostname
    port = u.port or 443
    return host, port


def main():
    if len(sys.argv) != 2:
        print('UNKNOWN')
        sys.exit(2)

    try:
        host, port = parse_target(sys.argv[1])
    except Exception:
        print('UNKNOWN')
        sys.exit(2)

    payload = (
        f"POST /remote/ HTTP/1.1\r\n"
        f"Host: {host}\r\n"
        f"User-Agent: noisgate-cve-2024-21762-check/1.0\r\n"
        f"Transfer-Encoding: chunked\r\n"
        f"Connection: close\r\n"
        f"\r\n"
        f"0000000000000000FF\r\n"
        f"\r\n"
        f"abcd"
    ).encode()

    ctx = ssl.create_default_context()
    ctx.check_hostname = False
    ctx.verify_mode = ssl.CERT_NONE

    try:
        with socket.create_connection((host, port), timeout=TIMEOUT) as sock:
            with ctx.wrap_socket(sock, server_hostname=host) as tls:
                tls.settimeout(TIMEOUT)
                tls.sendall(payload)
                try:
                    data = tls.recv(1024)
                except socket.timeout:
                    # Vulnerable behavior: connection hangs waiting for more chunk data.
                    print('VULNERABLE')
                    sys.exit(1)

                if data:
                    # Patched behavior: parser rejects early and returns a response.
                    print('PATCHED')
                    sys.exit(0)
                else:
                    print('UNKNOWN')
                    sys.exit(2)
    except (ssl.SSLError, socket.error, OSError):
        print('UNKNOWN')
        sys.exit(2)


if __name__ == '__main__':
    main()
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: treat every internet-reachable FortiGate/FortiProxy SSL-VPN listener on affected code trains as a live incident candidate. Because this CVE is KEV-listed with exploitation evidence, override the normal calendar and patch / mitigate immediately, within hours; that is the practical interpretation of the noisgate mitigation SLA here. Do not rely on a routine CRITICAL maintenance cadence: apply the vendor fix to exposed systems the same day, use temporary exposure reduction or SSL-VPN shutdown only as a bridge, and reserve the standard noisgate remediation SLA <= 90 days for any genuinely unreachable stragglers that you have positively proven are not externally exposed.

Sources

  1. Fortinet PSIRT FG-IR-24-015
  2. NVD CVE-2024-21762
  3. Assetnote exploit research
  4. Bishop Fox safe scanner
  5. GreyNoise research
  6. Shadowserver vulnerable HTTP report
  7. Shadowserver media coverage summary with exposure counts
  8. Wiz vulnerability database entry
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.