XHack Logo
XHack
Products
Services
Compliance
Pricing
Resources
Company
Sign upLogin
XHack Logo
XHackOffensive Security

Certified offensive security team delivering penetration testing evidence written for your auditor.

OSCP+OSCPC-AI/MLPenCASA
support@xhack.io

24/7 SOC Operations

XHack Status
Under attack? Get help now
Services
  • VAPT Services
  • Red Teaming
  • SOC Services
  • Threat Intelligence
  • Incident Response
  • Managed Testing
Pricing
  • Platform Plans
  • Services Pricing
Compliance
  • SOC 2
  • PCI DSS
  • ISO 27001
  • GDPR
  • HIPAA
  • ISO 42001
  • AI Maturity Assessment
  • TX-RAMP
  • NBFC / SECP
  • All Frameworks
Products
  • Vulnerability Assessment
  • GitGuard
  • AI Probe
  • SOC Dashboard
  • AI Agent
  • Cloud Investigation
Comparison
  • XBOW vs XHack
  • Horizon3 vs XHack
  • Strix vs XHack
  • Pentera vs XHack
Resources
  • Platform Tour
  • All Features
  • Install the Agent
  • XHack AI
  • Documentation
  • Blog
  • Case Studies
  • Documents
  • FAQ
Company
  • About Us
  • Our Team
  • Certifications
  • Security and Trust
  • VAPT Explained
  • Contact

© 2026 XHack. All rights reserved.

Security & TrustVulnerability DisclosurePrivacy PolicyTerms of ServiceRefund Policy
Blog/News

CVE-2026-104286: The Critical FortiMail Bug That Writes Files Anywhere on Disk

XHack

XHack

Author

October 1, 2026

14 min read

CVE-2026-104286: The Critical FortiMail Bug That Writes Files Anywhere on Disk

Table of contents

17

What FortiMail’s IBE Portal Is, and Why an Unauthenticated Bug There Is Worse Than Usual

What CVE-2026-104286 Actually Is

How Path Traversal and a Null Byte Combine to Write Files Anywhere

What Active Exploitation Actually Looks Like: Fortinet’s Own IOC List

Is This Fortinet’s First KEV Entry of 2026? No

Are You Exposed to CVE-2026-104286?

Fixing CVE-2026-104286

Hunting for CVE-2026-104286 Compromise

How XHack Reads CVE-2026-104286

FAQ: CVE-2026-104286 Questions Answered

What is CVE-2026-104286?

Is CVE-2026-104286 being exploited?

Which FortiMail versions does CVE-2026-104286 affect?

Is there a workaround for CVE-2026-104286?

How do I fix CVE-2026-104286?

Is this Fortinet’s only exploited zero-day in 2026?

The Bottom Line

Read this in 30 seconds: CVE-2026-104286 is a CVSS 9.8 unauthenticated arbitrary file-write bug in Fortinet FortiMail, and Fortinet says it’s already being exploited.

  • It lives in the one FortiMail feature built for people without an account. Identity-Based Encryption (IBE) exists so external recipients who’ve never logged into FortiMail can open encrypted mail through a web portal, and that portal is what’s broken.
  • Fortinet found this chasing live attacks, not during a code audit. The advisory credits Fortinet’s own Product Security team and publishes a full list of files real attackers dropped on compromised boxes, not a theoretical proof of concept.
  • The path to compromise is documented, not inferred. Fortinet’s own indicator list names a malicious ld.so.preload file, two rewritten system binaries, two newly added ones, and two C2 IP addresses, pulled from real intrusions.
  • CISA flagged it for forensic triage, with a 3-day clock. Added to KEV on October 1, due October 4, meaning: check for prior compromise, don’t assume patching alone makes you safe.
  • There’s a real workaround if you don’t use the feature. Disable IBE entirely, or restrict access to trusted networks, if you can’t patch today.

A feature designed to let strangers in without a password is exactly the kind of feature that becomes an unauthenticated attacker’s front door, if the path it hands them isn’t checked carefully enough.

CVE-2026-104286 hit Fortinet FortiMail on October 1, 2026, rated CVSS 9.8, and Fortinet’s own advisory states it’s being actively exploited. CISA added it to the Known Exploited Vulnerabilities catalog the same day, with a three-day remediation deadline and a forensic-triage flag, CISA’s way of saying this isn’t just a patch-it-and-move-on bug.

