← Back to Feed CACHED · 2026-10-25 04:36:38 · CACHE_KEY CVE-2026-20079
CVE-2026-20079 · CWE-288 · Disclosed 2026-03-04

Cisco Secure Firewall Management Center pre-auth root RCE via static csm_processes session fixation

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

Leaving a master key under the welcome mat of the building that stores every other key

CVE-2026-20079 is a pre-authentication remote code execution vulnerability in Cisco Secure Firewall Management Center (FMC), the centralized management console that configures and monitors an organization's entire Cisco Secure Firewall (Firepower Threat Defense) fleet. At boot time, FMC creates a machine-level session entry in its sfsnort.sessions database using a static, predictable session identifier (csm_processes) and hardcoded internal credentials (report:snortrules). An unauthenticated remote attacker can present this fixed session cookie via crafted HTTP requests, upgrade it into a full UI session with CSRF token access, and chain through the validateLicense and upgradeReadinessCall CGI endpoints to write and execute arbitrary shell scripts as root. Affected versions span nearly the entire supported lineup: 6.4.0.13 through 7.0.x before 7.0.9, 7.1.x through 7.2.x before 7.2.11, 7.3.x through 7.4.x before 7.4.6, 7.6.x before 7.6.5, 7.7.x before 7.7.12, and 10.0.x before 10.0.1. Cloud-Delivered FMC, Cisco ASA, Cisco FTD appliances, and Security Cloud Control are not affected.

Cisco's vendor severity of CRITICAL / CVSS 10.0 is accurate and, if anything, undersells the operational blast radius. A CVSS:3.1 AV:N/AC:L/PR:N/UI:N/S:C perfectly describes the network attack vector, trivial complexity, zero privilege requirement, and changed scope (root on FMC allows reconfiguring downstream FTD devices). The one theoretical friction point — the csm_processes session can be cleared by dashboard interactions or periodic cleanup, narrowing the exploitation window to shortly after reboot or on idle appliances — has been proven irrelevant by real-world campaigns. Cisco Talos documented three separate threat-actor clusters (Sandworm / GRU Unit 74455, Qilin ransomware, and a credential-theft group) successfully exploiting this flaw at scale, compromising at least 178 devices out of ~3,000 targeted IPs. Public PoC code from VulnCheck and CyberAuth is freely available on GitHub. CISA added this to the KEV catalog on September 9, 2026 with a federal deadline of September 12 — a 3-day window reflecting the severity. The vendor score stands.

"Pre-auth root on the box that controls every firewall in your fleet. Patch now."
02 · The Attack Path

6 steps from start to impact.

STEP 01

Identify internet-exposed or internal FMC web interface

The attacker locates a Cisco FMC web management interface, either directly exposed to the internet (Censys/FOFA report 300–700 instances globally) or reachable from the internal network after initial access. The FMC web interface listens on HTTPS/443 by default and presents a recognizable Cisco login page with identifiable HTTP headers and title strings.
Conditions required:
  • Network reachability to FMC web interface on port 443
Where this breaks in practice:
  • Best practice isolates FMC on a dedicated management VLAN; only 300–700 instances are internet-facing
  • Internal attackers need prior foothold to reach management segment
Detection/coverage: Shodan/Censys/FOFA queries for Cisco FMC; internal asset inventory and network segmentation audits
STEP 02

Present static csm_processes session cookie

The attacker sends an HTTP request with the cookie CGISESSID=csm_processes. This matches the static machine-session entry that FMC wrote into sfsnort.sessions at boot time. Because the session ID is deterministic and identical across all FMC appliances and reboots, no brute-forcing or credential guessing is required. The attacker then authenticates using the hardcoded internal credentials report:snortrules to upgrade this machine session into a UI session.
Conditions required:
  • The csm_processes session row must still exist in the database (not yet cleared by user interaction or cleanup)
Where this breaks in practice:
  • Session is cleared by any dashboard interaction, admin login, or periodic cleanup routine — window is post-reboot or on idle/unattended appliances
  • Real-world exploitation proves this window is sufficient: 178 confirmed compromises
Detection/coverage: Web server access logs showing CGISESSID=csm_processes from external IPs; failed/unusual authentication events in FMC audit log
STEP 03

Acquire sf_action_id CSRF token

