← Back to Feed CACHED · 2026-07-17 01:55:53 · CACHE_KEY CVE-2026-39808
CVE-2026-39808 · CWE-78 · Disclosed 2026-04-14

A improper neutralization of special elements used in an os command

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

The malware detonation chamber has its own unlocked back door

CVE-2026-39808 is an unauthenticated OS command injection in the FortiSandbox WEB UI/API, reachable through the tracer-behavior job-tracing endpoint. A single crafted HTTP GET request drops shell metacharacters into a system call that runs as root, yielding pre-auth RCE on the appliance itself. Affected: FortiSandbox 4.4.0 through 4.4.8 and FortiSandbox PaaS through 23.4.4374; fixed in 4.4.9 (and 5.0.3 on the 5.0 branch). CWE-78, disclosed 2026-04-14 via FG-IR-26-100.

Vendor severity of CRITICAL / 9.8 is accurate — and if anything conservative given the target. FortiSandbox is the detonation and verdict engine for suspicious files across the Fortinet stack; a rooted sandbox can lie about verdicts, exfiltrate submitted samples (which routinely contain customer secrets, phishing payloads, and IR artefacts), and pivot into FortiGate/FortiMail/FortiClient EMS via the trust relationships those products maintain with it. Public PoC is on GitHub (error-inside/CVE-2026-39808, 0xBlackash/CVE-2026-39808) and Qualys/Help Net Security confirm in-the-wild exploitation alongside CVE-2026-25089 and CVE-2026-39813.

"Unauthenticated root RCE in a security appliance with a public PoC and observed exploitation. Vendor got this one right."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Locate an exposed FortiSandbox management interface

Attacker enumerates the target's Fortinet footprint via Shodan/Censys/FOFA queries against FortiSandbox HTTPS banners (Server: xxxxxxxx-xxxxx fingerprint, favicon hash, TLS cert CN=FortiSandbox). Mgmt UI listens on TCP/443 by default. Many organizations expose the WEB UI to peer offices or to the internet for remote analyst review.
Conditions required:
  • Network reachability to the FortiSandbox WEB UI (TCP/443)
  • Target running 4.4.0–4.4.8 or PaaS ≤ 23.4.4374
Where this breaks in practice:
  • Best-practice deployments keep FortiSandbox on the internal management VLAN only
  • Shodan shows a small public exposure (~hundreds of hosts) — most instances sit behind FortiGate
Detection/coverage: Shodan/Censys queries for FortiSandbox banners will surface publicly reachable instances; Qualys QID and Tenable plugin available.
STEP 02

Fire the pre-auth injection at /tracer-behavior

Attacker sends a crafted HTTP request to the job-tracing endpoint with shell metacharacters (;, $( ), backticks) in a parameter the backend passes to a system() call unsanitized. No authentication cookie or CSRF token required. Public PoCs from error-inside and 0xBlackash on GitHub weaponize this in one request.
Conditions required:
  • Reachable WEB UI from step 1
  • Endpoint reachable pre-auth (default)
Where this breaks in practice:
  • None meaningful — the endpoint is exposed by default and validated PoCs exist
Detection/coverage: WAF rules on shell-metachar in query strings will catch naive PoCs; Fortinet IPS signature published after FG-IR-26-100.
STEP 03

Execute arbitrary commands as root

The injected command runs in the FortiSandbox management-plane context, which is root. Attacker drops a reverse shell (bash -i >& /dev/tcp/…) or writes an SSH authorized_keys entry, then persists via the appliance's own cron or init scripts. FortiSandbox lacks the FortiOS restricted-shell containment that FortiGate has.
Conditions required:
  • Successful injection from step 2
Where this breaks in practice:
  • Egress filtering from mgmt VLAN can slow C2 setup, but data staging on-box is trivial
Detection/coverage: EDR is not present on FortiSandbox (appliance OS); rely on north-south NetFlow/PCAP for outbound anomalies from the appliance IP.
STEP 04

Poison verdicts and harvest submitted samples

With root, the attacker tampers with the verdict engine to return clean for attacker-controlled hashes — silently neutralizing every downstream FortiGate/FortiMail that consults this sandbox. They also exfiltrate the sample queue, which typically contains live phishing kits, credential-stealer configs, and (in IR shops) memory dumps and disk images from ongoing investigations.
Conditions required:
  • Root on FortiSandbox from step 3
Where this breaks in practice:
  • None — this is the design purpose of the box, now inverted
Detection/coverage: Cross-check FortiSandbox verdicts against a second engine (VirusTotal, Joe Sandbox) for drift; audit sample-download API calls.
STEP 05

Pivot into the Fortinet management fabric

FortiSandbox holds API tokens and service-account credentials for the FortiGate/FortiMail/FortiClient EMS peers that submit samples to it. Attacker extracts these from /data/etc/ config stores and uses them to authenticate to those peers, potentially reaching FortiManager and the broader estate. This is where a compromised sandbox becomes a fleet-level incident.
Conditions required:
  • Root from step 3
  • FortiSandbox peered with other Fortinet devices (default in most Fortinet-heavy shops)