Here’s what CVE-2026-104286 actually is, the mechanism Fortinet’s evidence points to, what’s confirmed versus reconstructed, and the exact indicators to check your own FortiMail deployment against.

CVE-2026-104286 severity summary: Fortinet FortiMail, CVSS 9.8, unauthenticated arbitrary file write via path traversal and null byte injection in the IBE portal, actively exploited, added to CISA KEV October 1 2026
CVE-2026-104286 at a glance: an unauthenticated write-anywhere bug in FortiMail’s IBE portal

What FortiMail’s IBE Portal Is, and Why an Unauthenticated Bug There Is Worse Than Usual

FortiMail is Fortinet’s secure email gateway, sitting in front of an organization’s mail flow to handle spam filtering, data-loss prevention, and encryption policy before messages reach an inbox. Identity-Based Encryption, IBE, is the piece of that product built for a specific, unavoidable problem: how does an external recipient, someone who has never had a FortiMail account and never will, open an email FortiMail encrypted on the way out?

The answer is a web portal that has to be reachable without a login, because requiring one would defeat the entire point. That’s not a design flaw by itself, plenty of products need an unauthenticated entry point for people outside the organization. CVE-2026-104286 lives inside exactly that portal. The flaw is in what it does with the request once it arrives: CVE-2026-104286 combines a path traversal weakness (CWE-22) with improper neutralization of a NULL byte or NULL character (CWE-158), and together they let an unauthenticated attacker write arbitrary files to the underlying filesystem via a crafted HTTP or HTTPS request.

An auth-bypass bug usually gets an attacker into an account. A write-anywhere bug on an internet-facing appliance gets them onto the filesystem directly, with no account involved at any point, which is a shorter and more dangerous path to full compromise.

What CVE-2026-104286 Actually Is

Here’s Fortinet’s own description, from advisory FG-IR-26-175:

“Improper limitation of a pathname to a restricted directory (‘Path Traversal’) [CWE-22] and improper neutralization of null byte or NULL character [CWE-158] in FortiMail may allow an unauthenticated attacker to write arbitrary files on the underlying system via crafted HTTP or HTTPS requests.”

  • CWE: CWE-22 (path traversal) combined with CWE-158 (improper NULL byte/character neutralization).
  • Score: CVSS 3.1 9.8, Critical, vector AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H/E:P/RL:O/RC:C, scored by Fortinet’s own PSIRT.
  • Confirmed exploited: yes. Fortinet’s advisory documents active exploitation directly, publishing a full indicator-of-compromise list from real intrusions, covered below, and CISA added this entry to its Known Exploited Vulnerabilities catalog on October 1, 2026, the same day it was disclosed.
  • Affected: FortiMail 8.0.0 through 8.0.1, 7.6.0 through 7.6.6, 7.4.0 through 7.4.8, and 7.2.0 through 7.2.9.
  • Discovered by: Fortinet’s own Product Security team, Gwendal Guégniaud, credited in the advisory. That detail matters: this wasn’t caught ahead of time by a code audit, it surfaced from investigating activity already happening on customer systems.

How Path Traversal and a Null Byte Combine to Write Files Anywhere

Fortinet’s advisory confirms what CVE-2026-104286 does, an unauthenticated write to an arbitrary path, but doesn’t spell out the exact request format or the specific IBE handler involved. Based on how this CWE pairing works in practice, here’s the mechanism CVE-2026-104286 is almost certainly built from, labeled clearly as reconstruction, not confirmed Fortinet detail.

An IBE portal request that stores or retrieves message-related content typically takes some form of identifier, a message ID, an attachment reference, a key-exchange token, and uses it to build a file path on the backend. A path traversal bug means that identifier isn’t restricted to a safe character set: something like ../../../../data/etc/httpd.conf escapes whatever directory the application intended to confine it to.

The null byte half of the bug is usually there to defeat a check layered on top of the path-building logic. A common pattern in older C-based request handling is appending a fixed suffix to whatever the user supplied, something like .enc or .tmp, specifically so a traversal payload still ends up inside an expected file type.

A null byte (%00 in a URL, or a raw 0x00 byte in the request body) can truncate that string during low-level file operations despite passing a higher-level string-length or extension check, because the two layers disagree about where the string actually ends. The result: the attacker’s full traversal path, unmodified, reaches the file write, with no safe suffix appended after it.

