Skip to main content
Mallory
CriticalCISA KEVExploited in the wildPublic exploit

Authentication Bypass and RCE in Fortinet FortiClient EMS

IdentifiersCVE-2026-35616CWE-284· Improper Access Control

CVE-2026-35616 is a critical improper access control vulnerability in Fortinet FortiClient Endpoint Management Server (EMS) affecting versions 7.4.5 through 7.4.6. The flaw allows a remote, unauthenticated attacker to bypass the EMS API’s certificate-based authentication and authorization checks by sending crafted HTTP requests. Supporting reporting indicates the issue is tied to EMS trusting attacker-controlled client-certificate-related HTTP headers such as X-SSL-CLIENT-VERIFY and X-SSL-CLIENT-CERT, creating a trust-boundary failure in which forged headers can cause the application to treat an unauthenticated request as an authenticated administrative request. Researchers also reported weak certificate validation based on Distinguished Name string matching rather than cryptographic verification. Once the bypass succeeds, the attacker can issue privileged administrative API requests and abuse EMS management functionality, including configuration changes and command or code execution pathways. The vulnerability has been observed exploited in the wild, including to modify Remote Access Profiles and endpoint policies and to push malware to EMS-managed endpoints.

Share:
For your environment

Are you exposed to this one?

Mallory correlates every CVE against your assets, your vendors, and active adversary campaigns. Know which vulnerabilities matter for you, not just which ones are loud.

ANALYST BRIEF

Impact, mitigation & remediation

What it means. What to do now. Patch path, mitigations, and the assume-compromise checklist.

Impact

What an attacker gets, and what they’ve been doing with it.

Successful exploitation gives an unauthenticated remote attacker administrative control over the FortiClient EMS management plane. This can result in unauthorized code or command execution on the EMS server and abuse of trusted EMS workflows to push malicious scripts, policies, or payloads to managed endpoints at scale. Observed real-world abuse included modification of VPN scripting and endpoint policy settings to execute PowerShell-based malware delivery, resulting in deployment of the EKZ infostealer to enterprise endpoints. Secondary impact includes theft of browser credentials, cookies, and autofill data from managed systems, potential account takeover, lateral movement, persistence through management infrastructure, and broad compromise of an organization’s endpoint fleet.

Mitigation

If you can’t patch tonight, do this now.

If immediate patching is not possible, restrict access to the EMS management/API interface, including port 8013, to trusted administrative networks or specific IP allowlists and remove direct internet exposure wherever possible. Monitor for anomalous EMS log entries associated with exploitation attempts, including certificate-header/authentication anomalies, suspicious administrative actions, unfamiliar login origins such as Tor or VPS infrastructure, and unexpected changes to Remote Access Profile or endpoint policy settings. Hunt for unauthorized scripts executed through FortiClient VPN on_connect workflows and suspicious process chains involving fortitray.exe, cmd.exe, powershell.exe, and unexpected payloads. Treat any evidence of exploitation as a likely full management-plane compromise and inspect managed endpoints accordingly.

Remediation

Patch, then assume compromise.

Upgrade FortiClient EMS to version 7.4.7 or later, which contains the permanent fix. For affected deployments on 7.4.5 and 7.4.6, apply Fortinet’s out-of-band hotfix immediately if an upgrade cannot be performed at once. The hotfix reportedly strips attacker-supplied certificate-authentication headers before they reach the EMS application. Because the vulnerability has been actively exploited, remediation should be treated as incident response for exposed or potentially targeted systems. After patching, review EMS administrative activity, configuration changes, Remote Access Profiles, endpoint policies, new accounts, suspicious logins, and indicators of malicious script insertion; if compromise is suspected, rotate credentials, revoke active sessions, and investigate managed endpoints for follow-on malware.
PUBLIC EXPLOITS

Exploits

2 valid exploits after Mallory filtered fakes, detection scripts, and README-only repos (7 hidden).

VALID 2 / 9 TOTALView more in app
CVE-2026-35616MaturityPoCVerified exploit