Where this breaks in practice:
  • Segmented mgmt networks with per-device auth reduce peer reachability
  • Fortinet API tokens are per-device; each pivot needs its own auth reuse
Detection/coverage: FortiAnalyzer logs on peer devices will show new API sessions from FortiSandbox IP outside the sample-submission pattern.
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationConfirmed active exploitation per Qualys ThreatPROTECT and Help Net Security (June 2026), chained with CVE-2026-25089 and CVE-2026-39813
KEV statusNot yet listed in CISA KEV as of 2026-07-17, but active exploitation evidence makes listing likely imminent
Public PoCTwo public PoCs: error-inside/CVE-2026-39808 and 0xBlackash/CVE-2026-39808; technical write-up by Parth Shukla at pinaka.sh
EPSS0.48668 — top ~2-3% of all CVEs; consistent with an unauth RCE with public exploit
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — network, no auth, no user interaction, full CIA compromise
Affected versionsFortiSandbox 4.4.0 – 4.4.8, FortiSandbox PaaS ≤ 23.4.4374, FortiSandbox Cloud (same code path)
Fixed versionsFortiSandbox 4.4.9 or later; 5.0.3 on the 5.0 branch; PaaS auto-updated by Fortinet
Vulnerable endpoint/tracer-behavior job-tracing API endpoint — shell metacharacters passed unsanitized to system()
Exposure telemetryShodan surfaces low-hundreds of publicly reachable FortiSandbox WEB UIs; internal deployment count is much higher (10k+ enterprises)
ReporterFortinet PSIRT internal (advisory FG-IR-26-100); parallel work by Adham El Karn on the related FG-IR-26-141
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to CRITICAL (9.3/10)

This is a pre-auth root RCE on a security appliance with a public PoC and observed exploitation — the single most decisive factor is the role multiplier: FortiSandbox is the verdict authority for the surrounding Fortinet fabric, so compromise means silent detection bypass for every peer. Even with limited public exposure, the floor is CRITICAL because ≥10% of installs occupy the canonical high-value role (this IS a security-fabric appliance by definition).

HIGH Vulnerability details and patched version
HIGH Public exploit availability
MEDIUM Extent of in-the-wild exploitation — reported but not yet KEV-listed

Why this verdict

  • Pre-auth, one-shot RCE as root: no credentials, no user interaction, single HTTP request — attack complexity is as low as it gets.
  • Role multiplier — security fabric appliance: FortiSandbox is the malware verdict engine peers trust. Chain succeeds → attacker poisons verdicts fleet-wide, harvests submitted samples (phishing kits, IR artefacts), and pivots to peered FortiGate/FortiMail via stored API tokens. Blast radius is fleet-scale on any Fortinet-heavy estate; the CRITICAL floor is set by the appliance role itself.
  • Working PoC + observed exploitation: two GitHub repos with functional exploits and Qualys/Help Net Security reporting active abuse alongside CVE-2026-25089 and CVE-2026-39813 — this is not a theoretical bug.
  • Friction is only partial: most FortiSandbox instances sit on internal mgmt VLANs (mitigates internet-facing exposure), but any foothold inside the perimeter reaches the appliance. That narrows initial-access population, not blast radius, so it moves the verdict from a 9.8 to a 9.3 — it does not break the floor.

Why not higher?

Public internet exposure is limited (low-hundreds of FortiSandbox instances on Shodan), so the truly-unauthenticated remote-from-anywhere population is smaller than a FortiGate SSL-VPN bug. That prevents a 10.0 worm scenario but does not reduce the severity for any organization that runs one.

Why not lower?

Downgrading to HIGH would require either (a) authentication being required, (b) the blast radius being confined to the appliance itself, or (c) no working exploit. None of those hold — it's pre-auth, the appliance is a security fabric hub with peer trust, and public PoCs work. The role multiplier alone floors this at CRITICAL.

05 · Compensating Control

What to do — in priority order.

  1. Restrict FortiSandbox WEB UI to a management jump-host ACL immediately — Deploy within the noisgate CRITICAL mitigation SLA (≤3 days). Configure config system interface trusted-hosts on the mgmt interface to allow only jump-host and FortiAnalyzer IPs; block TCP/443 at the upstream FortiGate from all other sources. This kills the reachability precondition for the entire chain.
  2. Block internet exposure at the perimeter — Within 24 hours: audit FortiGate policies and any NAT rules exposing FortiSandbox to WAN. There is no legitimate reason for the sandbox WEB UI to be internet-reachable. Confirm with an external port scan from a cloud host.
  3. Rotate all API tokens the FortiSandbox holds for peers — Within the 3-day mitigation window: assume tokens for FortiGate, FortiMail, FortiClient EMS, and FortiManager peers are already exfiltrated if the appliance was internet-reachable. Rotate them and audit peer auth logs since 2026-04-14.
  4. Upgrade to FortiSandbox 4.4.9 or 5.0.3 — Remediation deadline is the noisgate CRITICAL remediation SLA (≤90 days) — but given active exploitation, target ≤14 days. Patch is available via the standard firmware download portal; test in a lab given the sandbox's role in verdict chains, then roll production.
  5. Hunt for indicators of prior compromise — Immediately: review FortiSandbox /var/log/httpd/access_log for GETs to /tracer-behavior with shell metacharacters, cross-check verdicts on recent submissions against a second engine, and audit outbound connections from the sandbox mgmt IP for non-Fortinet destinations.
