← Back to Feed CACHED · 2026-09-21 15:11:58 · CACHE_KEY CVE-2025-4428
CVE-2025-4428 · CWE-94 · Disclosed 2025-05-13

Remote Code Execution in API component in Ivanti Endpoint Manager Mobile 12.5.0.0 and prior on unspecified…

ASSESSED — NOISGATE
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

Like leaving a master key to every phone in your company on the front porch with a sign saying 'please don't touch'

CVE-2025-4428 is a Java Expression Language (EL) injection flaw in Ivanti Endpoint Manager Mobile (EPMM) versions ≤12.5.0.0, 12.4.0.1, 12.3.0.1, and 11.12.0.4. The bug lives in the DeviceFeatureUsageReportQueryRequestValidator class: user-supplied input in the format query parameter of the /mifs/rs/api/v2/featureusage endpoint is passed into Spring's AbstractMessageSource for error message interpolation, where it is evaluated as a Java EL expression. This lets an attacker execute arbitrary Java code — specifically Runtime.getRuntime().exec() — on the underlying server. By itself, the endpoint requires authentication (hence the vendor's CVSS 7.2 / PR:H rating). But CVE-2025-4427, a trivial authentication bypass caused by a missing Spring Security <intercept-url> rule on the same /mifs/rs/api/v2/ path, means bean-validation fires *before* @PreAuthorize is checked. Chain the two, and you have unauthenticated, internet-facing RCE with a single GET request.

The vendor's HIGH 7.2 rating dramatically understates real-world risk. Ivanti scored CVE-2025-4428 in isolation, requiring privileged authentication (PR:H). In practice, no attacker has ever needed credentials — every observed exploitation chains CVE-2025-4427 to bypass auth entirely. The effective CVSS vector is AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (9.8). EPMM is an MDM appliance that must be internet-facing to manage mobile devices, so the attack surface is inherent, not misconfiguration. UNC5221 — a China-nexus espionage group tracked by Mandiant and EclecticIQ — was exploiting this chain as a 0-day before disclosure on May 13, 2025, targeting healthcare, government, telecom, aviation, and defense across three continents. CISA added both CVEs to KEV on May 19, 2025, and published a dedicated Malware Analysis Report (AR25-261A) in September 2025 documenting custom Tomcat-layer implants. Multiple public PoCs (watchTowr, ProjectDiscovery, Metasploit module exploit/multi/http/ivanti_epmm_rce_cve_2025_4427_4428) make this trivially weaponizable. The EPSS probability of 0.865 places this in the top ~1% of all CVEs. Scoring this anything below CRITICAL is negligent.

"Unauthenticated RCE on an internet-facing MDM appliance, actively exploited by China-nexus APT"
02 · The Attack Path

6 steps from start to impact.

STEP 01

Identify internet-facing EPMM instance

The attacker scans for the EPMM login page or /mifs/ path signature using Shodan, Censys, or FOFA. Censys identified 174 vulnerable instances at time of disclosure. EPMM is designed to be internet-facing — it must accept connections from managed mobile devices — so exposure is by design, not misconfiguration.
Conditions required:
  • Target organization runs Ivanti EPMM ≤12.5.0.0
  • EPMM appliance is reachable from the internet (standard deployment)
Where this breaks in practice:
  • Small installed base compared to VPN appliances — Censys found only 174 exposed instances globally at disclosure
Detection/coverage: Censys, Shodan dork http.favicon.hash:-1420444444 OR http.title:"Ivanti", Nuclei template CVE-2025-4427
STEP 02

Bypass authentication via CVE-2025-4427

The attacker sends a GET request to /mifs/rs/api/v2/featureusage which lacks a Spring Security <intercept-url> rule. Because Spring MVC resolves method arguments and triggers bean-validation before the @PreAuthorize annotation is evaluated, the request reaches the validator without any session token or credentials. This is a zero-click, zero-credential bypass.
Conditions required:
  • EPMM version is unpatched (≤12.5.0.0, ≤12.4.0.1, ≤12.3.0.1, ≤11.12.0.4)
