CVE-2026-10520 — Ivanti Sentry (MobileIron Sentry) Pre-Auth OS Command Injection

Unauthenticated OS command injection (CWE-78) in the Sentry web app's ConfigServiceController: an unauthenticated POST to /mics/api/v2/sentry/mics-config/handleMessage reaches handleExecute() and runs attacker-supplied OS commands as root. CVSS 10.0 · CISA KEV (~2026-06-12, 3-day remediation deadline 2026-06-14) · mass-exploited within 24h of patch with a public PoC; Shadowserver observed most internet-exposed gateways backdoored. Fixed in 10.5.2 / 10.6.2 / 10.7.1 (patched 2026-06-10). Companion flaw CVE-2026-10523 disclosed alongside. Defensive hunt & harden pack — no exploit code.
Threat
CVE-2026-10520 · Ivanti Sentry pre-auth RCE
Severity
KEV · EXPLOITED ITW · CVSS 10.0
Type
Edge-appliance pre-auth OS cmd injection → root RCE
Patch
Sentry 10.5.2 / 10.6.2 / 10.7.1 (2026-06-10)
Companion
CVE-2026-10523 (Sentry)
Version
v0.1 · 2026-06-16
Author
HuntPack
01

Executive Summary

CVE-2026-10520 is an unauthenticated OS command injection flaw (CWE-78, CVSS 10.0) in Ivanti Sentry (formerly MobileIron Sentry), the enterprise mobile gateway that fronts MDM/email traffic. The vulnerable path is an unauthenticated HTTP POST to /mics/api/v2/sentry/mics-config/handleMessage, handled by the ConfigServiceController class. A user-supplied message parameter is parsed into command / module / XPath / value components; when command=execute, the input flows into handleExecute() which invokes native OS commands with no input sanitization, yielding arbitrary command execution as root with zero credentials.

Ivanti patched on 2026-06-10 (fixed in 10.5.2 / 10.6.2 / 10.7.1); a full technical write-up and working PoC went public the next day, and mass exploitation began within 24 hours. Shadowserver scans found internet-exposed Sentry gateways already backdoored shortly after the update. CISA added it to KEV (~2026-06-12) with a compressed 3-day remediation deadline (2026-06-14). A companion flaw, CVE-2026-10523, was disclosed alongside it.

Edge-device priority: Patch to 10.5.2 / 10.6.2 / 10.7.1 immediately and assume breach on any gateway that was internet-exposed before patching — exploitation outran patching. The Sentry appliance is typically not a Falcon-sensored host, so detection splits two ways: (1) hunt the Sentry web/access logs if forwarded into LogScale / NG-SIEM (Q1–Q2 — POSTs to the handleMessage URI carrying execute), and (2) hunt reachable internal hosts/identities for what the attacker did from a compromised gateway (Q3–Q7 — root-spawned shells, recon, second-stage download, reverse shells, webshell drops, lateral movement). Highest-fidelity sensor signal: Q3 — the Sentry/Java/Tomcat service process spawning a shell or recon binary as root.
02

Source Review & Web Hunter Notes

TierSourceKey FindingCarry
1 · Vendor researchwatchTowr LabsRoot-cause: handleMessagehandleExecute() in ConfigServiceController; message parsed to command/module/XPath/value; command=execute runs native OS commands unsanitizedyes
1 · Vendor researchHorizon3.ai — CVE-2026-10520 attack researchPre-auth POST to /mics/api/v2/sentry/mics-config/handleMessage; patch replaces user-controlled input with hardcoded commandsyes
1 · Vendor researchRapid7 — ETR CVE-2026-10520 / CVE-2026-10523Two critical Sentry flaws; affected < 10.5.2 / 10.6.2 / 10.7.1; exploited in the wildyes
1 · News of recordBleepingComputer / SecurityAffairsMass exploitation within 24h of patch; PoC public; gateways compromised shortly after patch releaseyes
1 · TelemetryShadowserverInternet-exposed Sentry gateways already backdoored post-patch (e.g. 2 of 19 vulnerable instances confirmed backdoored)yes
2 · Vendor researchSOCRadar / CyberPress / DenizHalilIOC guidance: web-server daemon (Java/Tomcat) spawning /bin/sh, id, whoami, curl/wget; cross-reference web access logs with Linux audit logspartial