/* Illustrative reconstruction of the vulnerability class CVE-2026-104286
 * describes, not FortiMail's actual source. FortiOS firmware is closed-source;
 * this shows the CWE-22 + CWE-158 pattern the advisory names, not a verified read. */
char path[PATH_MAX];
char suffix[] = ".enc";

/* user_ref comes straight from the IBE portal request, unsanitized */
snprintf(path, sizeof(path), "/data/ibe/store/%s%s", user_ref, suffix);

/* a null byte inside user_ref truncates the string here, at the libc level,
 * even though the snprintf() call above already "added" the .enc suffix
 * to what the higher-level validation checked */
FILE *f = fopen(path, "wb");
fwrite(request_body, 1, request_body_len, f);

If user_ref is ../../../../data/etc/httpd.conf%00, the validation layer sees a string that ends in .enc, and the actual file operation, once the null byte truncates it at the libc level, opens /data/etc/httpd.conf for writing instead. That exact mechanism is our reconstruction of how a CWE-22/CWE-158 pairing like this one typically works, not something Fortinet’s advisory states directly, and we’re labeling it as reconstruction rather than confirmed fact.

What is confirmed, directly from Fortinet’s own IOC list, is that /data/etc/httpd.conf is one of the real files attackers modified in the wild. That’s not a coincidence with the mechanism above, it’s the kind of file a traversal-to-arbitrary-write bug would target precisely because overwriting the web server’s own configuration is a reliable way to regain access after the initial write.

How CVE-2026-104286 turns one unauthenticated request into persistence: path traversal and a null byte combine to produce an arbitrary file write, then a malicious ld.so.preload file turns that write into code execution on every process
CVE-2026-104286’s exploit chain: confirmed steps vs. our labeled reconstruction

What Active Exploitation Actually Looks Like: Fortinet’s Own IOC List

This is the part of CVE-2026-104286 that sets it apart from most freshly disclosed CVEs: Fortinet isn’t publishing a theoretical severity score for CVE-2026-104286, it’s publishing forensic evidence pulled from systems attackers already compromised.

Fortinet’s advisory lists seven specific filesystem changes seen across real intrusions:

  • [ADDED] /data/lib/liblog.so
  • [MODIFIED] /bin/smit
  • [ADDED] /data/bin/webconsole
  • [ADDED] /data/bin/mailservice
  • [MODIFIED] /data/etc/httpd.conf
  • [ADDED] /data/etc/ld.so.preload
  • [MODIFIED] /data/migadmin.tar.gz

Two of those entries matter more than the rest for understanding how this becomes full remote code execution, not just a file sitting on disk. /data/etc/ld.so.preload is a dynamic linker configuration file: any shared object listed inside it gets loaded into every process that starts on the system afterward, a classic persistence and code-execution technique once an attacker can write to the filesystem at all. Pairing that with a modified httpd.conf and two new binaries dropped into /data/bin/ turns a single arbitrary-file-write primitive into durable, system-wide code execution, not a one-off file drop.

Fortinet also published two IP addresses tied to the campaigns it observed: 79.141.169.187 and 45.129.0.192.

CVE-2026-104286 indicators of compromise: the seven files Fortinet confirmed attackers added or modified, including a malicious ld.so.preload and rewritten httpd.conf, plus two command-and-control IP addresses from real intrusions
CVE-2026-104286 IOCs: the exact files and IPs Fortinet’s advisory names

Is This Fortinet’s First KEV Entry of 2026? No

CVE-2026-104286 isn’t happening in isolation for this vendor, and treating CVE-2026-104286 as a one-off would be a mistake. CVE-2026-24858, an authentication-bypass bug (CWE-288) affecting FortiAnalyzer, FortiManager, and FortiNAC-F, was added to CISA’s KEV catalog back in January 2026, also CVSS 9.8, also confirmed under active exploitation at the time.

That’s not a pattern we’re claiming goes deeper than what we directly verified, we checked this one CVE against NVD rather than repeating a count from secondary reporting, and we’re not asserting an exact tally of every Fortinet KEV entry this year. What it does establish is that an internet-facing Fortinet product with a critical, actively exploited bug reaching KEV isn’t a one-time event in 2026. If your environment runs Fortinet appliances at all, CVE-2026-104286 is a reason to check your whole fleet’s patch posture, not just the one box running FortiMail.

Are You Exposed to CVE-2026-104286?