What doesn't work
  • Requiring authentication on the WEB UI — the bug is pre-auth; the vulnerable endpoint doesn't check the session cookie.
  • WAF signatures for generic shell metacharacters — help against script-kiddie PoCs, bypassable via encoding (%24%28…%29, ${IFS}), not a durable control.
  • EDR on the appliance — FortiSandbox is a Fortinet-managed appliance OS, you cannot install third-party EDR.
  • IPS on the FortiGate protecting the sandbox — helps if traffic transits the gate, but many deployments have the sandbox and admin subnet on the same L2, bypassing inspection.
06 · Verification

Crowdsourced verification payload.

Run from an auditor workstation with network reachability to the FortiSandbox mgmt IP. Requires no credentials. Invoke as ./check-cve-2026-39808.sh 10.0.1.50 where the argument is the FortiSandbox WEB UI IP or hostname. Uses a safe version-banner probe — does not send the exploit payload.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check-cve-2026-39808.sh - Non-destructive check for FortiSandbox CVE-2026-39808
# Usage: ./check-cve-2026-39808.sh <host_or_ip>
# Exits 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -u

TARGET="${1:-}"
if [[ -z "$TARGET" ]]; then
  echo "Usage: $0 <fortisandbox-host>" >&2
  exit 2
fi

# Fetch login page — FortiSandbox exposes build/version in the HTML/JS bundle
RESP=$(curl -sk --max-time 10 "https://${TARGET}/" 2>/dev/null)
if [[ -z "$RESP" ]]; then
  echo "UNKNOWN: no HTTPS response from ${TARGET}"
  exit 2
fi

# Try to extract version string (format like 'v4.4.x-buildxxxx')
VER=$(echo "$RESP" | grep -oE 'v?[0-9]+\.[0-9]+\.[0-9]+' | head -1)
if [[ -z "$VER" ]]; then
  # Fall back to /rest/v3/system/status if reachable
  VER=$(curl -sk --max-time 10 "https://${TARGET}/rest/v3/system/status" \
        | grep -oE '"version"[[:space:]]*:[[:space:]]*"[0-9.]+"' \
        | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
fi

if [[ -z "$VER" ]]; then
  echo "UNKNOWN: could not determine FortiSandbox version on ${TARGET}"
  exit 2
fi

VER=${VER#v}
IFS=. read -r MAJ MIN PATCH <<< "$VER"

# Vulnerable: 4.4.0 through 4.4.8 (fixed in 4.4.9); also 5.0.x < 5.0.3
if [[ "$MAJ" -eq 4 && "$MIN" -eq 4 && "$PATCH" -le 8 ]]; then
  echo "VULNERABLE: FortiSandbox ${VER} on ${TARGET} (fix: 4.4.9)"
  exit 1
fi
if [[ "$MAJ" -eq 5 && "$MIN" -eq 0 && "$PATCH" -lt 3 ]]; then
  echo "VULNERABLE: FortiSandbox ${VER} on ${TARGET} (fix: 5.0.3)"
  exit 1
fi

echo "PATCHED: FortiSandbox ${VER} on ${TARGET}"
exit 0
07 · Bottom Line

If you remember one thing.

TL;DR
Treat this as a fire drill. This is a pre-auth root RCE on a security appliance with public PoCs and confirmed in-the-wild exploitation — the noisgate mitigation SLA for CRITICAL is ≤3 days, but active exploitation overrides that: patch or mitigate within hours. Monday morning: (1) confirm no FortiSandbox WEB UI is internet-reachable via external scan, (2) restrict mgmt access to jump-host ACLs on every 4.4.x/5.0.x FortiSandbox, (3) schedule the upgrade to 4.4.9 / 5.0.3 within 14 days (well ahead of the noisgate remediation SLA of ≤90 days), (4) rotate peer API tokens and hunt access logs for /tracer-behavior requests with shell metacharacters going back to the April disclosure date. Assume breach on any instance that was ever internet-exposed.

Sources

  1. Fortinet PSIRT FG-IR-26-100 advisory
  2. NVD — CVE-2026-39808
  3. Qualys ThreatPROTECT — active exploitation report
  4. Help Net Security — FortiSandbox exploitation
  5. Public PoC — error-inside/CVE-2026-39808
  6. Public PoC — 0xBlackash/CVE-2026-39808
  7. Parth Shukla technical write-up
  8. Field Effect — FortiSandbox critical fix roundup
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.