← Back to Feed CACHED · 2026-06-20 10:24:36 · CACHE_KEY CVE-2025-0282
CVE-2025-0282 · CWE-121 · Disclosed 2025-01-08

A stack-based buffer overflow in Ivanti Connect Secure before version 22

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

A pre-authenticated stack smash on the box your remote workforce literally talks to over the public internet

CVE-2025-0282 is a stack-based buffer overflow (CWE-121) in the IF-T/TLS handler of Ivanti Connect Secure (<22.7R2.5), Policy Secure (<22.7R1.2), and Neurons for ZTA gateways (<22.7R2.3). The flaw is reachable pre-authentication over TCP/443 on the public-facing VPN endpoint, and exploitation yields code execution as root in the web services context, from which the attacker pivots to disable integrity checks, deploy the SPAWN/DRYHOOK/PHASEJAM toolkits, and persist across upgrades.

Vendor severity (CRITICAL / 9.0) is honest but if anything understated. The CVSS vector marks Attack Complexity as High because the original exploit needed a heap-grooming step, but Mandiant and watchTowr have since published reliable single-shot chains. Combined with active mass exploitation by UNC5337/UNC5221 since December 2024 and CISA KEV listing on the day of disclosure, real-world severity is a flat 9.8.

"KEV-listed, mass-exploited pre-auth RCE on an internet-facing VPN appliance. Treat every unpatched ICS box as already breached."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Identify exposed Ivanti Connect Secure gateway

Attacker fingerprints the target's external VPN. ICS appliances respond on TCP/443 with a distinctive /dana-na/ login path and version-revealing HTML. Shodan and Censys both maintain dedicated tags for ICS; FOFA query app="IVANTI-Connect-Secure" returns the target list.
Conditions required:
  • Appliance reachable from the internet on 443
  • Version 22.7R2.4 or earlier (ICS), 22.7R1.1 (IPS), 22.7R2.2 (Neurons ZTA)
Where this breaks in practice:
  • Almost none — this is the appliance's job
Detection/coverage: Shodan/Censys/GreyNoise all tag ICS exposure; internal scanners (Nessus 213440, Qualys 732250) flag version pre-auth.
STEP 02

Trigger the IF-T/TLS stack overflow

Attacker sends a crafted IF-T session message whose clientCapabilities length field overflows a fixed-size stack buffer in the web process. Public PoCs from watchTowr Labs and Horizon3 demonstrate single-packet RCE; the original Mandiant-observed exploit (SPAWNANT) uses a multi-stage groom to bypass stack cookies.
Conditions required:
  • Network reach to 443
  • Working ROP gadget set for the target firmware build
Where this breaks in practice:
  • AC:H reflects the cookie/grooming step; not a barrier for nation-state or commodity tooling at this point
Detection/coverage: Ivanti ICT (Integrity Checker Tool) post-compromise; no signature-based pre-auth IDS rule is reliable because the payload is in TLS.
STEP 03

Execute as root and disable the Integrity Checker

Code runs as the web user with effective root via setuid helpers. PHASEJAM patches /home/bin/dsicheck so the ICT returns clean, and SPAWNMOLE/SPAWNSNAIL install a SOCKS tunnel and SSH backdoor.
Conditions required:
  • Successful step 2
  • Knowledge of ICT internals — published
Where this breaks in practice:
  • None — vendor's own integrity check is the bypass target
Detection/coverage: External ICT from Ivanti support portal; offline forensic image; EDR is not present on the appliance.
STEP 04

Harvest credentials and pivot inward

Attacker dumps the configuration (LDAP bind creds, RADIUS shared secrets, SAML signing keys, cached AD passwords) and active VPN session cookies. From here UNC5221 has been observed performing AD recon, dumping NTDS.dit from the DC, and deploying DSLOG/DSREGISTRY droppers on internal Windows hosts.
Conditions required:
  • Step 3
  • Appliance bound to AD/LDAP (the default)
Where this breaks in practice:
  • Almost none — the box is by design a credential concentrator
Detection/coverage: Egress beaconing to known UNC5221 infrastructure (Mandiant IOCs); 4624/4769 spikes from VPN gateway IP.
STEP 05

Persist across patch and factory reset

SPAWNANT writes to the bootloader partition and reinjects after the 22.7R2.5 upgrade. Ivanti's own KB confirms factory reset is required, not a patch-in-place.
Conditions required:
  • Step 3 root shell
Where this breaks in practice:
  • None — persistence survives the documented patch path