You’re exposed if both of these are true:

  1. You run an affected FortiMail version: 8.0.0 through 8.0.1, 7.6.0 through 7.6.6, 7.4.0 through 7.4.8, or 7.2.0 through 7.2.9.
  2. The IBE feature is enabled and its portal is reachable from a network an attacker can reach. Fortinet’s own workaround, disabling IBE entirely, is the clearest signal of exactly where the exposure lives.

If you don’t use IBE at all, that second condition is the fastest thing to check, and the fastest thing to fix without waiting on a maintenance window.

Fixing CVE-2026-104286

Closing CVE-2026-104286 takes four steps, in this order:

  1. Upgrade to a patched build. Fortinet has shipped FortiMail 8.0.2, 7.6.7, and 7.4.9. If you’re running the 7.2 branch, there’s no 7.2.x fix, Fortinet’s guidance is to move up to 7.4 or later.
  2. If you can’t patch today, disable IBE. config system encryption ibe, then set status disable, removes the vulnerable portal entirely if your organization doesn’t rely on it.
  3. If you do rely on IBE and can’t patch immediately, restrict access to trusted networks. Put the portal behind the same kind of network-level restriction you’d use for any other exposed management interface, not exposed broadly on the internet.
  4. Then hunt. CISA’s forensic-triage flag on this entry means: check for prior compromise before you treat patching as the end of the response.

Hunting for CVE-2026-104286 Compromise

Fortinet’s own IOC list gives you exact things to check for, not a general “look for suspicious activity” instruction:

# Check for the malicious ld.so.preload file Fortinet's advisory names
ls -la /data/etc/ld.so.preload

# Check for the two added binaries
ls -la /data/bin/webconsole /data/bin/mailservice /data/lib/liblog.so

# Confirm whether httpd.conf or migadmin.tar.gz match known-good hashes,
# or were modified outside your own change history
md5sum /data/etc/httpd.conf /data/migadmin.tar.gz /bin/smit