With an upgraded UI session, the attacker retrieves the sf_action_id CSRF token from the FMC web application. This token is required to call restricted CGI endpoints. The token is returned in standard page responses and is trivially extracted.
Conditions required:
  • Valid upgraded UI session from step 2
Where this breaks in practice:
  • None — automatic once session is upgraded
Detection/coverage: Anomalous session creation events in FMC; IDS signatures matching the specific request pattern
STEP 04

Write malicious script via validateLicense endpoint

Using the sf_action_id and the sajaxintf.cgi endpoint's validateLicense action, the attacker writes a shell script to /var/tmp/license.tmp. The payload is delivered via JSON Unicode-escaped strings to evade basic input filtering. This is the arbitrary file write primitive that converts auth bypass into code execution. Tool: VulnCheck PoC / CyberAuth CVE-2026-20079 Python exploit.
Conditions required:
  • CSRF token from step 3
  • Write access to /var/tmp/ (default FMC configuration allows this)
Where this breaks in practice:
  • None — the CGI endpoint performs no additional authorization checks beyond the session
Detection/coverage: File integrity monitoring on /var/tmp/license.tmp; Snort/Suricata signatures for the crafted HTTP POST body
STEP 05

Trigger root execution via upgradeReadinessCall

The attacker calls the pjb.cgi endpoint with the upgradeReadinessCall action, which internally invokes SF::System::Wrappers::RunCmd to execute /var/tmp/license.tmp as root. This completes the chain: the attacker now has an interactive root shell on the FMC appliance. From here, Sandworm deployed Cyclops Blink, Qilin staged ransomware, and UAT-12197 planted web shells.
Conditions required:
  • Malicious script written in step 4
  • pjb.cgi endpoint reachable (same web interface)
Where this breaks in practice:
  • None — pjb.cgi runs with root privileges by design
Detection/coverage: Process monitoring for unexpected child processes of httpd/Perl workers; EDR-equivalent agents on FMC (if deployed); network IDS for reverse shell callbacks
STEP 06

Pivot to managed firewall fleet and downstream network

With root on FMC, the attacker can push arbitrary policy changes to all managed FTD appliances — disabling ACLs, opening tunnels, adding NAT rules, or extracting VPN credentials. Talos observed attackers harvesting managed device configurations via bash scripts and extracting Active Directory credentials. The FMC-to-FTD management channel (sftunnel) is pre-authenticated and trusted, giving the attacker fleet-wide firewall control.
Conditions required:
  • Root access on FMC (achieved in step 5)
  • FMC managing one or more FTD devices (the entire purpose of FMC)
Where this breaks in practice:
  • None — this is the designed management path
Detection/coverage: FMC change audit logs showing unauthorized policy deployments; anomalous sftunnel traffic patterns; SIEM correlation of FMC admin actions with no matching human operator
03 · Compensating Control