Detection/coverage: Compare post-upgrade ICT hash against Ivanti reference manifest; assume compromised until rebuilt.
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationActive since mid-December 2024, attributed to UNC5337 / UNC5221 (suspected PRC nexus) per Mandiant. Commodity actors followed within 72 hours of disclosure.
Public PoCwatchTowr Labs (watchTowr/CVE-2025-0282), Horizon3 Attack Team writeup, and assetnote technical deep-dive. Working single-shot RCE.
EPSS0.99971 — 99.99th percentile. Statistically saturated.
CISA KEVAdded 2025-01-08 (day of disclosure). FCEB due date 2025-01-15.
CVSS vectorAV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H — network, pre-auth, scope change, full triad. AC:H is now obsolete given public reliable exploits.
Affected versionsICS ≤ 22.7R2.4; IPS ≤ 22.7R1.1; Neurons for ZTA gateways ≤ 22.7R2.2. 9.x and 8.x ICS branches also affected per Ivanti advisory.
Fixed versionsICS 22.7R2.5, IPS 22.7R1.2 (delayed to January 2025), Neurons ZTA 22.7R2.3. Patch alone is insufficient — factory reset required if ICT flags compromise.
Exposure dataShodan ~16,500 internet-facing ICS appliances at disclosure; Censys ~15,800. Censys observed >2,000 confirmed-compromised hosts within first week.
Disclosure2025-01-08, coordinated with CISA and Mandiant.
ReporterMandiant incident response (Google Cloud) — discovered via UNC5337 incident.
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to CRITICAL (9.8/10)

This is an unauthenticated remote code execution flaw in an internet-facing VPN concentrator with confirmed mass exploitation and CISA KEV listing on day zero. The single most decisive factor is role multiplier: ICS is a network-edge identity broker — a successful chain ends in AD credential theft and inbound foothold, not a contained appliance compromise.

HIGH exploitation activity and patch effectiveness
HIGH affected version enumeration
MEDIUM completeness of post-compromise IOCs (still being published)

Why this verdict

  • KEV + active mass exploitation: zero friction on intent; nation-state and commodity actors are both burning this bug now.
  • Role multiplier — network edge IdP-adjacent appliance: ICS terminates VPN, binds to AD/LDAP, and stores SAML signing material. By definition >90% of installs occupy a high-value role. Floor is CRITICAL.
  • Pre-auth, network-reachable, no UI: the entire vector is the appliance doing its job — there is no friction to add.
  • Persistence survives patching: SPAWNANT reinjects across the 22.7R2.5 upgrade. Patch alone does not remediate a compromised box.
  • EPSS 0.99971: top-of-distribution — every CVE prioritization model agrees.

Why not higher?

9.8 is the practical ceiling for a remote pre-auth RCE on a perimeter appliance with public exploits and KEV listing. There is no higher bucket than CRITICAL in this schema.

Why not lower?

Any downgrade would require either (a) the chain failing in the canonical deployment role or (b) <1% installed-base exposure. Neither holds: ICS exists to be internet-facing, and exploitation is observed at scale. Friction arguments (AC:H, grooming) are obliterated by public single-shot PoCs.

05 · Compensating Control

What to do — in priority order.

  1. Take the ICS web interface offline from the public internet immediately — If you cannot apply 22.7R2.5 today, geo-restrict or fully firewall TCP/443 at the upstream edge until you can. Per noisgate mitigation SLA for CRITICAL + KEV: within hours, not 3 days.
  2. Run the external Integrity Checker Tool (ICT) from Ivanti's portal and treat any failure as confirmed compromise — The on-box ICT is the documented bypass target. The external/offline ICT (downloaded fresh from Ivanti support) is the only trustworthy verdict. Run it today; if it flags, move to factory-reset path.
  3. Rotate every secret the appliance touches — AD service account passwords, RADIUS shared secrets, SAML signing keys, API tokens, and all active VPN session cookies. Assume credential exfiltration occurred. Within 3 days of patch / rebuild.
  4. Factory reset and rebuild from clean media, then patch to 22.7R2.5 — Ivanti's own guidance: in-place patching does NOT evict SPAWNANT. Wipe, reimage 22.7R2.5, restore configuration from a pre-December backup, rotate as above.
  5. Hunt for UNC5221 IOCs on the internal network — Mandiant published infrastructure, file hashes, and TTPs. Pivot from the appliance IP in egress logs (Dec 2024 onward) and search for DSLOG/DSREGISTRY artifacts on Windows hosts the gateway could reach.