Decisions: lead with the patch (10.5.2 / 10.6.2 / 10.7.1) and an assume-breach posture given exploitation outran patching. The appliance is off-sensor, so durable detections are (a) Sentry web/access-log hunts for the exploit URI where those logs are ingested, and (b) endpoint hunts for post-exploitation on reachable hosts. No widely-published file-hash/domain IOCs exist yet — the signal is the exploit POST pattern and root process lineage, so this pack keys on behavior, version/config state, and the exploitation-window log review rather than perishable atomic IOCs.

03

Hunt Brief & Attack Chain

Working hypothesis: An external attacker sends an unauthenticated POST to the Sentry handleMessage endpoint with command=execute, gaining root command execution on the gateway. From there they run recon (id, whoami, uname), pull a second stage (curl/wget), drop a webshell or reverse shell for persistence/C2, harvest credentials/config from the gateway, and pivot to internal hosts and identities reachable from the appliance segment.

StepBehaviorTelemetryHunt Angle
1 · Exploit edge applianceUnauth POST to /mics/api/v2/sentry/mics-config/handleMessage with command=execute (CVE-2026-10520)Sentry web / access logsQ1, Q2; Native N2
2 · Root code executionSentry/Java/Tomcat service spawns /bin/sh, sh -c as rootProcessRollup2 (Linux sensor)Q3
3 · Reconid, whoami, uname, hostname, cat /etc/passwd as the appliance service userProcessRollup2Q4
4 · Second-stage pull / C2curl/wget retrieving a payload; outbound to attacker infra from the appliance segmentProcessRollup2, NetworkConnectIP4, DnsRequestQ5
5 · Webshell / reverse shellWebshell written under the web root, or shell with stdio redirected to a socket (reverse shell)FileCreateInfo, ProcessRollup2Q6
6 · Lateral movementFrom the appliance subnet, remote auth / SSH / SMB into internal hosts; credential reuseUserLogon, NetworkConnectIP4Q7; §11

Affected surface & telemetry

SurfaceRequired TelemetryPriorityGap Risk
Ivanti Sentry gateways < 10.5.2 / 10.6.2 / 10.7.1Sentry web/access logs + version inventory ingested into LogScale/NG-SIEMCriticalHigh — appliance off-sensor; depends on log forwarding
Appliance OS (if Linux sensor deployable)Process lineage on the Sentry/Tomcat service (ProcessRollup2)HighHigh — sensor rarely installed on the appliance
Appliance network segmentEgress / DNS from the gateway subnet (NetworkConnectIP4, DnsRequest)HighMedium — depends on segment visibility
Internal endpoints / identities (post-access)Logon + process lineage (UserLogon, ProcessRollup2)HighLow — standard Falcon sensor
04

Consolidated IOC Table

The patch (10.5.2 / 10.6.2 / 10.7.1) is the definitive control; the strongest detections are behavioral + the exploit URI pattern. No broadly-published atomic IOCs (hashes/domains) exist yet — pull live attacker infra from current advisories. Copy-ready blocks in §9.
TypeValueConfActionContext
URIPOST /mics/api/v2/sentry/mics-config/handleMessagehighdetectThe exploit endpoint — unauth path to RCE
Payloadmessage body containing command=executehighdetectTriggers handleExecute() OS command run
BehaviorSentry/Java/Tomcat service spawns /bin/sh or sh -c as roothighdetectCore post-exploitation signature
BehaviorRecon binaries (id, whoami, uname) under the appliance service usermediumhuntHands-on-keyboard recon after RCE
Behaviorcurl/wget second-stage pull from the appliance / its subnethighdetectSecond-stage download / C2 setup
ConfigSentry version < 10.5.2 / 10.6.2 / 10.7.1, internet-exposedhighdetectThe vulnerable state — patch closes it
WindowWeb-log review 2026-06-10 → presenthighhuntMass exploitation began within 24h of patch
05

ATT&CK Mapping

TacticTechniqueObserved BehaviorQuery / Control
Initial AccessT1190 — Exploit Public-Facing ApplicationUnauth POST to the Sentry handleMessage endpointQ1, Q2; S10 patch
ExecutionT1059 — Command & Scripting InterpreterhandleExecute() runs OS commands as root; service spawns shellsQ3, Q4
Command & ControlT1071 / T1105 — App-Layer Protocol / Ingress Tool Transfercurl/wget second-stage pull; outbound from appliance segmentQ5
PersistenceT1505.003 — Server Software Component: Web ShellWebshell dropped under the web root; reverse shell for re-entryQ6
Lateral MovementT1021 — Remote ServicesFrom the appliance subnet into internal hosts via SSH/SMB/RDPQ7
Valid AccountsT1078 — Valid AccountsCredentials/config harvested from the gateway reused internallyQ7; §11
06

