Skip to main content
Meet us at Black Hat USA 2026— Las Vegas, August 1–6Book a Meeting
Mallory
CriticalCISA KEVExploited in the wildPublic exploit

Authentication Bypass 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 and 7.4.6. The flaw allows a remote, unauthenticated attacker to bypass the EMS API's certificate-based authentication and send privileged administrative requests via crafted HTTP requests. Supporting reporting indicates the issue stems from EMS trusting attacker-controlled HTTP headers used to convey client-certificate state, including X-SSL-CLIENT-VERIFY and X-SSL-CLIENT-CERT, across a trust boundary. The application accepted spoofed values as if they had been set by the front-end web server after a legitimate TLS client-certificate handshake, enabling unauthorized access to administrative EMS functionality. Researchers also reported weak certificate validation behavior based on Distinguished Name string matching rather than full cryptographic verification. In observed intrusions, attackers used the resulting administrative access to modify EMS configuration, Remote Access Profiles, and endpoint policies, and to push malicious scripts and payloads to 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 grants effective administrative control of the FortiClient EMS management plane without valid credentials. From that position, an attacker can issue privileged API requests, alter EMS configuration, modify VPN and endpoint policy settings, defer upgrade reminders, and abuse trusted FortiClient management workflows to execute commands or deploy malware across EMS-managed endpoints. Observed exploitation used the flaw to distribute EKZ Infostealer disguised as a Fortinet update, resulting in theft of browser credentials, cookies, autofill data, payment information, addresses, and phone numbers from managed systems. Because EMS centrally manages endpoint security agents and VPN profiles, compromise can expand from the server to the broader managed fleet and enable follow-on access to internal applications, cloud services, and accounts, including session hijacking through stolen cookies.

Mitigation

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

If immediate patching is not possible, restrict access to the EMS management interface and API, including management port 8013, to trusted administrative IP ranges only and remove unnecessary internet exposure. Monitor EMS logs for indicators such as 'Certificate not found in request header,' unexpected certificate-authentication anomalies, suspicious privileged API activity, new accounts, logins from Tor or VPS-hosted IP addresses, and unauthorized changes to Remote Access Profile or endpoint policy settings. Hunt for the observed process chain involving fortitray.exe or ipsec.exe spawning cmd.exe and powershell.exe, and for artifacts such as GUID-named scripts under the FortiClient logs\Trace\scripts directory and FortiEndpoint_Patch.exe or related payloads on endpoints. Where compromise is suspected, revoke browser sessions and reset credentials because stolen cookies may bypass MFA protections.

Remediation

Patch, then assume compromise.

Upgrade FortiClient EMS to a fixed release. The provided content states Fortinet addressed the issue with out-of-band hotfixes for versions 7.4.5 and 7.4.6 and that FortiClient EMS 7.4.7 and later contain the permanent fix. Organizations running affected versions should apply the vendor hotfix or upgrade to 7.4.7 or later immediately. After patching, review EMS configuration and administrative activity for signs of compromise, including unauthorized changes to Remote Access Profiles, endpoint policies, certificate-related settings, and suspicious administrative actions. If exploitation is suspected, rotate affected credentials, revoke active sessions, inspect managed endpoints for malicious scripts or payloads such as FortiEndpoint_Patch.exe, and perform full incident response across the EMS server and managed endpoint estate.
PUBLIC EXPLOITS

Exploits

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

VALID 2 / 10 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.

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 evidence2

Every observed campaign linking this CVE to a named adversary.

Associated malware18

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 activity165

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