Fortinet FortiSandbox Triple-Flaw — Active Exploitation
Executive Summary
Three critical (CVSS 9.1) vulnerabilities in Fortinet FortiSandbox are under active exploitation. Threat-intel firm Defused observed in-the-wild exploitation across all three within a 24-hour window (reported 2026-06-16). The attacker objective is unauthenticated remote code execution on the FortiSandbox appliance itself — a deep-trust security device that, once compromised, gives an adversary a foothold inside the inspection path, access to submitted samples and verdicts, and a pivot point into the management network.
- CVE-2026-39813 — path traversal in the FortiSandbox JRPC API; lets an unauthenticated attacker bypass authentication. (Patched 2026-04-14.)
- CVE-2026-39808 — OS command injection; unauthenticated attackers execute unauthorized code/commands. (Patched 2026-04-14.)
- CVE-2026-25089 — OS command injection affecting FortiSandbox, FortiSandbox Cloud, and FortiSandbox PaaS Web UI via crafted HTTP requests. (Patched in the June 2026 Patch Tuesday.)
Typical chain: unauthenticated crafted HTTP requests to the appliance Web UI / JRPC API → auth bypass via path traversal (CVE-2026-39813) → OS command injection (CVE-2026-39808 / CVE-2026-25089) → command execution on the appliance.
The CVE-2026-25089 exploit observed in the wild shows signs of being AI-generated ("vibecoded") and is currently faulty — no reliable public working exploit exists yet for that specific CVE. The auth-bypass + command-injection pair patched in April (-39813 / -39808) is the higher-confidence active threat.
Telemetry reality: FortiSandbox is a network appliance with little-to-no host EDR coverage. Falcon will not see process/file activity on the appliance. Detection leans on network/proxy/firewall logs for crafted HTTP requests to the management interface, path-traversal URI patterns, and anomalous outbound connections FROM the appliance management IP. Adjacent-host Falcon telemetry only helps post-pivot.
Defender priority: Confirm FortiSandbox is patched to a fixed build, pull the management interface off any internet-facing path, and hunt now for inbound path-traversal / command-injection HTTP requests to the appliance AND for any new outbound connection originating from the FortiSandbox management IP — that egress is the single highest-fidelity signal of successful exploitation.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry Fwd |
|---|---|---|---|
| 1 | BleepingComputer | All three flaws CVSS 9.1; Defused observed ITW exploitation in 24h; CVE-2026-25089 exploit "vibecoded / likely faulty," no working public variant; April vs June patch split; notes related path-traversal CVE-2025-61624 also exploited (needs high privs — chaining candidate). | yes |
| 1 | Help Net Security | Confirms the three-CVE set, unauthenticated crafted-HTTP-request vector against Web UI / JRPC API, low attack complexity, no user interaction. | yes |
| 1 | The Hacker News | "Attackers exploit three Fortinet flaws"; reinforces auth-bypass → command-injection chain and unauthenticated access. | yes |
| 1 | SecurityWeek | Three recently-patched FortiSandbox vulns in attacker crosshairs; patch-timeline corroboration. | partial |
| 1 | SC World (SC Media) | Three critical FortiSandbox bugs rated 9.x, actively exploited; corroborates severity and ITW status. | partial |
Web-hunter note: No vendor-published atomic IOCs (hashes, C2 domains, source IPs) were available at the time of writing. Public reporting describes the vector and chain but not endpoint URIs or payloads. IOC blocks below therefore use REPLACE_WITH_… placeholders for atomic indicators and lean on behavioral / URI-pattern detection. Re-hunt this pack when Fortinet PSIRT or Defused publishes concrete IOCs.
Hunt Brief & Attack Chain
Hunt hypotheses (fidelity-ordered)
| # | Hypothesis | MITRE | Telemetry | Conf |
|---|---|---|---|---|
| H1 | The FortiSandbox management IP makes a new outbound connection (reverse shell / tool pull / C2) to an external or unusual internal host — strongest sign of successful RCE. | T1190, T1059 | Firewall/proxy egress, NetFlow, Falcon NetworkConnectIP4 on adjacent hosts | HIGH |
| H2 | Inbound HTTP requests to the appliance Web UI / JRPC API carry path-traversal sequences (../, encoded variants) targeting auth bypass (CVE-2026-39813). | T1190 | WAF/reverse-proxy/firewall HTTP logs, NGSIEM HTTP repo | HIGH |
| H3 | Inbound HTTP requests contain OS-command metacharacters (;, |, &&, $(, backticks) in parameters to the Web UI / JRPC API (CVE-2026-39808 / -25089). | T1190, T1059 | WAF/proxy HTTP logs (body + query) | MED |
| H4 | The appliance management IP scans / connects laterally to internal hosts on admin ports (SSH/RDP/SMB/WinRM) post-compromise. | T1133, T1021 | Firewall east-west logs, Falcon UserLogon / NetworkConnectIP4 on targets | MED |
| H5 | An adjacent/managed host receives an inbound connection FROM the appliance IP and then spawns suspicious processes (downloaded tooling executing). | T1059, T1105 | Falcon ProcessRollup2 + NetworkConnectIP4 on adjacent hosts | MED |
| H6 | Repeated/burst HTTP requests to the appliance from a single external source (exploit attempts / brute of the faulty -25089 PoC). | T1190 | Firewall/proxy HTTP logs | MED |
Attack chain
| Step | Action | Telemetry | Hunt angle |
|---|---|---|---|
| 1 · Recon | Identify internet-/network-reachable FortiSandbox management interface | Inbound HTTP to appliance mgmt IP | Burst/scan from single source (H6) |
| 2 · Auth bypass | Path-traversal in JRPC API (CVE-2026-39813) | HTTP URI with ../ / encoded traversal | URI traversal pattern (H2) |
| 3 · Command injection | OS command injection via crafted HTTP (CVE-2026-39808 / -25089) | HTTP param with shell metacharacters | Metacharacter payload (H3) |
| 4 · Execution / callback | Command runs on appliance; reverse shell or tool pull | Outbound from appliance mgmt IP | New egress from appliance (H1) — highest fidelity |
| 5 · Pivot | Lateral movement into mgmt network | East-west from appliance IP; logons on targets | Lateral connections / logons (H4, H5) |
Consolidated IOC Table
No vendor-published atomic IOCs at time of writing. The indicators below are behavioral / contextual; atomic values are placeholders to be filled when Fortinet PSIRT / Defused publish them.
| Type | Value | Conf | Action | Context | Expiry |
|---|---|---|---|---|---|
| uri-pattern | Path-traversal sequences (../, %2e%2e%2f, ..%5c) to FortiSandbox Web UI / JRPC API | high | hunt | CVE-2026-39813 auth bypass | 2026-09-18 |
| uri-pattern | Shell metacharacters (; | && $( `) in HTTP params to appliance mgmt interface | medium | hunt | CVE-2026-39808 / -25089 cmd injection | 2026-09-18 |
| behavior | Any new outbound connection originating from FortiSandbox management IP | high | hunt | Post-exploitation callback / tool pull | 2026-09-18 |
| endpoint | JRPC API path on FortiSandbox management interface (the targeted service) | high | enrich | Attack surface — monitor source diversity | 2026-07-18 |
| ipv4 | REPLACE_WITH_SOURCE_IP | medium | detect | Exploitation source (populate when published) | 2026-12-18 |
| domain | REPLACE_WITH_C2 | medium | detect | Callback / tool-pull infra (populate when published) | 2026-12-18 |
| sha256 | REPLACE_WITH_SHA256 | medium | detect | Dropped tooling on pivoted host (populate when published) | 2026-12-18 |
Affected Surface & Telemetry Matrix
| Surface | Required telemetry | Priority | Gap risk |
|---|---|---|---|
| FortiSandbox appliance (Web UI / JRPC API) | Inbound HTTP logs via WAF / reverse proxy / NGFW; FortiSandbox admin/event logs forwarded to SIEM | CRITICAL | HIGH — no Falcon host agent on appliance |
| Appliance management IP (egress) | Firewall / proxy egress logs, NetFlow, DNS for the mgmt IP | CRITICAL | MED — depends on perimeter log forwarding |
| FortiSandbox Cloud / PaaS Web UI | Provider/tenant access logs (CVE-2026-25089 also affects cloud/PaaS) | HIGH | HIGH — limited customer visibility into PaaS |
| Management network (lateral targets) | Falcon NetworkConnectIP4 / ProcessRollup2 / UserLogon on adjacent managed hosts | HIGH | LOW — Falcon covers managed hosts |
| Identity (post-pivot) | Falcon UserLogon / UserLogonFailed; AD/Entra sign-in logs | MED | LOW |
Bottom line: The appliance itself is a telemetry blind spot for Falcon. Highest-value coverage comes from network logs surrounding the appliance (inbound HTTP, outbound egress) and from Falcon coverage of the managed hosts the appliance can reach.
ATT&CK Mapping
| Tactic | Technique | Name | Observed behavior | Query / Control |
|---|---|---|---|---|
| Initial Access | T1190 | Exploit Public-Facing Application | Crafted HTTP to FortiSandbox Web UI / JRPC API | Q1, Q2, Q3 / H-Imm-1 |
| Initial Access | T1133 | External Remote Services | Network-adjacent unauthenticated access to mgmt interface | Q6 / H-Imm-2 |
| Execution | T1059 | Command and Scripting Interpreter | OS command injection on the appliance | Q1, Q4 / H-Near-1 |
| Persistence | T1505 | Server Software Component | Implant / web component on the compromised appliance | Q4, Q5 / H-Near-2 |
| Command & Control | T1071 / T1105 | App-Layer Protocol / Ingress Tool Transfer | Outbound callback / tooling pull from appliance IP | Q4, Q5 / H-Imm-3 |
| Lateral Movement | T1021 | Remote Services | Appliance IP connecting to internal admin ports | Q6, Q7 |
Native Audit-Log Hunts (non-CQL)
FortiSandbox appliance
- Confirm running firmware build against Fortinet PSIRT FG-IR advisories; anything below the 2026-04-14 fix for -39813/-39808 or the June 2026 fix for -25089 is exposed.
- Review FortiSandbox admin/event logs for unexpected administrative actions, new admin sessions, or JRPC API calls from unrecognized sources. Forward these logs to the SIEM if not already.
- Check for unexpected scheduled jobs, modified inspection profiles, or new files/components on the appliance (via vendor-supported console only — do not run offensive tooling).
Perimeter / network devices
- NGFW / reverse proxy / WAF: search inbound HTTP to the appliance management IP for path-traversal and command-metacharacter patterns (see CQL Q2/Q3 logic — same patterns apply to FortiGate/WAF log search).
- Firewall egress: alert on any outbound session sourced from the FortiSandbox management IP to a destination outside its known update/feed endpoints.
- DNS: review resolver logs for lookups originating from the appliance IP to newly-seen or low-reputation domains.
FortiSandbox Cloud / PaaS
- Pull tenant access/audit logs for the FortiSandbox Cloud / PaaS Web UI; look for unauthenticated or anomalous request patterns (CVE-2026-25089).
CrowdStrike LogScale CQL Hunt Queries
FortiSandbox has no Falcon host agent, so Q1–Q3 target NGSIEM / third-party HTTP log repos (NGFW, WAF, reverse proxy) ingested into Falcon NGSIEM — field names there are vendor-dependent; adjust to your parser. Q4–Q7 use the native Falcon EDR data model on adjacent managed hosts. Set FORTISANDBOX_MGMT_IP to your appliance management address before running.
Looks for: HTTP requests to the FortiSandbox management IP whose URI or body carries path-traversal sequences or shell metacharacters — the combined CVE-2026-39813 / -39808 / -25089 signature. FP: low when scoped to the appliance IP; legitimate admin traffic does not contain ../ + shell metacharacters. ⚠ Field unverified NGSIEM HTTP field names are parser-dependent — validate url / http.request.body against your repo schema.
// HUNT: Inbound exploit pattern to FortiSandbox mgmt interface // MITRE: T1190, T1059 // CONF: high | FP: low | COST: medium | REQUIRES: NGFW/WAF/proxy HTTP logs in NGSIEM // FALSE POSITIVES: security scanners / authorized pentest sources hitting the appliance // TUNING: exclude approved scanner source IPs; restrict to dest = appliance mgmt IP dest_ip="FORTISANDBOX_MGMT_IP" | url := lower(url) | regex("(\\.\\./|%2e%2e%2f|%2e%2e/|\\.\\.%5c|%c0%ae|;|\\|\\||&&|\\$\\(|`)", field=url, strict=false) | groupBy([src_ip, url, http_method], function=count(as=hits)) | sort(hits, order=desc) | table([src_ip, http_method, url, hits], limit=200)
Looks for: directory-traversal sequences (raw and URL-encoded) in requests to the appliance JRPC API / Web UI — the auth-bypass primitive. FP: low; ../ in a JRPC API path is not normal admin behavior.
// HUNT: Path-traversal auth bypass against FortiSandbox JRPC API // MITRE: T1190 // CONF: high | FP: low | COST: low | REQUIRES: NGFW/WAF/proxy HTTP logs in NGSIEM // FALSE POSITIVES: vulnerability scanners; broken client building malformed paths dest_ip="FORTISANDBOX_MGMT_IP" | regex("(\\.\\./|\\.\\.\\\\|%2e%2e(%2f|%5c|/|\\\\)|%252e%252e)", field=url, strict=false) | groupBy([src_ip, url], function=count(as=attempts)) | attempts >= 1 | sort(attempts, order=desc) | table([src_ip, url, attempts], limit=200)
Looks for: shell metacharacters in request parameters/body to the appliance Web UI / JRPC API. FP: medium — encoded ampersands and semicolons appear in benign query strings; scope to the appliance IP and require a shell-command token to cut noise.
// HUNT: OS command-injection metacharacters to FortiSandbox // MITRE: T1190, T1059 // CONF: high | FP: medium | COST: medium | REQUIRES: NGFW/WAF/proxy HTTP logs (incl. body) in NGSIEM // FALSE POSITIVES: benign query strings containing & or ; ; legit API JSON // TUNING: require a shell command token (curl|wget|bash|sh|nc|id|whoami) near the metacharacter dest_ip="FORTISANDBOX_MGMT_IP" | payload := lower(url + " " + http_request_body) | regex("(;|\\|\\||&&|\\$\\(|`|%3b|%7c)\\s*(curl|wget|bash|/bin/sh|\\bsh\\b|nc |ncat|python|id;|whoami|cat /etc)", field=payload, strict=false) | groupBy([src_ip, http_method, url], function=count(as=hits)) | sort(hits, order=desc) | table([src_ip, http_method, url, hits], limit=200)
Looks for: outbound sessions sourced from the FortiSandbox management IP to destinations outside its known update/feed endpoints — the strongest indicator of successful RCE. Runs against NGSIEM firewall/proxy egress; an adjacent-host Falcon variant is Q5. FP: low once the Fortinet update/feed allow-list is in place.
// HUNT: New outbound from FortiSandbox mgmt IP (post-exploit callback) // MITRE: T1071, T1105 // CONF: high | FP: low | COST: medium | REQUIRES: firewall/proxy egress logs in NGSIEM // FALSE POSITIVES: Fortinet update / FortiGuard feed endpoints // TUNING: allow-list Fortinet update FQDNs/IPs; alert on everything else src_ip="FORTISANDBOX_MGMT_IP" | direction="outbound" | !cidr(dest_ip, subnet=["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16"]) | dest_domain != *.fortinet.com and dest_domain != *.fortiguard.com | groupBy([dest_ip, dest_domain, dest_port], function=count(as=sessions)) | sort(sessions, order=desc) | table([dest_ip, dest_domain, dest_port, sessions], limit=200)
Looks for: Falcon-managed hosts recording an inbound network connection whose remote address is the FortiSandbox management IP — visible from the EDR side of the pivot. FP: low; legit appliance-to-host traffic is narrow (log forwarding, scan submission) and can be allow-listed by port.
// HUNT: Falcon host sees inbound connection from FortiSandbox mgmt IP // MITRE: T1021, T1105 // CONF: medium | FP: low | COST: low | REQUIRES: Falcon NetworkConnectIP4 // FALSE POSITIVES: known appliance-to-host service ports (log forwarding, sample submit) // TUNING: exclude RemotePort values for sanctioned appliance services #event_simpleName=/^NetworkConnectIP4$/ | RemoteAddressIP4="FORTISANDBOX_MGMT_IP" | RemotePort != 514 AND RemotePort != 443 | groupBy([ComputerName, aid, RemotePort, LocalPort], function=count(as=conns)) | sort(conns, order=desc) | table([ComputerName, aid, RemoteAddressIP4, RemotePort, LocalPort, conns], limit=200)
Looks for: network (Type 3) / interactive logons on managed hosts that could correlate to lateral movement from the appliance. FP: medium — Falcon UserLogon does not always carry the source IP, so correlate with Q5 by host/timeframe rather than relying on this alone.
// HUNT: Logon activity on managed hosts (pivot correlation) // MITRE: T1021, T1133 // CONF: medium | FP: medium | COST: low | REQUIRES: Falcon UserLogon // FALSE POSITIVES: routine service/admin logons // TUNING: join to Q5 hits by ComputerName + time window; alert only on overlap #event_simpleName=/^UserLogon$/ | in(LogonType, values=[3, 10]) | groupBy([ComputerName, UserName, LogonType], function=count(as=logons)) | sort(logons, order=desc) | table([ComputerName, UserName, LogonType, logons], limit=200)
Looks for: download/exec tooling (curl/wget/certutil/powershell -enc) on managed hosts — the post-pivot execution stage (T1105 / T1059). FP: medium — these binaries are dual-use; correlate with Q5 hosts and recent appliance connections before escalating.
// HUNT: Ingress tool transfer / scripted exec on adjacent hosts // MITRE: T1105, T1059 // CONF: medium | FP: medium | COST: medium | REQUIRES: Falcon ProcessRollup2 // FALSE POSITIVES: admin scripting, software deployment, patching jobs // TUNING: scope to ComputerName set returned by Q5; exclude known deployment service accounts #event_simpleName=/^(ProcessRollup2|SyntheticProcessRollup2)$/ | CommandLine=/(curl|wget|certutil\s+-urlcache|bitsadmin|powershell.*-enc|Invoke-WebRequest)/i | groupBy([ComputerName, FileName, CommandLine], function=count(as=execs)) | sort(execs, order=desc) | table([ComputerName, FileName, CommandLine, execs], limit=200)
CrowdStrike Custom IOA Recommendations
Custom IOAs run on Falcon-managed hosts. The appliance has no agent, so IOA value is limited to the pivot stage. Network-side detection (Q1–Q4) should be promoted to NGSIEM scheduled searches / Custom IOC entries instead.
| IOA name | Pattern | Exclusions | Promotion path |
|---|---|---|---|
| Ingress Tool Transfer post-appliance-contact | ProcessRollup2 + CommandLine matches download utility (curl/wget/certutil/bitsadmin/IWR) on a host that recently received a connection from the appliance IP | Known patch/deployment service accounts; SCCM/Intune host set | Q7 → Custom IOA (Detect), severity High; correlate with Q5 |
| Reverse-shell child from network listener | cmd.exe / bash / sh / python spawned with a network-bearing parent on adjacent hosts | Legit admin shells; CI runners | Investigate-only first; promote after baseline |
Network detections Q1–Q4 → promote as NGSIEM Scheduled Searches with email alerts (see alert package). Atomic IOCs (source IPs, C2 domains, payload hashes) → Falcon IOC Management once published.
Machine-Readable IOC Appendix
One-click copy blocks for import / deployment. Atomic indicators use REPLACE_WITH_… placeholders — no vendor IOCs are public yet; the high-value content here is behavioral.
type,value,action,severity,expiration,description,tags ipv4,REPLACE_WITH_SOURCE_IP,detect,critical,2026-12-18,FortiSandbox exploit source,campaign:FortiSandbox-Triple-Flaw domain,REPLACE_WITH_C2,detect,high,2026-12-18,FortiSandbox post-exploit C2,campaign:FortiSandbox-Triple-Flaw sha256,REPLACE_WITH_SHA256,prevent,critical,2026-12-18,Tooling dropped on pivoted host,campaign:FortiSandbox-Triple-Flaw
[INBOUND] HTTP to FortiSandbox mgmt IP with path traversal: ../ ..\ %2e%2e%2f %2e%2e%5c %252e%252e (CVE-2026-39813) [INBOUND] HTTP param/body to mgmt IP with shell metachar + cmd token: (;|||&&|$(|`) near (curl|wget|bash|sh|nc|id|whoami) (CVE-2026-39808 / -25089) [OUTBOUND] new session sourced from FortiSandbox mgmt IP to any host outside Fortinet update/feed allow-list == successful RCE (highest fidelity) [PIVOT] Falcon host inbound conn from mgmt IP on non-service port
CVE-2026-39813 CVSS 9.1 Path traversal in JRPC API -> auth bypass (patched 2026-04-14)
CVE-2026-39808 CVSS 9.1 OS command injection, unauthenticated (patched 2026-04-14)
CVE-2026-25089 CVSS 9.1 OS command injection (FortiSandbox + Cloud +
PaaS Web UI) via crafted HTTP (patched June 2026 PT)
Note: CVE-2026-25089 public exploit is AI-generated / faulty; no reliable working PoC yet.
Related: CVE-2025-61624 (path traversal, requires high privs) flagged exploited - chaining candidate.
# FortiSandbox exposure checklist 1. Confirm firmware >= fixed build per Fortinet PSIRT FG-IR advisory for each CVE. 2. Verify mgmt interface is NOT internet-reachable (run external port scan from outside). 3. Restrict mgmt/JRPC API to a dedicated admin VLAN / allow-listed source set. 4. Confirm appliance HTTP + egress logs are forwarded to SIEM / NGSIEM. 5. Set FORTISANDBOX_MGMT_IP in all Q* queries; build the Fortinet update allow-list for Q4.
Detection Validation Gates
| Gate | Check | Pass criteria |
|---|---|---|
| Telemetry ready | NGFW/WAF/proxy HTTP logs and appliance egress logs reach NGSIEM; Falcon covers adjacent hosts | Sample HTTP + egress events for the appliance IP visible in the last 24h |
| Benign baseline | Run Q4 with the Fortinet update allow-list in place over 7 days | Zero unexplained outbound destinations from the appliance IP |
| Positive test | From an authorized test source, send a benign request containing ../ to a non-prod appliance / lab | Q1 and Q2 fire on the synthetic request |
| FP tuning | Review Q3 hits for one week | FP rate acceptable after the shell-token TUNING filter; document exclusions |
| Promotion | Q1/Q2/Q4 stable and low-FP | Promote to scheduled searches with email alerting; keep Q3/Q6/Q7 investigate-only until correlated |
Hardening — Tiered
- Patch to fixed build (MITRE M1051 Update Software). Apply the Fortinet PSIRT fixes: -39813 / -39808 (2026-04-14) and -25089 (June 2026 Patch Tuesday). This is the only control that closes the vulns. Verify: appliance firmware version vs FG-IR advisory.
- Remove the management interface from any internet-facing path (M1035 Limit Access to Resource Over Network). External port scan must show no exposed FortiSandbox mgmt / JRPC API. ⚠ best-practice — vendor hardening guide
- Alert on any new egress from the appliance IP (detective hardening). Deploy Q4 as a scheduled alert immediately even before patch windows close.
- Network segmentation (M1030 Network Segmentation): place FortiSandbox mgmt + JRPC API on a dedicated admin VLAN, reachable only from an allow-listed jump-host/PAM source set. Verify: firewall rule readout; confirm no other source can reach the mgmt port.
- Egress allow-listing (M1037 Filter Network Traffic): restrict appliance outbound to Fortinet update/feed endpoints only; default-deny everything else. Verify: egress policy + Q4 baseline shows zero unexpected destinations.
- WAF / reverse-proxy in front of the Web UI with rules blocking path traversal and command metacharacters as defense-in-depth.
- Centralized appliance log forwarding + monitoring (M1047 Audit): ensure all Fortinet appliances forward admin/event + HTTP logs to NGSIEM with retention; build a standing dashboard for the appliance estate.
- Appliance lifecycle / EoL program: track firmware against PSIRT advisories continuously; auto-ticket on new FortiSandbox FG-IR entries (M1051).
- PAM-gated administration: all appliance admin via privileged-access workstations with session recording.
Deployable Playbooks
A · FortiGate / perimeter — block & restrict the appliance mgmt interface (FortiOS CLI)
# 1. Restrict the FortiSandbox mgmt interface to an admin allow-list (run on the gateway protecting it)
config firewall address
edit "FSA-MGMT"
set subnet REPLACE_WITH_FSA_MGMT_IP 255.255.255.255
next
edit "ADMIN-ALLOWLIST"
set type ipmask
set subnet REPLACE_WITH_ADMIN_CIDR 255.255.255.0
next
end
# 2. Permit admin sources to the appliance, deny all other inbound to it
config firewall policy
edit 0
set name "permit-fsa-admin-only"
set srcintf "any"
set dstintf "any"
set srcaddr "ADMIN-ALLOWLIST"
set dstaddr "FSA-MGMT"
set action accept
set service "HTTPS" "SSH"
set logtraffic all
next
edit 0
set name "deny-fsa-mgmt-other"
set srcaddr "all"
set dstaddr "FSA-MGMT"
set action deny
set logtraffic all
next
end
# 3. Default-deny egress from the appliance except Fortinet update/feed endpoints
# (build the FORTIGUARD-FEEDS address group from current Fortinet update FQDNs/IPs)
B · NGSIEM scheduled-alert wiring (pseudocode)
# Promote Q1, Q2, Q4 to scheduled searches with email alerting: search: <paste Q1 / Q2 / Q4 CQL> schedule: every 15 minutes, lookback 20 minutes threshold: results >= 1 action: email SOC distro; create case; tag campaign:FortiSandbox-Triple-Flaw # Keep Q3, Q6, Q7 as investigate-only until correlated with Q5 / Q4 hits.
C · Appliance verification readout
# On the FortiSandbox console (vendor-supported commands only): # - confirm running firmware build and compare to the FG-IR fixed version # - review admin session history and JRPC API access for unknown sources # - confirm syslog/log-forwarding to SIEM is enabled and reaching the collector # Do NOT run untrusted / offensive tooling against production appliances.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Restrict appliance mgmt interface to admin allow-list (Playbook A); block all egress from the appliance IP except Fortinet feeds; if compromise confirmed, fully network-isolate the appliance. | Network / Firewall | Firewall rule change ticket; egress drop logs |
| Eradicate | Patch to fixed firmware; rebuild/re-image the appliance from a known-good image if RCE confirmed (do not trust in-place cleanup of a compromised appliance); rotate all credentials/API tokens/certs the appliance held. | Security Eng / Fortinet support | Firmware version proof; credential-rotation log |
| Recover | Restore service behind segmentation + WAF; re-enable monitoring (Q4 standing alert); validate verdict/inspection integrity. | Security Ops | Q4 baseline clean; segmentation verified |
| Investigate pivot | Run Q5/Q6/Q7 against managed hosts the appliance could reach; contain any host showing inbound-from-appliance + suspicious exec. | SOC / IR | Falcon detections; host containment records |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1190 | Path-traversal auth bypass (CVE-2026-39813) | Q1, Q2 | — | GOOD (if HTTP logs ingested) |
| T1190 / T1059 | Command injection (CVE-2026-39808 / -25089) | Q1, Q3 | — | PARTIAL — needs request body logging |
| T1071 / T1105 | Post-exploit callback from appliance | Q4 | — | GOOD — highest fidelity |
| T1021 / T1133 | Lateral movement into mgmt network | Q5, Q6 | Reverse-shell IOA | PARTIAL — correlation-dependent |
| T1105 / T1059 | Tool transfer / exec on pivoted host | Q7 | Ingress-tool IOA | PARTIAL — dual-use binaries |
| T1505 | Implant / persistence ON the appliance | — | — | GAP — no host agent on appliance; rely on vendor console + rebuild |
| T1190 (Cloud/PaaS) | CVE-2026-25089 against FortiSandbox Cloud / PaaS Web UI | — | — | GAP — limited customer telemetry; rely on provider audit logs |
Validation: Coverage is contingent on the appliance's surrounding HTTP and egress logs reaching NGSIEM. The two GAP rows (on-appliance persistence and Cloud/PaaS) are inherent telemetry blind spots, not tuning issues — cover them via vendor console review, appliance rebuild on confirmed compromise, and provider audit logs. Re-run all validation gates (§11) after setting FORTISANDBOX_MGMT_IP and building the Fortinet update allow-list.
Hunt Summary Ticket
TITLE: FortiSandbox Triple-Flaw — CVE-2026-39813 / -39808 / -25089 (active exploitation)
SEVERITY: CRITICAL — CVSS 9.1 x3, unauthenticated RCE, exploited in the wild
SCOPE: All FortiSandbox appliances (on-prem, Cloud, PaaS Web UI) + adjacent managed hosts
HYPOTHESIS: Unauth crafted HTTP -> path-traversal auth bypass -> OS command injection ->
command execution on appliance -> outbound callback / lateral pivot
QUERIES: Q1 exploit-pattern inbound | Q2 path-traversal | Q3 cmd-injection metachars |
Q4 appliance egress (highest fidelity) | Q5 Falcon pivot | Q6 lateral logon | Q7 tool transfer
DO FIRST: 1) Confirm patch level vs FG-IR 2) Pull mgmt iface off internet
3) Run Q4 (any new egress from appliance IP = treat as compromise)
FINDINGS: <populate from hunt>
GAPS: No host EDR on appliance (T1505 persistence); Cloud/PaaS telemetry limited;
no public atomic IOCs yet; CVE-2026-25089 PoC faulty/AI-generated
ACTIONS: Patch -> segment -> egress allow-list -> rebuild on confirmed RCE -> rotate creds
OWNER: HuntPack
VERSION: v0.1 · 2026-06-18
Changelog
table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.References
| Tier | Source | Used for | Access date |
|---|---|---|---|
| 1 | BleepingComputer — Critical FortiSandbox flaws now exploited | ITW status, CVE detail, patch timeline, -25089 faulty-PoC note, CVE-2025-61624 chaining | 2026-06-18 |
| 1 | Help Net Security — FortiSandbox vulnerabilities | Vector (crafted HTTP to Web UI / JRPC API), unauth/low-complexity confirmation | 2026-06-18 |
| 1 | The Hacker News — Attackers exploit three Fortinet flaws | Auth-bypass → command-injection chain | 2026-06-18 |
| 1 | SecurityWeek — 3 recently-patched FortiSandbox vulns in crosshairs | Severity + patch corroboration | 2026-06-18 |
| 1 | SC World — Three critical FortiSandbox bugs actively exploited | Severity + ITW corroboration | 2026-06-18 |
| ref | MITRE ATT&CK | T1190 / T1059 / T1133 / T1505 / T1021 / T1105 mapping + M-number mitigations | 2026-06-18 |