Where this breaks in practice:
  • None — the bypass is architectural and requires no special conditions beyond an unpatched version
Detection/coverage: WAF rules matching unauthenticated requests to /mifs/rs/api/v2/featureusage; Emerging Threats IDS signatures; Rapid7 InsightVM authenticated check (May 16, 2025 content)
STEP 03

Inject EL expression for code execution

The attacker appends a Java EL payload to the format query parameter: ?format=${T(java.lang.Runtime).getRuntime().exec('id')}. The DeviceFeatureUsageReportQueryRequestValidator passes this string to localizedMessageBuilder.getLocalizedMessage(), which evaluates it as an EL expression. The server executes the command as the EPMM service account (typically root or a high-privilege Linux user). Payloads observed in the wild use base64-encoded Python reverse shells delivered via Runtime.exec().
Conditions required:
  • Steps 1 and 2 completed — attacker has unauthenticated access to the validator endpoint
Where this breaks in practice:
  • None — single GET request with URL-encoded payload; Metasploit module automates the entire chain
Detection/coverage: IDS/IPS signatures for EL injection patterns in URL parameters (${, T(java.lang.Runtime)); Suricata SID sets from Emerging Threats; SOC Prime detection rules
STEP 04

Deploy persistence implants

UNC5221 deploys KrustyLoader (a Rust-based loader) from attacker-controlled S3 buckets, which downloads AES-128-CFB encrypted Sliver C2 implants and injects them into memory. CISA's MAR documents a second persistence path: web-install.jar files dropped to /tmp that inject malicious Tomcat listeners (SecurityHandlerWanListener.class, WebAndroidAppInstaller.class) capable of intercepting all HTTP requests and executing encrypted payloads. FRP (Fast Reverse Proxy) is also deployed for SOCKS5 tunneling into the internal network.
Conditions required:
  • Step 3 achieved — attacker has arbitrary code execution on the EPMM appliance
Where this breaks in practice:
  • EDR on the EPMM appliance is uncommon — these are typically hardened Linux appliances without third-party agents
  • Network-based detection may catch C2 callbacks to known infrastructure
Detection/coverage: CISA MAR IOCs (AR25-261A); Yara rules for KrustyLoader and Sliver; network indicators for S3 bucket domains (openrbf.s3.amazonaws.com, etc.); GreyNoise tags for Ivanti EPMM scanning
STEP 05

Harvest credentials and MDM fleet data

Post-compromise, the attacker reads hardcoded MySQL credentials from /mi/files/system/.mifpp, dumps the mifs database containing LDAP configurations, Office 365 OAuth refresh tokens and access tokens, mobile device metadata (IMEI, phone numbers, SIM details), and enrollment certificates. Tomcat heap dumps are extracted for additional credentials. This gives the attacker identity-tier access (LDAP/O365 tokens) and fleet-scale control (ability to push malicious profiles to all managed mobile devices).
Conditions required:
  • Persistent access to the EPMM appliance filesystem and database
Where this breaks in practice:
  • If O365 tokens have short lifetimes or conditional-access policies, lateral value is time-limited
  • Network segmentation between EPMM and internal AD/LDAP may limit credential reuse
Detection/coverage: Database access logging; anomalous Tomcat heap dump creation; LDAP bind attempts from unexpected source IPs
STEP 06

Lateral movement into enterprise network

Using harvested LDAP credentials and the FRP SOCKS5 tunnel, the attacker pivots from the EPMM DMZ appliance into the internal corporate network. The Sliver C2 framework provides built-in capabilities for lateral movement, credential harvesting, and pivoting. Because EPMM typically has network connectivity to Active Directory for user/group synchronization, the path from EPMM compromise to domain compromise is often a single hop.
Conditions required:
  • Harvested LDAP credentials are valid
  • EPMM has network path to internal AD/LDAP infrastructure
Where this breaks in practice:
  • Network segmentation and micro-segmentation can restrict EPMM's lateral reach
  • MFA on internal resources limits credential reuse
Detection/coverage: Anomalous LDAP binds; Sliver C2 network signatures; lateral movement detection in EDR/NDR
03 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationConfirmed active. Exploited as a 0-day by UNC5221 (China-nexus APT) from May 15, 2025 onward, targeting healthcare, telecom, aviation, government, defense, and finance across Europe, North America, and APAC. CISA published MAR AR25-261A in September 2025 documenting two custom malware sets.
CISA KEV StatusListed. Both CVE-2025-4427 and CVE-2025-4428 added to KEV on May 19, 2025.
EPSS Score0.86519 — top ~1% of all CVEs. Extremely high probability of exploitation activity.
Proof-of-ConceptMultiple public PoCs. watchTowr Labs (May 15), ProjectDiscovery Nuclei template, Metasploit module exploit/multi/http/ivanti_epmm_rce_cve_2025_4427_4428, GitHub PoC by xie-22.
CVSS Vector (Vendor)CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H (7.2) — PR:H is misleading because CVE-2025-4427 eliminates the authentication requirement entirely. Effective chained vector is AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (9.8).
Affected VersionsEPMM ≤12.5.0.0, ≤12.4.0.1, ≤12.3.0.1, ≤11.12.0.4 — all supported branches prior to the May 2025 patch.
Fixed Versions12.5.0.1, 12.4.0.2, 12.3.0.2, 11.12.0.5 — released May 13, 2025.
Internet ExposureCensys observed 174 vulnerable EPMM instances internet-facing at disclosure, primarily in cloud environments. EPMM is architecturally internet-facing (must accept mobile device connections). GreyNoise observed a 9× spike in Ivanti product scanning in April 2025, preceding disclosure.
Disclosure TimelineMay 13, 2025: Ivanti advisory + patches. May 15: watchTowr PoC + first observed UNC5221 exploitation. May 19: CISA KEV listing. Sep 2025: CISA MAR AR25-261A published.
AttributionUNC5221 (China-nexus), tracked by Mandiant/Google TAG and EclecticIQ. Infrastructure overlap with SAP NetWeaver CVE-2025-31324 campaigns. Deploys KrustyLoaderSliverFRP toolchain. Shared C2 IP 27.25.148[.]183 (China-hosted).
04 · The Call

Final Verdict
UPGRADED to CRITICAL (9.8/10)

Why this verdict

  • Authentication bypass nullifies PR:H. Ivanti scored CVE-2025-4428 alone at 7.2 with PR:H (privileged authentication required). CVE-2025-4427 eliminates this requirement entirely — every real-world exploitation chains both. The effective attack is unauthenticated, remote, low-complexity RCE. The vendor's isolated scoring is a fiction that no attacker respects.
  • Internet-facing by design. EPMM is a Mobile Device Management appliance that *must* be internet-accessible to manage enrolled devices. Unlike internal-only servers where 'requires network access' is a friction point, exposure is the default deployment posture. Censys confirmed 174 exposed instances; the real number including non-indexed deployments is substantially higher.
  • Nation-state 0-day exploitation with custom tooling. UNC5221 was exploiting this chain before Ivanti disclosed it. They deployed purpose-built malware (KrustyLoader, custom Tomcat implants) and exfiltrated LDAP credentials, O365 tokens, and device metadata from compromised organizations across healthcare, government, telecom, and defense. This is not theoretical risk.
  • Trivial weaponization. Multiple public PoCs dropped within 48 hours of disclosure. A Metasploit module automates the entire chain from unauthenticated scanning to shell. EPSS 0.865 places this in the top ~1% of all CVEs. The exploit is a single GET request with a URL-encoded EL expression.
  • Role multiplier: MDM appliance is a high-value identity and fleet-management tier component. EPMM holds LDAP service account credentials, Office 365 OAuth tokens, device enrollment certificates, and has push-configuration authority over the entire managed mobile fleet. Compromise yields (a) identity-tier access via harvested LDAP/O365 credentials enabling domain compromise, (b) fleet-scale impact via ability to push malicious profiles/configs to all managed devices, and (c) data exfiltration of PII (IMEI, phone numbers, SIM data). The blast radius is identity-scale + fleet-scale. Since EPMM *is* the MDM tier — 100% of EPMM installations occupy this high-value role by definition — the verdict floor is CRITICAL per the deployment-role blast radius rule.
  • CISA KEV + CISA MAR = maximum institutional signal. KEV listing mandates federal agency patching. The September 2025 MAR (AR25-261A) documents the malware in forensic detail, confirming this is not a theoretical chain but a documented, repeatable compromise playbook used against production enterprises.

Why not higher?

A 9.8 is effectively the ceiling for a network-exploitable, unauthenticated RCE with no user interaction. The only reason this isn't 10.0 is that the Scope is Unchanged (the compromised component is the EPMM appliance itself, not a different security domain in the strict CVSS sense), though the practical blast radius into AD and mobile fleet far exceeds what 'Unchanged' implies.

Why not lower?

Any argument for HIGH or below must overcome the following: the chain is unauthenticated, the appliance is internet-facing by design, a nation-state APT exploited it as a 0-day, CISA listed it in KEV and published a MAR, multiple public PoCs and a Metasploit module exist, EPSS is 0.865, and 100% of EPMM installations are inherently high-value MDM tier components whose compromise yields identity and fleet-scale blast radius. There is no friction point in this chain that narrows the population or raises the bar — the exploit is a single GET request. Downgrading below CRITICAL would require evidence that the attack chain does not work as documented, which contradicts CISA's own forensic findings.

05 · Compensating Control

What to do — in priority order.

  1. Patch immediately to fixed versions — Deploy EPMM 12.5.0.1, 12.4.0.2, 12.3.0.2, or 11.12.0.5 within hours, not days. This is a KEV-listed, actively-exploited vulnerability — the noisgate mitigation SLA for CRITICAL is ≤3 days, but active exploitation overrides this to patch/mitigate immediately. Coordinate an emergency change window.
  2. Block exploit payload at WAF/reverse proxy — If immediate patching is impossible, deploy a WAF rule blocking requests to /mifs/rs/api/v2/featureusage containing EL injection patterns (${, T(java.lang.Runtime), getClass().forName) in the format query parameter. This is a stopgap — the auth bypass may affect other endpoints not yet publicly documented.
  3. Restrict network access to EPMM admin API — Place the /mifs/rs/api/v2/ path behind IP allowlisting or VPN-gated access. Mobile device enrollment endpoints (/mifs/) may need to remain open, but the admin REST API should not be reachable from arbitrary internet sources. Implement this within hours as a compensating control.
  4. Hunt for IOCs from CISA MAR AR25-261A — Search EPMM appliances for indicators: web-install.jar in /tmp, SecurityHandlerWanListener.class, WebAndroidAppInstaller.class, ReflectUtil.class in Tomcat directories, unexpected files in /mi/tomcat/webapps/mifs/images/ (especially .jpg files containing command output), and outbound connections to documented C2 IPs (103.244.88.125, 27.25.148.183, 146.70.87.67, 124.223.202.90) and S3 buckets (openrbf.s3.amazonaws.com, etc.).
  5. Rotate all credentials stored in EPMM — Assume compromise of LDAP service account credentials, O365 OAuth tokens, MySQL database credentials, and device enrollment certificates. Rotate these immediately. Revoke and reissue O365 refresh tokens for all users whose tokens were managed by EPMM. Review LDAP bind logs for anomalous activity from EPMM's IP.
  6. Isolate EPMM from internal network pending forensic review — If you cannot confirm the appliance is uncompromised, segment it from internal AD/LDAP connectivity and initiate forensic collection per Profero's guide. Attackers harvest /mi/files/system/.mifpp for database credentials and dump Tomcat heap for additional secrets.
What doesn't work
  • MFA on the EPMM admin portal does not help — the exploit bypasses authentication entirely at the API layer via CVE-2025-4427. MFA protects the web UI login flow, not the REST API path the attacker uses.
  • EDR on managed mobile devices does not prevent EPMM server compromise — the vulnerability is on the server side, not the client. Device-side agents cannot block an attack against the MDM server.
  • TLS inspection / certificate pinning on mobile clients does not help — the attacker is hitting the server's API directly, not intercepting mobile-device-to-server traffic.
  • Disabling the featureusage API endpoint alone may be insufficient — the auth bypass in CVE-2025-4427 is architectural (Spring MVC argument resolution ordering) and may affect other validator-equipped endpoints not yet publicly disclosed. Patching is the only reliable fix.
06 · Verification

Crowdsourced verification payload.

Run this script on the EPMM appliance itself (or any host with HTTPS connectivity to the target). No authentication is required — the script exploits the same unauthenticated path the attacker uses, but with a safe arithmetic EL expression instead of code execution. Invoke as: sudo bash check_cve_2025_4428.sh https://epmm.example.com. Requires curl and bash.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/bin/bash
# check_cve_2025_4428.sh — Safe detection for CVE-2025-4427 + CVE-2025-4428 chain
# Tests EL injection via arithmetic expression (no code execution)
# Exit codes: 1=VULNERABLE, 0=PATCHED, 2=UNKNOWN

set -euo pipefail

if [ $# -lt 1 ]; then
  echo "Usage: $0 <EPMM_BASE_URL>"
  echo "Example: $0 https://epmm.example.com"
  exit 2
fi

BASE_URL="${1%/}"
ENDPOINT="/mifs/rs/api/v2/featureusage"
# Safe EL expression: 7*7=49 — no side effects
PAYLOAD='${7*7}'
ENCODED_PAYLOAD=$(python3 -c "import urllib.parse; print(urllib.parse.quote('\${7*7}'))" 2>/dev/null || echo '%24%7B7*7%7D')

URL="${BASE_URL}${ENDPOINT}?format=${ENCODED_PAYLOAD}"

echo "[*] Testing CVE-2025-4427 + CVE-2025-4428 chain"
echo "[*] Target: ${BASE_URL}"
echo "[*] Sending safe EL expression: \${7*7}"
echo ""

RESPONSE=$(curl -sk -o - -w "\n%{http_code}" "$URL" --max-time 15 2>/dev/null)
HTTP_CODE=$(echo "$RESPONSE" | tail -1)
BODY=$(echo "$RESPONSE" | sed '$d')

if [ -z "$HTTP_CODE" ] || [ "$HTTP_CODE" = "000" ]; then
  echo "UNKNOWN — Could not connect to ${BASE_URL}"
  exit 2
fi

echo "[*] HTTP status: ${HTTP_CODE}"

# Vulnerable: server evaluates 7*7=49 and returns it in the error message
if echo "$BODY" | grep -q '49'; then
  echo ""
  echo "VULNERABLE — EL expression evaluated (found '49' in response)"
  echo "The server evaluated \${7*7} = 49, confirming CVE-2025-4428."
  echo "Unauthenticated access confirms CVE-2025-4427 bypass is also present."
  exit 1
fi

# Patched: server returns error but does NOT evaluate the expression
if [ "$HTTP_CODE" = "400" ] || [ "$HTTP_CODE" = "401" ] || [ "$HTTP_CODE" = "403" ]; then
  if ! echo "$BODY" | grep -q '49'; then
    echo ""
    echo "PATCHED — Server rejected the request without evaluating the EL expression"
    exit 0
  fi
fi

# 401/403 without expression evaluation likely means auth bypass is patched
if [ "$HTTP_CODE" = "401" ] || [ "$HTTP_CODE" = "403" ]; then
  echo ""
  echo "PATCHED — Authentication required (CVE-2025-4427 bypass not present)"
  exit 0
fi

echo ""
echo "UNKNOWN — Unexpected response (HTTP ${HTTP_CODE}). Manual review required."
echo "Response body (first 500 chars):"
echo "$BODY" | head -c 500
exit 2
07 · Sources

Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.