
CVE-2026-20079 - Cisco FMC Authentication Bypass RCE Analysis
VulnCheck details full exploit development for CVE-2026-20079, a CVSS 10.0 unauthenticated RCE in Cisco Secure Firewall Management Center (FMC). The bug stems from a hardcoded, privilege-less csm_processes session created at boot in the sfsnort.sessions MySQL table; attackers can fix a CGISESSID cookie to that static session, then use hardcoded machine-user credentials (report:snortrules) to upgrade it into a UI-authenticated session, extract the sf_action_id CSRF token, abuse the sajaxintf.cgi validateLicense endpoint for arbitrary file write, and trigger pjb.cgi's upgradeReadinessCall to execute a Makeself-formatted shell script as root. The post includes Perl source diffs from Auth.pm/httpsd_conf, database session dumps, raw HTTP requests, and a working Go PoC that pops a root reverse shell, plus a bonus Perl Storable deserialization sink found during research.
What it is
VulnCheck's exploit-development analysis of CVE-2026-20079, a CVSS 10.0 unauthenticated auth-bypass-to-root-RCE in Cisco Secure Firewall Management Center (FMC). Cisco published the advisory March 4, 2026. Censys sees ~300 exposed FMC instances; FOFA sees 600–700. VulnCheck reversed the patch (a ~25-line change to Apache's httpsd_conf.tt template and SF/Auth.pm) and built a working exploit.
How it works
At boot, the Go binary auth-daemon creates a session for the machine account csm_processes in the sfsnort.sessions table — but with a static session ID (csm_processes) instead of a dynamic UUID. An attacker sets CGISESSID=csm_processes and is treated as that machine user. The user has no permissions and no sf_action_id (CSRF token), so most CGI/API calls fail. The upgrade:
- Log in via
login.cgiusing the hardcoded credentialsreport:snortruleswhile carrying theCGISESSID=csm_processescookie. Auth upgrades the existing boot session to a UI (usertype=1) session and populatessf_action_id. (Usingcsm_processes's own credscsmdaemoninstead expires the session and locks you out — a different machine account is required.) - Extract the
sf_action_idfrom the rendered/ui/user/generalpage. - Arbitrary file write via
sajaxintf.cgi'svalidateLicensecall (all-user permission), writing JSON-Unicode-escaped bytes (\u000Afor newlines) to/var/tmp/license.tmp. Payload is a shell script in Cisco "Makeself" format (must contain# This script was generated using Makeself). - Trigger
pjb.cgi→SF::UI::DataObjectLibrary::upgradeReadinessCallpointing atlicense.tmp; the installer path runs it throughSF::System::Wrappers::RunCmd, which prependssudo— executing the script as root.
flowchart TD
A[Set CGISESSID=csm_processes<br/>boot session] --> B[login.cgi as report:snortrules<br/>upgrades session to UI]
B --> C[Extract sf_action_id]
C --> D[validateLicense write<br/>Makeself script to license.tmp]
D --> E[upgradeReadinessCall<br/>installer runs it as root]
A -. session cleared by UI activity .-x X[No exploit]Preconditions / Affected
- Cisco Secure Firewall Management Center; patched code seen under path version
7.7.12-3. - The host must have been rebooted and the injected boot session must still exist. The session is cleared by: authenticated dashboard/widget interaction, cloud-managed UI sessions, or periodic cleanups on account auth. Practically, targets are exploitable only shortly after boot or on systems no one logs into via the web UI.
What to do
Patch. The fix adds an Apache rule setting X-Auth-User-Type 1 for all non-localhost requests, and Auth.pm rejects any request whose session usertype (e.g. AUTH_IS_MACHINE=2) doesn't match the header — blocking web use of machine sessions. Restrict FMC web-interface exposure to the internet in the interim. VulnCheck offers an exploit, PCAPs, a YARA rule, and network signatures for five variants to Initial Access Intelligence customers — useful for detection sourcing.
Caveats
VulnCheck also found a path-traversal + Storable::retrieve deserialization sink (batchResults in SF/Util.pm, with unsafe $Storable::Eval=1) reachable via the same file write. They generated CODE-serialized data and reached STORABLE_thaw but found no working gadget to RCE before the installer path succeeded; they note a "Perl wizard" may find one.
CVEs named here
Technologies named here
- Censys
- Cisco Secure Firewall Management Center Software
- FOFA
- Cisco FMC version 7.7.12-3
- Cisco FMC version 7.7.11-1061
- cve-2026-20079_linux-amd64
- Makeself
- Cisco Secure Firewall Management Center
- Perl
- MySQL
Techniques named here
Related in AppSec
Flowise MCP Security Bypass Enables RCE
Inside an Oracle Database SQL Injection Attack | Huntress
OASIS