1
CRITICAL 10.0→HIGH 7.5
SEVERITY REDUCED
Restrict FMC web interface to dedicated management VLAN with strict ACLs — FMC should never be reachable from the internet or general user networks. Place it on an isolated management VLAN with firewall rules permitting only authorized administrator source IPs on port 443. This eliminates the unauthenticated remote attack vector for external and most internal attackers. Per noisgate mitigation SLA for CRITICAL: deploy within 3 days. However, given active exploitation, implement immediately, within hours.
2
CRITICAL 10.0→IGNORE 0.0
SEVERITY REDUCED
Apply Cisco hot-fix to the affected FMC branch immediately — Install the vendor hot-fix for your branch (7.0.9.1-3, 7.2.11.1-4, 7.4.7.1-3, 7.6.5.1-2, 7.7.12.1-2, or 10.0.1.1-2). Cisco states there is no workaround — patching is the only definitive remediation. Given KEV listing and active exploitation, treat this as an emergency change: patch within hours, not days. The fix is ~25 lines (Apache header validation + Auth.pm session type check) and has low regression risk.
3
CRITICAL 10.0→CRITICAL 10.0
Audit FMC for indicators of compromise before and after patching — Before patching, check for: files in /var/tmp/license.tmp, unexpected JAR files (cmd.jar) in Tomcat directories, Cyclops Blink binary hash 6f98add5d1a7729192b6ad8491d85c505c64836f7881742d6b93bd8e3d2fe461, reverse shell processes, unexpected cron entries, and connections to known C2 IPs (89.34.96.56, 208.123.119.215, 91.214.78.118). If IOCs are found, treat the FMC and all managed FTD appliances as compromised. Deploy within 3 days per noisgate mitigation SLA.
4
CRITICAL 10.0→CRITICAL 9.0
Deploy IDS/IPS signatures for the csm_processes session cookie pattern — Create or deploy Snort/Suricata rules matching HTTP requests containing CGISESSID=csm_processes from non-localhost sources, and POST requests to sajaxintf.cgi with validateLicense or pjb.cgi with upgradeReadinessCall actions. This provides detection-in-depth but does NOT prevent exploitation — it only alerts after the attempt. Deploy within 3 days.
5
CRITICAL 10.0→HIGH 7.0
SEVERITY REDUCED
Block FMC web interface access at upstream firewall for non-admin sources — As an emergency measure, configure upstream network firewalls or load balancers to drop all traffic to the FMC web interface (port 443) except from a short allowlist of administrator jump hosts. This is the fastest control to deploy if network segmentation is incomplete. Implement within hours given active exploitation.
What doesn't work
  • Web Application Firewall (WAF) in front of FMC: The exploit uses legitimate HTTP request structures with a valid-looking session cookie and JSON-encoded payloads. Generic WAF rules will not detect or block the specific csm_processes session fixation or the Unicode-escaped script injection without custom signatures.
  • Disabling the FMC web interface entirely: FMC's web interface is the primary management console for the product — disabling it removes the ability to manage the firewall fleet, which defeats the purpose of having FMC.
  • Multi-factor authentication on FMC login: The vulnerability bypasses the authentication system entirely using a machine-level session; MFA on the user login flow is never reached and provides zero protection.
  • Rotating admin passwords on FMC: The exploit uses the hardcoded report:snortrules internal machine credentials, not any administrator account password. Password rotation of admin accounts does not affect this attack path.
04 · Intelligence Metadata

The supporting signals.

In-the-Wild StatusActively exploited by three distinct clusters: UAT-11823 (Sandworm / GRU Unit 74455) deploying Cyclops Blink; UAT-11988 (Qilin ransomware) staging encryption campaigns; UAT-12197 (crimeware) planting web shells and credential harvesters. ~3,000 IPs targeted, 178 devices confirmed compromised. (Talos)
CISA KEVListed September 9, 2026 with federal remediation deadline of September 12, 2026 (3-day window). (CISA)
EPSS0.88472 (88th percentile) — indicates very high predicted exploitation probability within 30 days
PoC AvailabilityMultiple public PoCs: CyberAuth/CVE-2026-20079 (Python, multi-mode: fingerprint, check, exploit, interactive shell); VulnCheck clean-room implementation with full root-shell demo; Nuclei template available. Weaponization is trivial.
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H — 10.0. Network-reachable, no complexity, no auth, no interaction, changed scope (root on management plane pivots to downstream fleet). Every sub-metric is worst-case.
Affected VersionsOn-premises FMC: 6.4.0.13–7.0.x (before 7.0.9), 7.1.x–7.2.x (before 7.2.11), 7.3.x–7.4.x (before 7.4.6), 7.6.x (before 7.6.5), 7.7.x (before 7.7.12), 10.0.x (before 10.0.1). Cloud-Delivered FMC, ASA, FTD, and SCC are not affected.
Fixed VersionsHot-fix builds: 7.0.9.1-3, 7.2.11.1-4, 7.4.7.1-3, 7.6.5.1-2, 7.7.12.1-2, 10.0.1.1-2. Cisco states no workaround exists; patching is the only remediation.
Internet ExposureCensys: ~300 exposed instances; FOFA: 600–700 exposed instances as of September 2026. FMC is not designed to be internet-facing; these represent misconfigurations. Internally-reachable FMC is the larger population.
Disclosure TimelineMarch 4, 2026: Cisco advisory published. July 2026: companion CVE-2026-20316 confirmed exploited. August 2026: CVE-2026-20079 exploitation confirmed by Cisco PSIRT. September 9, 2026: CISA KEV listing. Patch fix ~25 lines of code (Apache header validation + Auth.pm session type check).
Reporting / DiscoveryDiscovered internally by Cisco; exploitation documented by Cisco Talos Intelligence Group. VulnCheck published independent technical analysis and clean-room PoC. CyberAuth published open-source Python exploit.