Native Audit-Log Hunts

HuntSourceLogicResponse
N1 · Version / patch inventoryIvanti Sentry admin / asset inventorySentry gateways running < 10.5.2 / 10.6.2 / 10.7.1, especially internet-exposed (the vulnerable state)Patch to fixed build; meet KEV deadline 2026-06-14
N2 · Exploit-URI web-log reviewSentry web / access logsAny POST to /mics/api/v2/sentry/mics-config/handleMessage from 2026-06-10 → present; flag bodies with command=executePivot any hit to host hunts Q3-Q7; assume-breach
N3 · Appliance OS audit-log reviewSentry OS /var/log/audit/, /var/log/messagesShell/recon/download exec under the web-service user; correlate by timestamp with N2 POSTsPer vendor IOC guidance; preserve forensic image
N4 · Egress review from appliance segmentFirewall / proxy / NetFlowNew outbound connections from the Sentry subnet to untrusted infra during the exploitation windowCorrelate with Q5; block + scope
07

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1–Q2 run against ingested Sentry web/access logs — field/parser names vary by integration (HEC, syslog, custom parser), so treat those field names as ⚠ validate in your tenant. Q3–Q7 are Falcon-sensor endpoint hunts (fields validated against the Falcon event reference) covering the post-exploitation kill-chain on the appliance (if sensored) and on reachable internal hosts.
Q1 · Exploit POST to the Sentry handleMessage endpoint
CONF HIGHFP MEDCOST LOW

Looks for: HTTP POSTs to the vulnerable Sentry config URI. Accomplishes: surfaces every exploitation attempt and the source IPs hitting the gateway. ⚠ field names parser-dependent

// HUNT: POST to Ivanti Sentry handleMessage exploit endpoint (CVE-2026-10520)
// MITRE: T1190 | CONF: high  FP: medium  COST: low
// REQUIRES: Ivanti Sentry web/access logs ingested into LogScale/NG-SIEM
// FALSE POSITIVES: legitimate internal config tooling hitting the same path (rare, post-patch)
// TUNING: allow-list known management source IPs; focus on external/untrusted src since 2026-06-10
url=/\/mics\/api\/v2\/sentry\/mics-config\/handleMessage/i
| method=/POST/i
| table([@timestamp, src, method, url, status, http_user_agent, dst], limit=200)
| sort(@timestamp, order=desc)
Q2 · handleMessage POST carrying command=execute
CONF HIGHFP LOWCOST LOW

Looks for: the exploit URI and an execute command in the request body/query — the actual RCE trigger, not just reconnaissance of the path. Accomplishes: highest-fidelity log signal for active exploitation. ⚠ body capture parser-dependent

// HUNT: Sentry handleMessage POST with command=execute (active RCE trigger)
// MITRE: T1190, T1059 | CONF: high  FP: low  COST: low
// REQUIRES: Sentry web logs WITH request body / query capture
// FALSE POSITIVES: very rare — the patch replaces user input with hardcoded commands
url=/\/mics\/api\/v2\/sentry\/mics-config\/handleMessage/i
| method=/POST/i
| request_body=/command\s*=\s*execute|"command"\s*:\s*"execute"/i
| table([@timestamp, src, url, request_body, status, http_user_agent], limit=200)
| sort(@timestamp, order=desc)
Q3 · Sentry / Java / Tomcat service spawning a shell (root RCE)
CONF HIGHFP LOWCOST LOW

Looks for: the web-service process (Java/Tomcat/Sentry daemon) spawning a shell — the definitive post-exploitation fingerprint per vendor IOC guidance. Accomplishes: highest-fidelity sensor signal. Requires a Linux sensor on the appliance, or apply the same lineage logic to any reachable web host.