This repository is a small standalone Python exploit for CVE-2026-35616 targeting a Fortinet API certificate-chain verification bypass. The repo contains three files: a README with usage guidance, one executable exploit script (exploit.py), and a requirements file. The exploit is not framework-based. Core capability: the script attempts to bypass client-certificate based access controls on Fortinet API endpoints by discovering acceptable CA/Common Names, generating a forged self-signed X.509 certificate with a candidate CN, and sending requests that spoof upstream TLS-authentication headers. It uses the headers X-SSL-CLIENT-VERIFY: SUCCESS and X-SSL-CLIENT-CERT containing a URL-encoded PEM certificate. If the target trusts these headers improperly, the script can access protected API routes. Operational flow: it builds a target base URL from command-line arguments (default 172.16.50.51:443), optionally enumerates acceptable client certificate CA names via openssl s_client, tests candidate CNs against /api/v1/system/capabilities, selects a working CN when HTTP/retval indicate success, then probes several additional API endpoints. It stores results in a JSON file under results/ and prints equivalent curl commands for manual verification. Notable targeted endpoints include /api/v1/system/capabilities, /api/v1/system/version, /api/v1/settings/server/public_address, /api/v1/fabric_device_auth/fortigate/init, and /api/v1/fortigate/info. The exploit is operational rather than a simple detector because it actively forges a certificate, performs authenticated bypass attempts, and retrieves protected API data. The payload is basic and hardcoded around header/certificate spoofing rather than a customizable post-exploitation framework.

wa6n3rDisclosed Apr 20, 2026pythonmarkdownnetworkweb
CVE-2026-35616MaturityPoCVerified exploit

This repository is a small standalone Python PoC for CVE-2026-35616 affecting Fortinet FortiClient EMS. It contains only two files: a README with usage/affected-version notes and one executable script, cve_2026_35616.py, which is the clear entry point. The script is not part of a larger exploit framework. The exploit targets a pre-authentication bypass in certificate-based authentication logic. Its core technique is to generate a self-signed X.509 certificate on the fly, URL-encode it, and send it in the X-SSL-CLIENT-CERT header while forcing X-SSL-CLIENT-VERIFY: SUCCESS. The script assumes the server-side component trusts these headers directly instead of validating the certificate cryptographically. Operational flow: (1) build the HTTPS base URL from target and port; (2) discover likely acceptable certificate common names (CNs) by invoking openssl s_client to inspect acceptable client CA names, by downloading certificates from /api/v1/ztna_certificates/download and parsing their CNs, and by reading a Serial Number response header from the target root page; (3) if discovery fails, fall back to hardcoded CN guesses (support, fortinet-ca2); (4) iterate through candidate CNs and attempt the bypass against /api/v1/system/capabilities; (5) once a working CN is found, probe several protected API endpoints with GET/POST/PATCH requests; and (6) print equivalent curl commands for manual reuse. Main exploit capabilities include unauthorized retrieval of system capabilities, version information, and public address settings, plus interaction with FortiGate-related API endpoints. The script is more than a detector because it actively performs the bypass and accesses protected resources, but it does not deploy a post-exploitation shell or arbitrary command payload. As written, it is an operational PoC for unauthorized API access against vulnerable FortiClient EMS instances.

AlaatkDisclosed Apr 19, 2026pythonmarkdownnetworkweb
EXPOSURE SURFACE

Affected products & vendors

Products and vendors Mallory has correlated with this vulnerability. Open in Mallory to drill down to specific CPE configurations and version ranges.

VendorProductType
FortinetForticlientemsapplication

Vendor-confirmed product mapping. Mallory continuously reconciles this list against your asset inventory.

ACTIVITY FEED

Recent activity

286 sources tracked across advisories, community write-ups, and news. New activity surfaces here as Mallory finds it.

What this page doesn’t show

The version that knows your environment.

This page is what’s public. Mallory adds the parts that aren’t: which of your assets are affected, which adversaries are exploiting it right now, which detections to deploy, and what to do tonight.
Exposure mapping

Query your assets running an affected version, and investigate the blast radius.

Threat actor evidence

Every observed campaign linking this CVE to a named adversary.

Associated malware10

Malware families riding this exploit, with evidence and IOCs.

Detection signatures2

YARA, Sigma, Snort, and vendor rules, auto-deployed to your SIEM.

Vendor-by-vendor mapping

Cross-references every affected SKU, including bundled OEM variants.

Social activity174

Community discussion across Reddit, Mastodon, and other social sources.