Endpoint Manager Mobile (EPMM)

CVE-2026-1281: Ivanti EPMM zero-day gives attackers code execution without a login

A bash injection in EPMM's app store URL handling lets unauthenticated attackers run commands on the appliance (CVSS 9.8). Exploited as a zero-day, then mass-exploited, with sleeper web shells and theft of the EPMM database.

Published Updated

ExploitedYes, in CISA KEVAdded 29 Jan 2026
Ransomware useNot reportedPer CISA
SeverityCRITICALCVSS 3.1 9.8
EPSS99%Chance of exploitation in 30 days
Public exploitYes
FixAvailable

Affected and fixed versions

Product / branchFixed in
EPMM 12.5.0.x, 12.6.0.x, 12.7.0.x (12.7.0.0 and prior)RPM 12.x.0.x, or upgrade to 12.7.0.1, 12.8.0.1 or later
EPMM 12.5.1.0, 12.6.1.0 and priorRPM 12.x.1.x, or upgrade to 12.6.1.1 or later
Neurons for MDM (cloud), Endpoint Manager (EPM), SentryNot affected

Always confirm against the vendor advisory, which lists every fixed hotfix.

What it is

Ivanti EPMM (formerly MobileIron Core) uses old bash scripts behind Apache RewriteMap rules to build URLs for its In-House Application Distribution feature. The script, /mi/bin/map-appstore-url, takes values from the request and later compares one of them in a bash arithmetic expression. By pointing that value at a second variable that holds a command substitution, an attacker gets bash to run the command. The request needs no login: a GET to /mifs/c/appstore/fob/... is enough.

The twin bug CVE-2026-1340 is the same flaw in a second script, /mi/bin/map-aft-store-url, behind the Android File Transfer feature (/mifs/c/aftstore/fob/...). Patch and hunt for both together.

Ivanti disclosed both as zero-days. watchTowr published a working request the next day, and exploitation went from targeted to automated within a week. EPMM holds your mobile device inventory, users, LDAP configuration and the policies pushed to every phone, so a compromised server affects more than itself.

Attackers used the access for:

  • Dormant in-memory loaders (“sleeper” web shells) at /mifs/403.jsp, consistent with an access broker preparing appliances for resale (Defused).
  • JSP web shells, reverse shells, the Nezha monitoring agent and other malware (Unit 42).
  • Dumps of the mifs database (users, devices, LDAP server configuration, password history) and archives of /mi/files/system, downloaded and then deleted (Telekom Security).

In May, Ivanti disclosed CVE-2026-6973, an exploited flaw that needs EPMM admin credentials, and said customers who rotated credentials after a CVE-2026-1281 or CVE-2026-1340 compromise face significantly less risk from it.

Am I affected?

You’re affected if you run on-premises EPMM 12.7.0.0 or earlier (including the 12.5.1.0 and 12.6.1.0 lines) and you haven’t either:

  • applied the January 2026 RPM for your branch after your last upgrade, or
  • upgraded to 12.6.1.1, 12.7.0.1, 12.8.0.1 or later.

The RPM does not survive a version upgrade. If you applied it and then upgraded to another version without the fix, you are exposed again.

Not affected: Ivanti Neurons for MDM (cloud), Ivanti Endpoint Manager (EPM) and Ivanti Sentry.

NCSC-NL told all EPMM users to assume compromise and investigate. BSI, quoted by Telekom Security, said exploitation may have started as early as summer 2025, and that appliances should be treated as compromised even if they were patched on disclosure day.

What to do

1. Upgrade. Move to the newest EPMM release for your branch: 12.6.1.1, 12.7.0.1, 12.8.0.1 or later. These include the fix, so the January RPM is no longer needed. Ivanti has fixed more EPMM flaws since, so pick the newest build available, not just the minimum.

2. If you can’t upgrade tonight, apply the RPM for your branch. It needs no downtime.

  • RPM 12.x.0.x for 12.5.0.x, 12.6.0.x and 12.7.0.x
  • RPM 12.x.1.x for 12.5.1.0 and 12.6.1.0

Reapply it after every version upgrade until you’re on a fixed release.

3. Check for compromise, even if you patched on day one. Run Ivanti’s exploitation detection script (built with NCSC-NL) and follow Ivanti’s analysis guidance. Review your SIEM or syslog copy of the logs, not only the logs on the appliance, since attackers deleted their own files. Defused advises restarting the application servers after patching to clear any in-memory loader, since it never touches disk.

4. If you find signs of compromise:

  • Don’t clean the appliance in place. Ivanti says to restore from a known-good backup or build a new EPMM and migrate to it.
  • Rotate every credential the appliance held: admin accounts, the LDAP bind account, and any service or API accounts. Ivanti tied this step to lower risk from the admin-level flaw CVE-2026-6973.
  • Review admin accounts, SSO and LDAP settings, the apps and policies pushed to devices, and VPN or network configuration for changes.
  • Check systems reachable through Ivanti Sentry for reconnaissance and lateral movement.
  • Treat the user, device and LDAP data in the database as stolen.

Detection