// HUNT: Web/Java/Tomcat service spawning a shell (Sentry RCE post-exploitation)
// MITRE: T1190, T1059 | CONF: high  FP: low  COST: low
// REQUIRES: ProcessRollup2 from a Linux sensor on the appliance or reachable web host
// FALSE POSITIVES: rare — web service legitimately shelling out is unusual; allow-list known scripts
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(java|catalina\.sh|tomcat|httpd|nginx|mi|sentry)/i
| FileName=/^(sh|bash|dash|ksh|zsh)$/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
| sort(@timestamp, order=desc)
Q4 · Post-exploitation recon binaries under the web-service user
CONF MEDFP MEDCOST LOW

Looks for: classic hands-on-keyboard recon (id, whoami, uname, hostname, reading /etc/passwd) whose parent is the web/Java service. FP: admin scripts / monitoring — scope by parent and allow-list. ⚠ baseline the appliance first

// HUNT: Recon commands spawned by the web/Java service after Sentry RCE
// MITRE: T1059, T1190 | CONF: medium  FP: medium  COST: low
// REQUIRES: ProcessRollup2 with parent-process context (Linux sensor)
// FALSE POSITIVES: legitimate startup/health scripts run by the service account
// TUNING: restrict ParentBaseFileName to the Sentry/Tomcat service; allow-list known health checks
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(java|catalina\.sh|tomcat|httpd|nginx|sh|bash)/i
| FileName=/^(id|whoami|uname|hostname|ifconfig|ip|cat)$/i
| CommandLine=/whoami|\bid\b|uname|\/etc\/passwd|\/etc\/shadow|ifconfig|ip\s+a/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
| sort(@timestamp, order=desc)
Q5 · Second-stage download (curl/wget) from the appliance segment
CONF HIGHFP MEDCOST LOW

Looks for: curl/wget (or equivalents) pulling a payload, especially spawned by the web service or piping a remote script into a shell. FP: package updates / monitoring agents — allow-list known update sources.

// HUNT: curl/wget second-stage pull after Sentry RCE (ingress tool transfer / C2)
// MITRE: T1105, T1071 | CONF: high  FP: medium  COST: low
// REQUIRES: ProcessRollup2 command-line telemetry (Linux sensor)
// FALSE POSITIVES: legitimate package/update fetches; monitoring agents
// TUNING: allow-list approved repo/update hosts; flag pulls piped to sh and parent=web service
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName=/^(curl|wget|fetch|tftp|python|python3|perl)$/i
| CommandLine=/https?:\/\/|ftp:\/\/|\|\s*(sh|bash)|-O\s|-o\s|--output/i
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
| sort(@timestamp, order=desc)
Q6 · Webshell drop / reverse shell from the web service
CONF MEDFP MEDCOST LOW

Looks for: a script/JSP/executable written under a web root by the web service (webshell), or a shell launched with stdio redirected to a network socket (reverse shell one-liner). FP: legitimate deploys — scope to runtime, not deploy windows.

// HUNT: Webshell file drop under web root OR reverse-shell one-liner (Sentry persistence/C2)
// MITRE: T1505.003, T1059 | CONF: medium  FP: medium  COST: low
// REQUIRES: FileCreateInfo + ProcessRollup2 (Linux sensor)
// FALSE POSITIVES: legitimate application deployments writing to the web root
// TUNING: scope file writes to runtime (not deploy) windows; allow-list CI/CD service accounts
(#event_simpleName=/NewExecutableWritten|NewExecutableRenamed/
   | TargetFileName=/\/(webapps|www|html|htdocs|mics)\/.*\.(jsp|jspx|php|war|sh|py|pl)$/i)
OR (#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
   | CommandLine=/(bash|sh)\s+-i|\/dev\/tcp\/|mkfifo|nc\s+-e|socat|exec\s+\d+<>/i)
| table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, TargetFileName, CommandLine], limit=200)
| sort(@timestamp, order=desc)
Q7 · Lateral movement from the appliance segment
CONF MEDFP MEDCOST MED

Looks for: a single source in the Sentry appliance subnet authenticating to many distinct internal hosts in a short window — credential reuse / lateral movement from the compromised gateway. FP: admin jump hosts / scanners — allow-list. Replace the CIDR with your Sentry/appliance subnet.

