CVE-2026-10520 — Ivanti Sentry (MobileIron Sentry) Pre-Auth OS Command Injection
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.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.
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.Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry |
|---|---|---|---|
| 1 · Vendor research | watchTowr Labs | Root-cause: handleMessage → handleExecute() in ConfigServiceController; message parsed to command/module/XPath/value; command=execute runs native OS commands unsanitized | yes |
| 1 · Vendor research | Horizon3.ai — CVE-2026-10520 attack research | Pre-auth POST to /mics/api/v2/sentry/mics-config/handleMessage; patch replaces user-controlled input with hardcoded commands | yes |
| 1 · Vendor research | Rapid7 — ETR CVE-2026-10520 / CVE-2026-10523 | Two critical Sentry flaws; affected < 10.5.2 / 10.6.2 / 10.7.1; exploited in the wild | yes |
| 1 · News of record | BleepingComputer / SecurityAffairs | Mass exploitation within 24h of patch; PoC public; gateways compromised shortly after patch release | yes |
| 1 · Telemetry | Shadowserver | Internet-exposed Sentry gateways already backdoored post-patch (e.g. 2 of 19 vulnerable instances confirmed backdoored) | yes |
| 2 · Vendor research | SOCRadar / CyberPress / DenizHalil | IOC guidance: web-server daemon (Java/Tomcat) spawning /bin/sh, id, whoami, curl/wget; cross-reference web access logs with Linux audit logs | partial |
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.
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.
| Step | Behavior | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 · Exploit edge appliance | Unauth POST to /mics/api/v2/sentry/mics-config/handleMessage with command=execute (CVE-2026-10520) | Sentry web / access logs | Q1, Q2; Native N2 |
| 2 · Root code execution | Sentry/Java/Tomcat service spawns /bin/sh, sh -c as root | ProcessRollup2 (Linux sensor) | Q3 |
| 3 · Recon | id, whoami, uname, hostname, cat /etc/passwd as the appliance service user | ProcessRollup2 | Q4 |
| 4 · Second-stage pull / C2 | curl/wget retrieving a payload; outbound to attacker infra from the appliance segment | ProcessRollup2, NetworkConnectIP4, DnsRequest | Q5 |
| 5 · Webshell / reverse shell | Webshell written under the web root, or shell with stdio redirected to a socket (reverse shell) | FileCreateInfo, ProcessRollup2 | Q6 |
| 6 · Lateral movement | From the appliance subnet, remote auth / SSH / SMB into internal hosts; credential reuse | UserLogon, NetworkConnectIP4 | Q7; §11 |
Affected surface & telemetry
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| Ivanti Sentry gateways < 10.5.2 / 10.6.2 / 10.7.1 | Sentry web/access logs + version inventory ingested into LogScale/NG-SIEM | Critical | High — appliance off-sensor; depends on log forwarding |
| Appliance OS (if Linux sensor deployable) | Process lineage on the Sentry/Tomcat service (ProcessRollup2) | High | High — sensor rarely installed on the appliance |
| Appliance network segment | Egress / DNS from the gateway subnet (NetworkConnectIP4, DnsRequest) | High | Medium — depends on segment visibility |
| Internal endpoints / identities (post-access) | Logon + process lineage (UserLogon, ProcessRollup2) | High | Low — standard Falcon sensor |
Consolidated IOC Table
| Type | Value | Conf | Action | Context |
|---|---|---|---|---|
| URI | POST /mics/api/v2/sentry/mics-config/handleMessage | high | detect | The exploit endpoint — unauth path to RCE |
| Payload | message body containing command=execute | high | detect | Triggers handleExecute() OS command run |
| Behavior | Sentry/Java/Tomcat service spawns /bin/sh or sh -c as root | high | detect | Core post-exploitation signature |
| Behavior | Recon binaries (id, whoami, uname) under the appliance service user | medium | hunt | Hands-on-keyboard recon after RCE |
| Behavior | curl/wget second-stage pull from the appliance / its subnet | high | detect | Second-stage download / C2 setup |
| Config | Sentry version < 10.5.2 / 10.6.2 / 10.7.1, internet-exposed | high | detect | The vulnerable state — patch closes it |
| Window | Web-log review 2026-06-10 → present | high | hunt | Mass exploitation began within 24h of patch |
ATT&CK Mapping
| Tactic | Technique | Observed Behavior | Query / Control |
|---|---|---|---|
| Initial Access | T1190 — Exploit Public-Facing Application | Unauth POST to the Sentry handleMessage endpoint | Q1, Q2; S10 patch |
| Execution | T1059 — Command & Scripting Interpreter | handleExecute() runs OS commands as root; service spawns shells | Q3, Q4 |
| Command & Control | T1071 / T1105 — App-Layer Protocol / Ingress Tool Transfer | curl/wget second-stage pull; outbound from appliance segment | Q5 |
| Persistence | T1505.003 — Server Software Component: Web Shell | Webshell dropped under the web root; reverse shell for re-entry | Q6 |
| Lateral Movement | T1021 — Remote Services | From the appliance subnet into internal hosts via SSH/SMB/RDP | Q7 |
| Valid Accounts | T1078 — Valid Accounts | Credentials/config harvested from the gateway reused internally | Q7; §11 |
Native Audit-Log Hunts
| Hunt | Source | Logic | Response |
|---|---|---|---|
| N1 · Version / patch inventory | Ivanti Sentry admin / asset inventory | Sentry 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 review | Sentry web / access logs | Any POST to /mics/api/v2/sentry/mics-config/handleMessage from 2026-06-10 → present; flag bodies with command=execute | Pivot any hit to host hunts Q3-Q7; assume-breach |
| N3 · Appliance OS audit-log review | Sentry OS /var/log/audit/, /var/log/messages | Shell/recon/download exec under the web-service user; correlate by timestamp with N2 POSTs | Per vendor IOC guidance; preserve forensic image |
| N4 · Egress review from appliance segment | Firewall / proxy / NetFlow | New outbound connections from the Sentry subnet to untrusted infra during the exploitation window | Correlate with Q5; block + scope |
CrowdStrike LogScale CQL Hunt Queries
⚠ 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.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)
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)
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)
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)
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)
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)
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)
CrowdStrike Custom IOA Recommendations
| IOA Name | Field Patterns | Benign Exclusions | Deployment Path |
|---|---|---|---|
| Sentry RCE — web service spawns shell | Parent 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 pattern | CmdLine 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 |
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.
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)
# 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
# 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.
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
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.
- 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 internet — M1035 / M1030. Restrict
/micsadmin paths via WAF/ACL to trusted management networks only. - Assume-breach triage on any pre-patch internet-exposed gateway — M1047. 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
execute— M1050. Virtual-patch defense while patching completes.
- Segment the appliance into a tightly-firewalled DMZ; least-privilege egress — M1030 / M1037. Caps second-stage download (Q5) and lateral movement (Q7) from the gateway.
- Rotate all credentials/certs/secrets stored on or reachable from Sentry — M1027. Defeats credential reuse (T1078) after a root compromise.
- Forward Sentry web + OS audit logs into LogScale/NG-SIEM — M1047. Makes Q1–Q2 and N2/N3 actually runnable.
- Deploy a Linux Falcon sensor on the appliance where supported — M1047. Enables Q3–Q6 process-lineage detection on the gateway itself.
- Front MDM/email gateways with identity-aware / ZTNA access — M1035. Removes broad pre-auth reachability of the management plane.
- Continuous edge-appliance version & config drift monitoring — M1016. 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.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain the Sentry gateway (block egress + lateral); take it out of the public-facing path; network-contain any internal host reached from the appliance subnet | Network + SOC L2 | Q1/Q2/N4 rows; containment log |
| Triage | Pull 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 L2 | Process trees; Q3-Q7 rows; log graph |
| Eradicate | Rebuild 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 Sentry | IR + IT | Rebuild record; credential/cert revocation log |
| Recover | Restore 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-exposing | IR + IT | Version readout; config readout |
| Harden | Remove admin paths from the internet; segment the DMZ; forward logs + deploy sensor; promote Q3 / Q6 reverse-shell IOAs; enable config-drift monitoring (§10) | Detection Eng | Policy state; IOA enabled |
Detection Coverage Map & Validation
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| — | Vulnerable Sentry version / exposure | — | — | Good patch + N1 audit |
| T1190 | Exploit POST to handleMessage | Q1, Q2 | — | Partial needs Sentry logs ingested |
| T1059 | Root web-service shell / recon | Q3, Q4 | IOA-1 | Partial needs appliance sensor |
| T1105 / T1071 | Second-stage pull / C2 | Q5 | — | Partial FP risk; allow-list updates |
| T1505.003 | Webshell / reverse shell | Q6 | IOA-2 | Partial scope to runtime |
| T1021 / T1078 | Lateral movement from gateway | Q7 | — | Partial 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).
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
Changelog
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.References
| Tier | Source | Used For |
|---|---|---|
| 1 | watchTowr Labs — Ivanti Sentry pre-auth OS command injection | Root cause: handleMessage → handleExecute, message parsing, command=execute |
| 1 | Horizon3.ai — CVE-2026-10520 attack research | Exploit endpoint, ConfigServiceController, patch behavior |
| 1 | Rapid7 — ETR CVE-2026-10520 / CVE-2026-10523 | Affected versions, companion flaw, exploitation confirmation |
| 1 | BleepingComputer — Max-severity Sentry flaw now exploited | Mass exploitation within 24h of patch; public PoC |
| 1 | SecurityAffairs — Sentry gateways compromised shortly after patch | Shadowserver backdoored-gateway telemetry; KEV |
| 2 | SOCRadar — Ivanti Sentry CVE-2026-10520 root RCE | IOC guidance: Java/Tomcat spawning shells/recon/curl-wget; audit-log cross-reference |
| 2 | Help Net Security — Ivanti Sentry CVE-2026-10520 / CVE-2026-10523 | Disclosure, 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.