Web and proxy logs (look back to at least January 2026):

  • GET requests to /mifs/c/appstore/fob/ or /mifs/c/aftstore/fob/ that contain gPath[ or theValue, especially with long h= or st= parameters (Unit 42, watchTowr). Response codes are often 404 even when the command ran.
  • Requests that hang for about five seconds. Attackers used sleep 5 to test whether a target was vulnerable (Unit 42).
  • Any request to /mifs/403.jsp, especially with the parameter k0f53cf964d387 or a large Base64 value starting with yv66vg. Responses containing 3cd3d, e60537 or ERROR:// (Defused).
  • Requests to 401.jsp, 1.jsp or /favicon.png under the external web root, and downloads of /tmp or /tmpno from it (Telekom Security).
  • The user agent Edg/143.0.0.1.

Network:

  • DNS lookups or outbound connections from EPMM to OAST and request-catcher services: oast.live, oast.fun, oast.site, oast.me, oast.pro, oastify.com, webhook.site, requestrepo.com, ceye.io, eyes.sh, interacth3.io, cdn365.top and ngrok-free.app (Unit 42, Telekom Security).
  • Outbound connections on 443 to the reverse-shell addresses listed above, and downloads of the Nezha monitoring agent (Unit 42).

On the appliance (with Ivanti support):

  • New or modified JSP files in /mi/tomcat/webapps/mifs/, and .css write-test files under its css/ folder.
  • /var/www/ext/html/favicon.png that isn’t an image, and odd one- or two-character files in /, /tmp and /var/tmp. BSI saw 7z-compressed malware there.
  • The setuid bit set on /usr/bin/env or /bin/sh, a binary named sysd, and evidence of mysqldump --databases mifs or tar of /mi/files/system.

Indicators of compromise

Many source IPs are VPN exits, rented servers or residential proxies. Use them to hunt in historical logs. Exploitation was mass-scale, so absence of these indicators does not mean an appliance is clean.

The .txt list has one IP per line and a fixed address, so a firewall can pull it as an External Dynamic List: https://patchtonight.com/iocs/CVE-2026-1281.txt

IndicatorTypeReported by
193.24.123[.]42IP83% of exploitation sessions, Feb 1-9GreyNoise
86.106.143[.]200IPReverse shell, port 443Unit 42, Telekom Security
23.227.199[.]80IPReverse shell, port 443Unit 42, Telekom Security
91.193.19[.]12IPReverse shell, port 443Unit 42, Telekom Security
146.70.41[.]193IPReverse shell, port 443Unit 42, Telekom Security
193.242.184[.]234IPReverse shell, port 443Unit 42, Telekom Security
192.242.184[.]234IPUnit 42, Telekom Security
217.148.142[.]48IPReverse shell, port 443Telekom Security
45.76.28[.]252IPServed update.sh on port 8083Telekom Security
64.7.199[.]177IPPorts 10882, 18899Unit 42
83.138.53[.]139IPUnit 42
84.72.235[.]18IPPort 443Unit 42
107.173.231[.]201IPPort 6666Unit 42
130.94.41[.]206IPPorts 8082, 10808Unit 42
138.226.247[.]241IPUnit 42
144.172.106[.]4IPUnit 42
152.32.173[.]138IPPayload downloadsUnit 42
158.247.199[.]185IPPort 80Unit 42
185.173.235[.]232IPUnit 42
194.78.67[.]253IPPort 443Unit 42
198.13.158[.]58IPPort 8443Unit 42
204.251.198[.]205IPPort 443Unit 42
104.219.171[.]96IP403.jsp sleeper campaignDefused
115.167.65[.]16IP403.jsp sleeper campaignDefused, Telekom Security
146.103.53[.]35IP403.jsp sleeper campaignDefused
148.135.183[.]63IP403.jsp sleeper campaignDefused
151.247.221[.]59IP403.jsp sleeper campaignDefused
185.240.120[.]91IP403.jsp sleeper campaignDefused, Telekom Security
185.239.140[.]40IP403.jsp sleeper campaignDefused
77.78.79[.]243IP403.jsp sleeper campaignDefused, Telekom Security
gobygo[.]netDomainSubdomains used for callbacksUnit 42
introo[.]shDomainSubdomains used for callbacksUnit 42
097b051c9c9138ada0d2a9fb4dfe463d358299d4bd0e81a1db2f69f32578747aSHA-256base.Info in-memory loader (SHA-256)Defused
2e29ad27b64874bfcb0c926fa324465243844ca8d36ab2db9ab79cf4d787b513SHA-256Malware dropped as sysd (SHA-256)Telekom Security
/mi/tomcat/webapps/mifs/403.jspFile pathSleeper web shellDefused, Unit 42, Telekom Security
/mi/tomcat/webapps/mifs/401.jspFile pathWeb shellUnit 42, Telekom Security
/mi/tomcat/webapps/mifs/1.jspFile pathWeb shellUnit 42
/var/www/ext/html/favicon.pngFile pathPersistent web shellBSI, via Telekom Security
/var/www/ext/html/tmpFile pathStaged database dumpTelekom Security
/var/www/ext/html/tmpnoFile pathStaged archive of /mi/files/systemTelekom Security
/mi/tomcat/webapps/mifs/css/poc.cssFile pathWrite test; also test.css, cssaaa.css, login.cssUnit 42
Edg/143.0.0.1User agentMalformed Edge user agentTelekom Security

Telekom Security's full indicator list (CSV).

Sources

Page changelog

  • Full analysis published.

KEV status, EPSS score and vendor data refreshed automatically, last on 13 Oct 2026.

Get alerts

A notification when we publish a new analysis or a covered vendor gets a new actively exploited CVE. No account, no email.