// HUNT: One appliance-segment source authenticating to many internal hosts (lateral movement)
// MITRE: T1021, T1078 | CONF: medium  FP: medium  COST: medium
// REQUIRES: UserLogon with RemoteAddressIP4 populated; known appliance subnet CIDR
// FALSE POSITIVES: legitimate admin jump hosts / vuln scanners in that subnet
// TUNING: set RemoteAddressIP4 to YOUR Sentry/appliance subnet; allow-list sanctioned admin sources
#event_simpleName=/UserLogon|UserLogonFailed/
| RemoteAddressIP4=/^10\.50\./
| groupBy([RemoteAddressIP4, UserName], function=([
    count(ComputerName, distinct=true, as=hostsTouched),
    collect([ComputerName])
  ]))
| hostsTouched >= 5
| sort(hostsTouched, order=desc)
08

CrowdStrike Custom IOA Recommendations

IOA NameField PatternsBenign ExclusionsDeployment Path
Sentry RCE — web service spawns shellParent java/catalina.sh/tomcat/httpd/nginx; child sh/bash/dash (Q3 logic)Sanctioned health/startup scripts run by the service account (excluded)Endpoint Security → Custom IOA → Process Creation (Linux) — Detect+Block
Sentry RCE — reverse shell patternCmdLine bash -i / /dev/tcp/ / nc -e / mkfifo + socket redirect (Q6 logic)None typical on an appliance (excluded: documented admin tooling)Custom IOA → Process Creation (Detect+Block); pair with network containment
Q3 and the reverse-shell half of Q6 are the strongest promotions (a production web service spawning an interactive shell has almost no benign baseline). Q1–Q2 stay hunt/investigate-only — they run on third-party Sentry web logs, not the sensor, so they belong in NG-SIEM scheduled searches, not Custom IOAs. Q4, Q5, Q7 stay hunt/investigate due to FP risk; correlate before alerting.
09

Machine-Readable IOC Appendix

Grouped IOC Quick-Copy

One-click blocks for log review, patch audit, and behavioral detection. The fix (patch to 10.5.2 / 10.6.2 / 10.7.1) is the control; the exploit URI pattern + root process lineage are the durable detections. No broadly-published atomic IOCs yet — pull live attacker infra from current advisories.

Exploit / URI Signaturesdetection logic
POST /mics/api/v2/sentry/mics-config/handleMessage   # the exploit endpoint
request body containing  command=execute             # triggers handleExecute() OS command run
ConfigServiceController.handleExecute                 # vulnerable code path (no input sanitization)
Web/Java/Tomcat service spawning /bin/sh or sh -c as root
Recon after RCE: id / whoami / uname / hostname / cat /etc/passwd
curl|wget second-stage pull (often piped to sh) from the appliance segment
Webshell .jsp/.php/.sh under the web root  OR  reverse shell (bash -i, /dev/tcp/, nc -e, mkfifo)
Version / Patch Auditthe fix
# Ivanti Sentry — confirm patched and not exposed (CVE-2026-10520)
# Fixed builds: 10.5.2  /  10.6.2  /  10.7.1   (released 2026-06-10)
# 1) Inventory all Sentry gateways and their versions
# 2) Patch anything below the fixed build for its branch
# 3) Restrict /mics admin/config paths from the public internet (WAF / ACL)
# 4) ASSUME BREACH on any gateway internet-exposed before patching
# Companion: CVE-2026-10523 (also Sentry) — patch in the same maintenance window
# KEV: CVE-2026-10520 — 3-day remediation deadline 2026-06-14
Log-Review Windowvendor guidance
# Sentry web/access + OS audit-log review
# Search the handleMessage URI:  from 2026-06-10 through present
# Cross-reference web access logs with Linux audit logs:
#   /var/log/audit/   and   /var/log/messages
# Flag: POSTs with command=execute, web-service user spawning shells/recon/curl/wget.
# Pivot any hit to endpoint hunts Q3-Q7 and to lateral movement from the appliance subnet.
Related ReferencesCVE / advisory
CVE-2026-10520   # Ivanti Sentry pre-auth OS command injection (this pack) — CVSS 10.0
CVE-2026-10523   # companion Sentry flaw disclosed alongside
10.5.2 / 10.6.2 / 10.7.1   # fixed builds (patched 2026-06-10)
CISA KEV          # added ~2026-06-12; 3-day remediation deadline 2026-06-14
Shadowserver      # internet-exposed gateways observed already backdoored
# Defense-in-depth: keep Sentry admin/config paths off the public internet
10

Hardening — Tiered & Deployable

