Fortinet's PSIRT published FG-IR-25-910 in November 2025 describing an improper authentication vulnerability in FortiWeb, tracked as CVE-2025-64446, that lets an unauthenticated remote attacker reach privileged administrative functionality. Public reporting in the weeks that followed documented post-exploitation activity in which intruders used the bypass to drop reverse shells on internet-facing FortiWeb appliances. This analysis focuses on the tradecraft around the bypass rather than the advisory itself: what the attacker actually does after the authentication check is skipped, which MITRE ATT&CK techniques apply, and how to build detection that catches the reverse shell even when the initial request looks benign. You will leave with working Sigma, Suricata and YARA content, concrete patch and configuration guidance, and a triage playbook for appliances that may already be compromised.
Background: what CVE-2025-64446 actually breaks
FortiWeb is Fortinet's web application firewall and load-balancing appliance. It sits in front of production applications and terminates TLS, so a compromise there is a compromise of every application it fronts. CVE-2025-64446 is classified by Fortinet as an improper authentication flaw that allows an unauthenticated attacker to perform administrative actions on the device. The Fortinet PSIRT advisory FG-IR-25-910 lists the affected branches and the fixed releases; the NVD entry cross-references the same CVSS vector.
The practical consequence is that pre-authentication endpoints that should reject requests lacking a valid session instead reach privileged code paths. From a defender's point of view this is not an RCE in the appliance's own right — it is an authentication gate that can be walked around. The reverse shells seen in public reporting are the attacker's chosen payload once that gate is gone, not a built-in feature of the vulnerability.
Fortinet PSIRT FG-IR-25-910: "An improper authentication vulnerability in FortiWeb may allow an unauthenticated attacker to perform administrative actions on the device." Severity is rated Critical by the vendor; consult the advisory for the current score and revision history.
Because the flaw is a logic/auth bypass, signature-based detection on the initial request is fragile. The durable detection surface is the behaviour after the bypass: new admin accounts, new CLI sessions from unexpected geographies, outbound connections from the appliance to attacker infrastructure, and dropped web-shell or reverse-shell artefacts on the FortiWeb filesystem.
Affected versions and the fixed releases
Fortinet's advisory enumerates the vulnerable branches and the minimum fixed build for each. Treat the advisory as the authoritative source and re-check it before you plan maintenance — Fortinet revises FG-IR documents when new branches are confirmed affected.
- FortiWeb 7.6.x — fixed in 7.6.5 and later (per FG-IR-25-910).
- FortiWeb 7.4.x — fixed in 7.4.10 and later (per FG-IR-25-910).
- FortiWeb 7.2.x — fixed in 7.2.12 and later (per FG-IR-25-910).
- FortiWeb 7.0.x — fixed in 7.0.12 and later (per FG-IR-25-910).
- FortiWeb 6.4 and 6.3 — Fortinet's advisory directs customers to upgrade to a supported branch; confirm the exact migration path in FG-IR-25-910.
Verify the running build with get system status from the FortiWeb CLI and compare the Version line against the fixed build for your branch. If you cannot patch immediately, the advisory's workarounds (restricting administrative access to trusted hosts and disabling WAN-facing admin interfaces) reduce exposure but do not remove the underlying flaw.
Source: Fortinet PSIRT FG-IR-25-910 and NVD entry for CVE-2025-64446. Always reconcile against the latest advisory revision.
Attacker TTPs after the bypass
Public post-exploitation reporting on CVE-2025-64446 describes a repeatable chain. Mapping it to MITRE ATT&CK makes it testable in a lab and detectable in production.
- T1190 — Exploit Public-Facing Application. The bypass request itself. The attacker targets the FortiWeb management interface or a pre-auth endpoint that reaches privileged handlers.
- T1078 — Valid Accounts. Once administrative actions are reachable, the attacker creates a local admin account or resets an existing one, establishing persistence independent of the bypass.
- T1059.004 — Command and Scripting Interpreter: Unix Shell. FortiWeb runs FortiOS-derived firmware; the attacker drops a shell script or perl one-liner that opens an outbound TCP connection back to attacker infrastructure.
- T1571 — Non-Standard Port. Reverse shells typically egress on 443, 8080, 8443 or high ephemeral ports to blend with legitimate traffic.
- T1105 — Ingress Tool Transfer. Follow-on tooling (webshells, scanners, credential dumpers) pulled from attacker-controlled hosts.
- T1562.004 — Impair Defenses: Disable or Modify System Firewall. Attackers have been observed adjusting local policies to permit outbound callbacks.
The reverse shell is the pivot. A FortiWeb appliance that can reach the internet on arbitrary ports is a beachhead inside the DMZ, adjacent to the applications it protects. From there the attacker enumerates backend pools, harvests credentials used for health checks, and moves laterally into application servers (T1021).
For defenders, the ordering matters: the bypass is fast and noisy only if you are watching auth logs; the reverse shell is slow and quiet if you are not watching egress. Build detection on both ends.
Detection: Sigma, Suricata and YARA
The rules below are written to be deployable as-is. Tune field names to your SIEM schema before enabling.
Sigma: suspicious FortiWeb admin session from new source
title: FortiWeb Administrative Session From New Source IP
id: 7f3c2a91-4b8e-4d2a-9c1f-3e5b6a7c8d90
status: experimental
description: Detects a successful FortiWeb admin login from a source IP not seen in the prior 30 days, consistent with CVE-2025-64446 post-exploitation.
references:
- https://www.fortiguard.com/psirt/FG-IR-25-910
author: CybernytronX
date: 2025/12/01
logsource:
product: fortinet
service: fort iweb
detection:
selection:
action: login
status: success
filter_known:
src_ip|cidr:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
condition: selection and not filter_known
falsepositives:
- Legitimate remote administration from a new VPN egress
level: high
tags:
- attack.t1078
- attack.t1190
Suricata: outbound reverse-shell pattern from FortiWeb segment
alert tcp $HOME_NET any -> $EXTERNAL_NET ![80,443] (msg:"Possible FortiWeb reverse shell egress (CVE-2025-64446)"; flow:established,to_server; content:"|2f 62 69 6e 2f 73 68|"; depth:32; classtype:trojan-activity; sid:20256446; rev:1;)
The rule matches the literal string /bin/sh at the start of an outbound payload on a non-web port. It is deliberately narrow; pair it with a byte-count anomaly rule on the same segment to catch perl and python one-liners.
YARA: dropped reverse-shell script on FortiWeb filesystem
rule FortiWeb_Reverse_Shell_Dropper
{
meta:
author = "CybernytronX"
description = "Detects shell/perl reverse-shell droppers on FortiWeb"
reference = "CVE-2025-64446"
date = "2025-12-01"
strings:
$s1 = "/bin/sh -i" ascii wide
$s2 = "bash -i >& /dev/tcp/" ascii wide
$s3 = "use IO::Socket::INET" ascii wide
$s4 = "socket(S,PF_INET,SOCK_STREAM" ascii wide
$s5 = "nc -e /bin/sh" ascii wide
condition:
uint32(0) != 0x7f454c46 and any of ($s*)
}
Deploy this rule against /var/log, /tmp, /data and any custom webroot on the appliance. The ELF guard prevents false positives on legitimate FortiWeb binaries that embed shell strings.
Mitigation and hardening
Patching is the only complete remediation. Layer the following controls in the meantime and keep them after patching — they reduce the blast radius of any future appliance flaw.
- Patch to the fixed build for your branch per FG-IR-25-910 (7.6.5 / 7.4.10 / 7.2.12 / 7.0.12 and later). Reboot after upgrade and verify the version string.
- Restrict administrative access. Set
set trusthoston every admin account so the management GUI and SSH are reachable only from jump hosts. Never expose the admin interface to the internet. - Enforce egress control. FortiWeb should talk only to its HA peer, FortiGuard, syslog, and the backend pools it fronts. Deny all other outbound traffic at the upstream firewall.
- Rotate credentials for every account that has logged into the appliance in the last 30 days, and for any backend credentials stored in FortiWeb server-pool health checks.
- Enable two-factor authentication on all administrative accounts (FortiWeb supports RADIUS/LDAP-backed MFA).
- Audit local accounts. Remove any account not in your CMDB; a rogue local admin is the most common persistence artefact in public reporting.
If you suspect compromise, capture a configuration backup and the /var/log tree before wiping. Rebuild from a known-good image rather than cleaning in place — appliance rootkits are rare but not unheard of, and the cost of a rebuild is low compared to a missed backdoor.
Why this matters for defenders
CVE-2025-64446 is a useful case study because it defeats the reflex of "patch it and move on." The vulnerability is a logic flaw; the compromise is a reverse shell. A team that only watches for exploit attempts against the FortiWeb admin endpoint will miss an attacker who walked through the front door with a valid-looking request and then opened an outbound connection from a trusted DMZ host. The detection that saves you is the one on egress and on new local accounts, not the one on the initial exploit string.
Second, the appliance class matters. FortiWeb, like any WAF or load balancer, is a trust boundary: it holds backend credentials, terminates TLS, and is allowed to reach every application it fronts. Treat it with the same rigour you apply to a domain controller — restricted management plane, egress allowlist, MFA, and 30-day credential rotation after any suspected exposure. Third, the reverse-shell technique is generic. The Sigma and Suricata content above will fire on other appliance compromises too; the YARA rule is the only FortiWeb-specific artefact. Reuse the detection, not just the patch.
Sources
- Fortinet PSIRT FG-IR-25-910 — FortiWeb improper authentication (CVE-2025-64446) — authoritative affected-version list, fixed builds and vendor workarounds.
- NVD entry for CVE-2025-64446 — CVSS vector, CWE classification and cross-references to vendor and third-party reporting.
- CISA Known Exploited Vulnerabilities Catalog — check for KEV listing and remediation due dates for CVE-2025-64446.
- MITRE ATT&CK T1190 — Exploit Public-Facing Application — technique context for the initial bypass.
- MITRE ATT&CK T1059.004 — Command and Scripting Interpreter: Unix Shell — technique context for the reverse-shell stage.
Frequently Asked Questions
Is CVE-2025-64446 remotely exploitable without credentials?
Yes. Fortinet classifies it as an improper authentication issue that an unauthenticated attacker can use to perform administrative actions. Exploitation requires network reachability to the FortiWeb management or pre-auth interface, which is why exposing the admin GUI to the internet is the primary exposure factor.
Does patching to 7.6.5 fully remediate the reverse-shell risk?
Patching closes the bypass. It does not remove a reverse shell that was already dropped, nor a rogue admin account created before the patch. After upgrading, audit local accounts, review /var/log for outbound connections, and rotate backend credentials stored in FortiWeb server pools.
What is the fastest way to tell if a FortiWeb appliance is already compromised?
Check three things: (1) local admin accounts against your CMDB, (2) outbound connections from the appliance to non-approved destinations in the last 30 days, and (3) files in /tmp, /data and the webroot that match the YARA rule above. Any hit warrants isolation and rebuild.
Can I detect the bypass with a WAF signature?
Reliably, no. The flaw is a logic/auth issue, so the malicious request often looks like a normal one. Detection should focus on post-bypass behaviour — new admin sessions, account creation, and egress — rather than on the request itself.
Is CVE-2025-64446 in CISA KEV?
Check the CISA KEV catalog directly; listings change and the catalog is the authoritative source for federal remediation deadlines. If listed, treat the KEV due date as your hard patch deadline.
What MITRE ATT&CK techniques should I hunt for?
Prioritise T1190 (initial exploit), T1078 (valid accounts created post-bypass), T1059.004 (Unix shell reverse shell), T1571 (non-standard port egress) and T1562.004 (firewall modification). The Sigma and Suricata rules in this article cover the first three.
Need expert help with this?
If you are running FortiWeb or any internet-facing WAF in front of production applications, the difference between a patch and a compromise is detection depth. CybernytronX provides appliance-focused penetration testing, SOC build-out with egress and identity analytics, and Ethereon AI threat detection tuned for edge-device tradecraft like the reverse-shell chain described here. Reach our team at cybernytronx.com/contact.html or review the Ethereon platform at cybernytronx.com/ethereon.html.