Sources.

  1. NVD — CVE-2026-20079
  2. Cisco Talos — FMC Ongoing Exploitation
  3. VulnCheck — Cisco FMC Auth Bypass Technical Analysis
  4. BleepingComputer — Cisco Confirms CVE-2026-20079 Exploited
  5. CISA KEV Alert — September 9, 2026
  6. CyberAuth/CVE-2026-20079 PoC — GitHub
  7. Qualys ThreatPROTECT — Cisco FMC Advisory
  8. SecurityAffairs — Qilin Ransomware via Cisco FMC
05 · The Call

Final Verdict
= UNCHANGED to CRITICAL (10.0/10)

Why this verdict

  • Pre-auth remote root with trivial complexity: The entire chain — from first HTTP request to root shell — requires zero credentials, zero user interaction, and a single predictable session cookie. The ~25-line patch confirms the root cause was embarrassingly simple: a static session ID and hardcoded internal credentials baked into every FMC appliance.
  • Session cleanup window is theoretical friction, not practical: While the csm_processes session can be cleared by dashboard interactions, Talos documented 178 confirmed compromises across 3,000 targeted IPs from three independent threat-actor clusters. The window is clearly exploitable on real production appliances, especially those that reboot during maintenance windows and aren't immediately interacted with.
  • Active exploitation by nation-state and ransomware operators: Sandworm (GRU Unit 74455) deploying Cyclops Blink and Qilin ransomware operators leveraging this for encryption campaigns eliminates any argument for theoretical-only risk. This is not a CTF exercise — it is an active battlefield.
  • Role multiplier: FMC is canonically a high-value network management plane component. Every FMC installation exists specifically to centrally manage a fleet of Cisco Secure Firewall (FTD) appliances. Root access on FMC gives the attacker push-button control over every managed firewall's ACLs, NAT rules, VPN configurations, and inspection policies. The blast radius is not one host — it is *fleet-scale*: disabling perimeter firewalls, opening tunnels, exfiltrating VPN credentials, and pivoting into the entire protected network. Conservatively 100% of FMC installations occupy this high-value role because that IS FMC's sole purpose. The verdict floor is CRITICAL per the deployment-role blast radius rule.
  • Internet exposure confirms external attack surface: 300–700 FMC instances are internet-facing per Censys/FOFA. While this is a fraction of total deployments, it provides zero-click initial access with no prior foothold required. For internally-deployed FMC, any attacker with network adjacency to the management VLAN can exploit identically — and management VLANs are a standard lateral movement target.
  • Public weaponized PoC and EPSS 88th percentile: Multiple working exploit tools on GitHub, Nuclei templates, and an EPSS score of 0.88 collectively indicate mass exploitation is not merely possible but ongoing and accelerating.

Why not higher?

CVSS 10.0 is already the maximum score. There is no higher severity to assign. The vendor rating is accurate and the real-world evidence confirms it.

Why not lower?

Every friction point that might theoretically reduce severity has been empirically disproven by active exploitation. The session cleanup window does not prevent exploitation at scale (178 confirmed compromises). FMC is not a workstation or a low-value target — it is *the* management plane for the firewall fleet, making every instance a crown-jewel asset. Downgrading below CRITICAL would require evidence that the session window blocks >99% of attempts or that FMC is routinely deployed in non-management roles, neither of which is true. KEV listing and active nation-state exploitation override any remaining friction arguments.

06 · Verification

Crowdsourced verification payload.

Run this script on each FMC appliance as root (via SSH or console). It checks the installed FMC software version against known-vulnerable ranges and inspects the sessions database for the exploitable csm_processes entry. Example: sudo bash check_cve_2026_20079.sh

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_cve_2026_20079.sh — Cisco FMC CVE-2026-20079 vulnerability checker
# Run as root on the FMC appliance itself.
# Exit codes: 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN

set -euo pipefail

RESULT="UNKNOWN"

# Get FMC version
if [ -f /etc/sf/ims.conf ]; then
  VERSION=$(grep 'SWVERSION=' /etc/sf/ims.conf 2>/dev/null | head -1 | cut -d'=' -f2 | tr -d '"' || true)