This one is patchable — upgrading to 10.5.2 / 10.6.2 / 10.7.1 is the fix. The rest reduces exposure of the management surface and contains a compromised gateway. Because exploitation outran patching, treat exposed pre-patch gateways as already breached.

Immediate — Close the RCE (the fix)
  • Patch Ivanti Sentry to 10.5.2 / 10.6.2 / 10.7.1 on every gateway — M1051. Closes CVE-2026-10520 (and patch CVE-2026-10523 in the same window). CISA KEV — meet the 2026-06-14 deadline.
  • Remove the Sentry management/config interface from the public internetM1035 / M1030. Restrict /mics admin paths via WAF/ACL to trusted management networks only.
  • Assume-breach triage on any pre-patch internet-exposed gatewayM1047. Run N2/N3 log review and Q3–Q7 before declaring the appliance clean.
  • Add a WAF/IPS rule for POSTs to the handleMessage URI carrying executeM1050. Virtual-patch defense while patching completes.
Near term — Contain a compromised gateway (pilot first)
  • Segment the appliance into a tightly-firewalled DMZ; least-privilege egressM1030 / M1037. Caps second-stage download (Q5) and lateral movement (Q7) from the gateway.
  • Rotate all credentials/certs/secrets stored on or reachable from SentryM1027. Defeats credential reuse (T1078) after a root compromise.
  • Forward Sentry web + OS audit logs into LogScale/NG-SIEMM1047. Makes Q1–Q2 and N2/N3 actually runnable.
  • Deploy a Linux Falcon sensor on the appliance where supportedM1047. Enables Q3–Q6 process-lineage detection on the gateway itself.
Strategic — Reduce the edge-appliance blast radius
  • Front MDM/email gateways with identity-aware / ZTNA accessM1035. Removes broad pre-auth reachability of the management plane.
  • Continuous edge-appliance version & config drift monitoringM1016. Alert when a gateway falls behind on patches or re-exposes admin paths.
  • Establish a rapid edge-device patch SLA (KEV-driven)M1051. Close the window between disclosure and patch that this CVE exploited.
11

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain the Sentry gateway (block egress + lateral); take it out of the public-facing path; network-contain any internal host reached from the appliance subnetNetwork + SOC L2Q1/Q2/N4 rows; containment log
TriagePull web/OS audit logs (N2/N3); identify root-spawned shells, recon, curl/wget (Q3-Q5); locate webshells / reverse shells (Q6); map lateral movement (Q7)SOC L2Process trees; Q3-Q7 rows; log graph
EradicateRebuild the gateway from a known-good image and patch to the fixed build — do not trust in-place cleanup of a root compromise; remove planted webshells/tooling; reset/revoke all credentials and certs stored on or reachable from SentryIR + ITRebuild record; credential/cert revocation log
RecoverRestore service on the patched, hardened gateway behind a WAF/ACL; rotate any privileged credentials reused over the appliance; confirm fixed build (10.5.2/10.6.2/10.7.1) before re-exposingIR + ITVersion readout; config readout
HardenRemove admin paths from the internet; segment the DMZ; forward logs + deploy sensor; promote Q3 / Q6 reverse-shell IOAs; enable config-drift monitoring (§10)Detection EngPolicy state; IOA enabled
12

Detection Coverage Map & Validation

TechniqueBehaviorCQLIOACoverage
Vulnerable Sentry version / exposureGood patch + N1 audit
T1190Exploit POST to handleMessageQ1, Q2Partial needs Sentry logs ingested
T1059Root web-service shell / reconQ3, Q4IOA-1Partial needs appliance sensor
T1105 / T1071Second-stage pull / C2Q5Partial FP risk; allow-list updates
T1505.003Webshell / reverse shellQ6IOA-2Partial scope to runtime
T1021 / T1078Lateral movement from gatewayQ7Partial set appliance subnet CIDR

Validation gates: (1) confirm Sentry web logs are ingested and the parser field names in Q1–Q2 resolve in your tenant (esp. request-body capture for Q2); (2) confirm a Linux sensor (or equivalent process telemetry) exists on the appliance or reachable web host before relying on Q3–Q6; (3) baseline the appliance so Q4 recon and Q5 download allow-lists are accurate; (4) set the Q7 RemoteAddressIP4 regex to your real Sentry/appliance subnet CIDR; (5) audit every gateway for fixed build + non-public admin paths (N1) and confirm the patch; (6) promote Q3 and the Q6 reverse-shell pattern to Custom IOA Detect+Block (target FP < 1/week).