What doesn't work
  • WAF / reverse proxy in front of ICS: the exploit travels inside the IF-T/TLS session, which the appliance itself terminates — there is nothing for a WAF to inspect.
  • IDS signatures on /dana-na/: the vulnerable code path is the IF-T endpoint, not the web login UI; pre-disclosure signatures miss it.
  • 'We're patched to 22.7R2.5' alone: if exploitation occurred before patch, the bootloader-resident implant persists. Patch without ICT + rebuild is not remediation.
  • MFA on the VPN: pre-auth means MFA never enters the picture — the overflow happens before the auth state machine runs.
06 · Verification

Crowdsourced verification payload.

Run this from an auditor workstation with network reach to the ICS management or external interface — example: ./check-ivanti.sh vpn.example.com. No credentials required; it fingerprints the appliance build banner. For authoritative verdict, follow up with Ivanti's offline ICT on the appliance itself (requires root console / support bundle access).

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# noisgate verification: CVE-2025-0282 (Ivanti Connect Secure pre-auth RCE)
# Usage: ./check-ivanti.sh <hostname-or-ip>
# Exits 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -u
TARGET="${1:-}"
if [ -z "$TARGET" ]; then
  echo "UNKNOWN: usage: $0 <host>" >&2
  exit 2
fi

# Pull the login page and extract the build banner
BANNER=$(curl -sk --max-time 10 "https://${TARGET}/dana-na/auth/url_default/welcome.cgi" \
  | grep -oE 'Version[^<]*[0-9]+\.[0-9]+R[0-9]+(\.[0-9]+)?' | head -1)

if [ -z "$BANNER" ]; then
  # Fall back to TLS cert / health endpoint
  BANNER=$(curl -sk --max-time 10 "https://${TARGET}/" -I | grep -i 'server' | head -1)
fi

if [ -z "$BANNER" ]; then
  echo "UNKNOWN: could not fingerprint ${TARGET} — confirm it is an ICS/IPS appliance"
  exit 2
fi

echo "Detected banner: $BANNER"

# Extract version components (e.g. 22.7R2.4 -> 22 7 2 4)
VER=$(echo "$BANNER" | grep -oE '[0-9]+\.[0-9]+R[0-9]+(\.[0-9]+)?' | head -1)
MAJ=$(echo "$VER" | cut -d. -f1)
MIN=$(echo "$VER" | cut -d. -f2 | cut -dR -f1)
RMAJ=$(echo "$VER" | sed -E 's/.*R([0-9]+).*/\1/')
RMIN=$(echo "$VER" | grep -oE 'R[0-9]+\.[0-9]+' | cut -d. -f2)
RMIN=${RMIN:-0}

# Fixed: ICS 22.7R2.5 and later
if [ "$MAJ" -gt 22 ] 2>/dev/null; then
  echo "PATCHED: $VER >= 22.7R2.5"; exit 0
fi
if [ "$MAJ" -eq 22 ] && [ "$MIN" -eq 7 ]; then
  if [ "$RMAJ" -ge 3 ] || { [ "$RMAJ" -eq 2 ] && [ "$RMIN" -ge 5 ]; }; then
    echo "PATCHED: $VER >= 22.7R2.5"; exit 0
  fi
fi

echo "VULNERABLE: $VER is at or below 22.7R2.4 — patch to 22.7R2.5 and run Ivanti external ICT before trusting the box"
exit 1
07 · Bottom Line

If you remember one thing.

TL;DR
Treat every unpatched, internet-exposed Ivanti Connect Secure, Policy Secure, or Neurons-for-ZTA gateway as actively compromised until proven otherwise. Monday morning: (1) firewall TCP/443 to the appliance from untrusted networks within hours — the noisgate mitigation SLA for CRITICAL + KEV overrides the 3-day window and demands immediate action; (2) run Ivanti's external Integrity Checker Tool today and treat any failure as IR-grade incident; (3) plan factory-reset + rebuild to 22.7R2.5 and full secret rotation (AD bind, RADIUS, SAML signing, session cookies) with completion well inside the 90-day noisgate remediation SLA — realistically within 7 days given KEV exposure. In-place patching alone does not evict the SPAWNANT bootkit; only a rebuild does.

Sources

  1. Ivanti Security Advisory ICS / IPS / Neurons ZTA
  2. CISA KEV entry
  3. Mandiant: UNC5337 exploiting CVE-2025-0282
  4. watchTowr Labs technical analysis
  5. NVD CVE-2025-0282
  6. CISA Alert AA25-008A
  7. Censys exposure report
  8. FIRST EPSS lookup
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.