elif command -v sf_version &>/dev/null; then
  VERSION=$(sf_version 2>/dev/null | grep -oP '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || true)
else
  VERSION=""
fi

if [ -z "$VERSION" ]; then
  echo "[!] Could not determine FMC software version."
  echo "UNKNOWN"
  exit 2
fi

echo "[*] Detected FMC version: $VERSION"

# Parse version components
IFS='.' read -r MAJOR MINOR PATCH <<< "$VERSION"

# Check against known-vulnerable ranges
# Fixed: 7.0.9+, 7.2.11+, 7.4.6+, 7.6.5+, 7.7.12+, 10.0.1+
vuln=0

if [ "$MAJOR" -eq 6 ]; then
  vuln=1  # All 6.x affected
elif [ "$MAJOR" -eq 7 ]; then
  if [ "$MINOR" -eq 0 ] && [ "$PATCH" -lt 9 ]; then
    vuln=1  # 7.0.x before 7.0.9
  elif [ "$MINOR" -eq 1 ]; then
    vuln=1  # 7.1.x all affected
  elif [ "$MINOR" -eq 2 ] && [ "$PATCH" -lt 11 ]; then
    vuln=1  # 7.2.x before 7.2.11
  elif [ "$MINOR" -eq 3 ]; then
    vuln=1  # 7.3.x all affected
  elif [ "$MINOR" -eq 4 ] && [ "$PATCH" -lt 6 ]; then
    vuln=1  # 7.4.x before 7.4.6
  elif [ "$MINOR" -eq 6 ] && [ "$PATCH" -lt 5 ]; then
    vuln=1  # 7.6.x before 7.6.5
  elif [ "$MINOR" -eq 7 ] && [ "$PATCH" -lt 12 ]; then
    vuln=1  # 7.7.x before 7.7.12
  fi
elif [ "$MAJOR" -eq 10 ]; then
  if [ "$MINOR" -eq 0 ] && [ "$PATCH" -lt 1 ]; then
    vuln=1  # 10.0.0
  fi
fi

# Check for the exploitable session in database
SESS_DB="/var/sf/peers/*/sfsnort.sessions"
session_present=0
for db in $SESS_DB; do
  if [ -f "$db" ]; then
    if sqlite3 "$db" "SELECT COUNT(*) FROM sessions WHERE session_id='csm_processes';" 2>/dev/null | grep -q '[1-9]'; then
      session_present=1
      echo "[!] ACTIVE csm_processes session found in: $db"
    fi
  fi
done

# Check for IOCs
ioc_found=0
if [ -f /var/tmp/license.tmp ]; then
  echo "[!] IOC: /var/tmp/license.tmp exists — possible exploitation artifact"
  ioc_found=1
fi
if find /opt/cisco/fp/tomcat -name 'cmd.jar' 2>/dev/null | grep -q .; then
  echo "[!] IOC: cmd.jar found in Tomcat directory — possible web shell"
  ioc_found=1
fi

# Check for patched Apache config (the fix adds X-Auth-User-Type header)
patched_apache=0
if grep -rq 'X-Auth-User-Type' /etc/httpd/conf* /etc/apache2/* 2>/dev/null; then
  patched_apache=1
  echo "[+] Apache header validation for X-Auth-User-Type detected (patch indicator)"
fi

# Determine result
if [ $vuln -eq 1 ] && [ $patched_apache -eq 0 ]; then
  RESULT="VULNERABLE"
  echo "[!!] Version $VERSION is in the vulnerable range and patch indicator not found."
  if [ $session_present -eq 1 ]; then
    echo "[!!] CRITICAL: Exploitable session is ACTIVE. Immediate patching required."
  fi
  if [ $ioc_found -eq 1 ]; then
    echo "[!!] CRITICAL: Indicators of compromise detected. Initiate IR."
  fi
elif [ $patched_apache -eq 1 ]; then
  RESULT="PATCHED"
  echo "[+] Patch indicators present. Version: $VERSION"
elif [ $vuln -eq 0 ]; then
  RESULT="PATCHED"
  echo "[+] Version $VERSION is at or above the fixed version."
else
  RESULT="UNKNOWN"
  echo "[?] Could not conclusively determine patch status."
fi

echo ""
echo "$RESULT"

case $RESULT in
  PATCHED)    exit 0 ;;
  VULNERABLE) exit 1 ;;
  *)          exit 2 ;;
esac