13

Hunt Summary Ticket

TITLE:        Hunt — CVE-2026-10520 (Ivanti Sentry Pre-Auth OS Command Injection)
SEVERITY:     Critical (CISA KEV, mass-exploited ITW, CVSS 10.0; pre-auth root RCE)
SCOPE:        Ivanti Sentry gateways < 10.5.2/10.6.2/10.7.1 + internal hosts/identities
              reachable from the appliance segment
HYPOTHESIS:   Attacker POSTs to /mics/api/v2/sentry/mics-config/handleMessage with
              command=execute, gains root RCE, runs recon, pulls a second stage, drops a
              webshell/reverse shell, then pivots to internal hosts and reuses credentials.
QUERIES RUN:  Q1 exploit POST | Q2 POST w/ command=execute | Q3 web-service spawns shell |
              Q4 recon binaries | Q5 curl/wget second-stage | Q6 webshell/reverse shell |
              Q7 lateral movement from appliance subnet
              + Native N1-N4 (version audit, exploit-URI log review, OS audit-log review, egress review)
DO FIRST:     Patch to 10.5.2/10.6.2/10.7.1; remove /mics admin from internet; then Q2, Q3 -> escalate hits
FINDINGS:     <pending analyst execution>
GAPS:         Q1-Q2 depend on Sentry web logs (incl. body capture) being ingested; Q3-Q6 need
              process telemetry on the appliance/reachable host; parser field names vary
ACTIONS:      Patch + de-expose gateways; assume-breach triage on pre-patch exposed appliances;
              rotate gateway-stored creds/certs; promote Q3 / Q6 reverse-shell to Custom IOA
OWNER:        HuntPack
VERSION:      v0.1 - 2026-06-16
14

Changelog

v0.32026-07-24CQL correctness pass. All table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.
v0.22026-06-29CQL syntax review (crowdstrike-logscale-v3): replaced invalid FileCreateInfo with valid file-write events (Q6).
v0.12026-06-16Initial pack — built to the review-v2 gold layout (fixed left-sidebar scrollspy TOC, collapsible, Falcon cloud selector inside the CQL section, per-card Copy/Open-in-Falcon, Grouped IOC Quick-Copy grid, coverage+validation gates, .ticket). Covers CVE-2026-10520 Ivanti Sentry pre-auth OS command injection (CVSS 10.0, KEV, mass-exploited): 7 CQL hunts (2 web-log + 5 endpoint), 4 native hunts, 2 IOA candidates. Keyed on the handleMessage exploit URI + command=execute + root web-service process lineage + the 2026-06-10 exploitation-window log review (no broadly-published atomic IOCs). Post-exploitation kill-chain (recon, second-stage, webshell/reverse shell, lateral movement) covered on the endpoint side.
15

References

TierSourceUsed For
1watchTowr Labs — Ivanti Sentry pre-auth OS command injectionRoot cause: handleMessage → handleExecute, message parsing, command=execute
1Horizon3.ai — CVE-2026-10520 attack researchExploit endpoint, ConfigServiceController, patch behavior
1Rapid7 — ETR CVE-2026-10520 / CVE-2026-10523Affected versions, companion flaw, exploitation confirmation
1BleepingComputer — Max-severity Sentry flaw now exploitedMass exploitation within 24h of patch; public PoC
1SecurityAffairs — Sentry gateways compromised shortly after patchShadowserver backdoored-gateway telemetry; KEV
2SOCRadar — Ivanti Sentry CVE-2026-10520 root RCEIOC guidance: Java/Tomcat spawning shells/recon/curl-wget; audit-log cross-reference
2Help Net Security — Ivanti Sentry CVE-2026-10520 / CVE-2026-10523Disclosure, severity, companion flaw context

HuntPack v0.1 · CVE-2026-10520 (Ivanti Sentry Pre-Auth OS Command Injection) · Generated 2026-06-16 · Defensive use only — no exploit code. The fix (patch to 10.5.2 / 10.6.2 / 10.7.1, remove admin paths from the internet) closes the RCE; the hunts are detection & defense-in-depth for the post-exploitation kill-chain. Q1–Q2 field names depend on your Sentry log parser — validate in your tenant before alerting. Assume-breach on any gateway internet-exposed before patching.