# Search connection logs for the two published C2 addresses
grep -E '79\.141\.169\.187|45\.129\.0\.192' /var/log/*

What to check for CVE-2026-104286 specifically:

  • The presence of /data/etc/ld.so.preload at all. On a FortiMail system that hasn’t been compromised, this file shouldn’t exist. Its presence alone is a strong indicator, not a false positive to explain away.
  • /data/bin/webconsole or /data/bin/mailservice existing when your own change records don’t account for them. Fortinet lists both as added by attackers, not legitimate product files you’d expect to find there.
  • Hash mismatches on /bin/smit, /data/etc/httpd.conf, or /data/migadmin.tar.gz against whatever baseline or vendor-published hash you can compare against.
  • Any outbound connection to 79.141.169.187 or 45.129.0.192 in firewall, proxy, or NetFlow logs, regardless of how far back your retention goes.
  • If you find a match on any indicator, treat it as confirmed compromise. Preserve logs, disk images, and any available memory capture before you patch or reboot, since CISA’s forensic-triage guidance for entries like this one specifically calls for evidence preservation ahead of remediation changes.
  • A clean check doesn’t rule out compromise using different tooling than what’s in the published IOC list. Patch and apply the workaround regardless of what the hunt turns up.

How XHack Reads CVE-2026-104286

The part of CVE-2026-104286 worth testing for on your own deployments isn’t the specific ld.so.preload trick, it’s the broader pattern: the one feature a security appliance builds specifically to serve unauthenticated outsiders is, by necessity, the part of the product with the least room for a validation mistake, and the part most worth testing harder than anything behind a login.

Path traversal and null-byte-style sanitization gaps are also not new or exotic bug classes individually, which is exactly why they keep showing up in current-year advisories: a feature gets added, a filename or reference gets taken from user input, and the validation covering it gets tested against the obvious case, not every encoding and truncation trick an attacker would actually try. Our AI VAPT services methodology runs automated and human-led testing specifically against exposed, unauthenticated functionality like this, not just the authenticated surface most internal reviews focus on, because that’s consistently where bugs like CVE-2026-104286 live.

If you’re running any Fortinet appliance with an internet-facing component, our write-up on a similarly exposed F5 BIG-IP management interface covers the same underlying question from a different vendor: what’s actually reachable from outside, and does it match what you assume is reachable.

FAQ: CVE-2026-104286 Questions Answered

What is CVE-2026-104286?

CVE-2026-104286 is a CVSS 9.8 vulnerability in Fortinet FortiMail combining path traversal (CWE-22) and improper NULL byte neutralization (CWE-158) in the Identity-Based Encryption (IBE) portal. It lets an unauthenticated attacker write arbitrary files to the underlying filesystem via a crafted HTTP or HTTPS request.

Is CVE-2026-104286 being exploited?

Yes. Fortinet’s advisory confirms active exploitation and publishes a detailed indicator-of-compromise list, including a malicious ld.so.preload file, modified system binaries, and two command-and-control IP addresses, from real intrusions. CISA added it to the Known Exploited Vulnerabilities catalog on October 1, 2026, with a remediation deadline of October 4.

Which FortiMail versions does CVE-2026-104286 affect?

FortiMail 8.0.0 through 8.0.1, 7.6.0 through 7.6.6, 7.4.0 through 7.4.8, and 7.2.0 through 7.2.9.

Is there a workaround for CVE-2026-104286?

Yes. Disable the IBE feature (config system encryption ibe, set status disable) if your organization doesn’t use it. If you do use IBE and can’t patch immediately, restrict access to the portal to trusted networks.

How do I fix CVE-2026-104286?

Upgrade to FortiMail 8.0.2, 7.6.7, or 7.4.9. If you’re on the 7.2 branch, move to 7.4 or later, since there’s no 7.2.x patched build. Then check your system against Fortinet’s published indicators of compromise before assuming the patch alone addressed prior exposure.

Is this Fortinet’s only exploited zero-day in 2026?

No. CVE-2026-24858, an authentication bypass affecting FortiAnalyzer, FortiManager, and FortiNAC-F, was added to CISA’s KEV catalog in January 2026 under active exploitation, also at CVSS 9.8.

The Bottom Line

CVE-2026-104286 didn’t come from a routine audit, it came from Fortinet chasing activity that was already happening on customer systems, and the advisory reads like it: a specific list of files attackers dropped, specific IP addresses, a specific feature to disable if you don’t need it. That’s a different kind of urgency than a CVE disclosed ahead of any known exploitation.

Patch to the fixed build for your branch, disable IBE if you don’t rely on it, and run Fortinet’s own indicator checks against your FortiMail systems regardless of patch timeline. A clean patch today doesn’t tell you what happened before today.


Categories

News

Next

How to Become a Bug Bounty Hunter in 2026: The Honest Roadmap

On this page

What FortiMail’s IBE Portal Is, and Why an Unauthenticated Bug There Is Worse Than Usual

What CVE-2026-104286 Actually Is

How Path Traversal and a Null Byte Combine to Write Files Anywhere

What Active Exploitation Actually Looks Like: Fortinet’s Own IOC List

Is This Fortinet’s First KEV Entry of 2026? No

Are You Exposed to CVE-2026-104286?

Fixing CVE-2026-104286

Hunting for CVE-2026-104286 Compromise

How XHack Reads CVE-2026-104286

FAQ: CVE-2026-104286 Questions Answered

What is CVE-2026-104286?

Is CVE-2026-104286 being exploited?

Which FortiMail versions does CVE-2026-104286 affect?

Is there a workaround for CVE-2026-104286?

How do I fix CVE-2026-104286?

Is this Fortinet’s only exploited zero-day in 2026?

The Bottom Line

Related articles

Continue reading

CVE-2026-76504: The Cisco SD-WAN Bug That Admin Logs In With One Encoded Letter

News

CVE-2026-76504: The Cisco SD-WAN Bug That Admin Logs In With One Encoded Letter

CVE-2026-76504 is a CVSS 9.8 unauthenticated admin-access bug in Cisco SD-WAN Manager, actively exploited. It’s th...

Read article
CVE-2026-27540: The WooCommerce Plugin With Two Roads to Admin

News

CVE-2026-27540: The WooCommerce Plugin With Two Roads to Admin

CVE-2026-27540 is an unauthenticated file-upload bug in a WooCommerce plugin, 100,000+ exploitation attempts blocked sin...

Read article
CVE-2026-88771: The Citrix NetScaler Bug That Turns a Login Field Into Root

News

CVE-2026-88771: The Citrix NetScaler Bug That Turns a Login Field Into Root

CVE-2026-88771 is a CVSS 9.5 unauthenticated RCE in every default Citrix NetScaler ADC/Gateway. Exploited as a zero-day ...

Read article