ShinyHunters (UNC6240 / UNC6661 / UNC6671): Vishing-to-SaaS Data Theft and PeopleSoft Exploitation

Voice phishing, SSO and MFA takeover, SaaS bulk theft and extortion, plus exploitation of Oracle PeopleSoft CVE-2026-35273 with MeshCentral persistence. Sources current to October 2026, including reported arrests that did not end the activity.
Threat
ShinyHunters (UNC6240, Bling Libra, G1057)
Severity
ACTIVE EXTORTION · EXPLOITED ITW
Type
Cybercrime data-theft extortion (cloud and SaaS)
Access Vector
Vishing for SSO and MFA; PeopleSoft CVE-2026-35273
Version
v0.1 (Draft) · 2026-10-16
Author
HuntPack
Confidence
High (multiple Tier 1 sources agree)
01

Executive Summary

Attacker objective. ShinyHunters is a financially motivated extortion collective, active since at least 2019, that steals data and demands payment under threat of leaking it. It does not encrypt. Sekoia assesses the name now covers decentralised clusters sharing one brand and tied to The Com. [#1] [#8]

Google tracks the live intrusion work as three clusters. UNC6661 and UNC6671 gain access by voice phishing. UNC6240, the canonical ShinyHunters, runs the extortion and the 2026 Oracle PeopleSoft exploitation. [#2]

Track A: vishing to SaaS data theft. Operators call staff as IT support, send them to a victim-branded sign-in page, capture the SSO password and MFA code, then enroll an MFA device they control. [#2] Okta documents kits that let the caller steer the victim's browser in step with the call, which defeats push and number matching. [#6] Obsidian saw Okta FastPass enrolled from an emulated Android device named "Passkey". [#9] The actor then pulls data from SharePoint, OneDrive, Salesforce, Slack and similar platforms, and in one case authorized an add-on that deletes the "Security method enrolled" email. [#2]

Track B: PeopleSoft exploitation. UNC6240 exploited CVE-2026-35273 (CVSS 9.8) as a zero-day from 27 May to 9 June 2026, before Oracle's 10 June alert. [#3] In September it returned with a one-character URL-encoding trick that bypassed WAF rules and deployed web shells on dozens of systems. [#4] Post-exploitation used MeshCentral agents disguised as Azure services, an SSH credential-spray script, zstd archives and a Tor-hosted leak site. [#3] [#4]

Current status. Law enforcement reported detentions and arrests in September and October 2026. [#12] [#13] Nothing in the sources shows the extortion or exploitation stopping, and the brand reportedly changed hands during the arrests, so treat the threat as live.

Highest-value defensive angle. The first reliable signal is in the identity provider, not on an endpoint: an MFA factor change shortly after a failure-heavy sign-in. [#5] [#9] Patching PeopleSoft is the only reliable fix for Track B, because path-based WAF rules were already bypassed. [#4]

Defender priority: alert on every MFA activation, reset or device enrollment that follows failed sign-ins (Q8, Q9), and on any Java process on a PeopleSoft host that starts a shell (Q5). Patch CVE-2026-35273 and block /PSEMHUB and /PSIGW/HttpListeningConnector on the normalized path.

02

Source Review & Web Hunter Notes

#TierSourceKey findingCarry forward
1T1MITRE ATT&CK G1057 ShinyHunters (UNC6240, Bling Libra)Canonical aliases, active since at least 2019, technique catalogue including T1190 on PeopleSoft CVE-2026-35273, MeshCentral masquerade, Tor DLS, extortion mailboxes.yes
2T1GTIG/Mandiant: Vishing for Access, Tracking the Expansion of ShinyHunters-Branded SaaS Data Theft (30 Jan 2026)UNC6661/UNC6671/UNC6240 split, vishing and victim-branded SSO domains, ToogleBox Recall, PowerShell SharePoint theft, 19 source IPs, extortion mechanics.yes
3T1GTIG/Mandiant: ShinyHunters Targets Education Sector with Oracle PeopleSoft Exploit (11 Jun 2026)CVE-2026-35273 zero-day window 27 May to 9 Jun, MeshCentral staging, masqueraded agents, fanout script, hashes, 6 network indicators.yes
4T1GTIG/Mandiant: ShinyHunters Renewed Mass Exploitation Campaign Targeting Oracle PeopleSoft (Sep 2026)%50SEMHUB WAF bypass, fileless and web-shell exploitation, x.jsp/u.jsp, SIDEEYE (Ple64.exe), Neo-reGeorg, MeshAgent domains, hashes, 3 IPs, 1 domain.yes
5T1Mandiant: proactive hardening, logging and detection guide for ShinyHunters-branded SaaS intrusionsContainment, help-desk verification, IdP and SaaS hardening, logging requirements, detection logic. Primary source for Sections 12 to 14.yes
6T1Okta Threat Intelligence: Phishing kits adapt to the script of callersReal-time session-orchestration vishing kits defeat push and number matching; FastPass and FIDO passkeys resist. Detailed IOCs are customer-gated.yes
7T1FBI IC3 PSA I-20260515-PSA: ShinyHunters Cyber Criminal Group Attacks Learning Management System (15 May 2026)Government description of extortion pressure: harassment, threatening calls and texts, swatting, Tor leak site, false claims.yes
8T1Sekoia: Gotta Breach 'Em All, the journey of ShinyHuntersGroup structure (decentralised clusters under a shared alias, link to The Com), 2025 to 2026 timeline, token-theft supply-chain pattern.partial
9T2Obsidian Security: Behind the breach, ShinyHunters' 2026 voice phishing campaignOkta event sequences, FastPass enrollment from an emulated Android device named Passkey, Genymobile user agent, SSO burst, Slack and Drive bulk download.yes
10T3Huntress: ShinyHunters threat actor profileAggregated campaign timeline (token abuse, Aura exploitation, actor user-agent strings). Used only where a T1 source does not contradict it.partial
11T3Picus Security: The ShinyHunters Domino EffectBackground on the ecosystem-breach pattern. No indicators taken.no
12T2KrebsOnSecurity: ShinyHunters arrests and extortion (7 Oct 2026)Current status: reported detentions and arrests, brand takeover, continued PeopleSoft mass exploitation and the WAF-bypass update.yes
13T2BleepingComputer: FBI arrests another suspected ShinyHunters hacker (Oct 2026)Corroborates the October 2026 arrests and the PeopleSoft attribution.partial

Web Hunter decisions

  • Atomic IOCs come from Tier 1 only. Every hash, address and domain shipped in Section 10 appears verbatim in a saved GTIG report (sources 2, 3 or 4). Each source is snapshotted under the pack's sources folder for the provenance gate.
  • Dropped. Two further indicators appeared only in third-party aggregator pages and in no vendor report. They are not in the pack.
  • Typo reconciled. MITRE lists one extortion mailbox as shinycorp@tutonota[.]com. GTIG writes shinycorp@tutanota[.]com. The pack lists the GTIG spelling and keeps the MITRE variant as a hunt string.
  • No victim names. Victims named in sources are not repeated here. The pack is written around tradecraft so it ports to any environment.
  • Related packs. The library already holds a PeopleSoft CVE-2026-35273 pack (v0.3, June 2026) with six endpoint queries for the June zero-day activity, plus packs for UNC6671 vishing and AiTM, a Teams-vishing cluster, a Salesloft-Drift OAuth campaign, and Scattered Spider. This pack covers ShinyHunters as one actor. It repeats the June PeopleSoft infrastructure so it stands alone, and adds the September renewed exploitation (the %50SEMHUB WAF bypass, web shells, SIDEEYE, Neo-reGeorg, new addresses and domains) and the full Okta, Microsoft 365, Google Workspace and Salesforce track. See the PeopleSoft pack for its June-specific detail.

Contradictions and gaps

  • The June report lists five staging addresses and one mirror address. The September report lists three different addresses. They are different infrastructure generations, not a conflict.
  • GTIG's 19 January source IPs are residential-proxy and VPN addresses from January 2026. They are perishable and shared, so the pack uses them for hunting only.
  • Okta's indicator list and kit analysis are available only to Okta security contacts. This pack uses only what Okta published openly.
  • GTIG says the x.jsp, tunnel.jsp and tunnel.jspx hashes vary per deployment. Hunt those by name and path, not by hash.
  • Attribution is layered: UNC6661, UNC6671 and UNC6240 are separate clusters that GTIG links by shared extortion infrastructure. Do not assume one operator.

Overall confidence: High. At least two Tier 1 sources agree on every central claim. Perishability is high for the IP lists and low for tradecraft.

03

Hunt Brief & Attack Chain

Hunt hypotheses (ordered by fidelity)

IDHypothesisMITRETelemetry requiredExpected FPConfidenceQueries
H1Vishing-led account takeover: a failure-heavy sign-in ends in success, then the attacker enrolls their own MFA factor within minutes.T1566.004 (inferred), T1078.004, T1098.005, T1556.006Okta System Log; Entra sign-in and audit logsNew hires and genuine device replacementHighQ7, Q8, Q9, Q10
H2Post-authentication bulk theft from SharePoint, OneDrive and Salesforce using scripts and native export features.T1213.002, T1530, T1567, T1213.006Microsoft 365 Unified Audit Log; Salesforce Event MonitoringSanctioned migration, backup and Data Loader jobsHighQ11, Q13
H3Concealment: an add-on is authorized to delete the MFA-enrollment notification, and outbound phishing is deleted from the sent items.T1070.008 (inferred)Google Workspace OAuth and Gmail audit; Exchange mailbox auditDeliberate add-on installsHighQ12
H4PeopleSoft CVE-2026-35273 exploitation: POST requests to the EMHub servlet (including the percent-encoded variant), then web shells or fileless shell execution from the WebLogic Java process.T1190, T1505.003, T1059.003, T1059.004Web-server access logs; process creationJava servers that shell out for admin scriptsHighQ5 plus native hunt N6
H5Persistence through MeshCentral agents disguised as Azure services, calling home to Microsoft-lookalike domains.T1219, T1036.005, T1583.001DNS lookups; network connections; process creation; file hashesSanctioned MeshCentral deploymentsHighQ1, Q2, Q3
H6Linux lateral movement and exfiltration staging: sshpass credential spray, a fanout script, zstd archives and SSH to the leak-site mirror.T1110.003 (inferred), T1021.004 (inferred), T1560.002, T1048Process creation; network connectionsBackup and admin automationMediumQ4, Q2
H7Coercion and credential harvest from the PeopleSoft tier: outbound SMB to the internet and reads of psappsrv.cfg.T1187 (inferred), T1552.001Network connections; web-tier file auditCloud file shares reached over TCP/445MediumQ6 plus native hunt N7
H8Stolen integration tokens (OAuth or API) reused to pivot into Salesforce, Snowflake and BigQuery from the attacker's own infrastructure.T1528, T1550.001, T1530SaaS connected-app and API audit logs, outside endpoint telemetryNormal third-party integrationsMediumPartial: Q13, native hunt N5

Attack chain

StepBehaviorTelemetryHunt angle
1Lure infrastructure: victim-branded domains such as <org>sso, <org>internal, <org>support, registered mostly at NICENIC or Tucows.DNS lookup with the requesting process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents DnsQueryResponse); proxy and email gateway logsResolve and click events for new lookalike domains of your own brand name
2Voice phish: caller poses as IT support, victim enters SSO password and MFA code on the lookalike page.Identity-provider and SaaS audit logs (Okta System Log, Entra sign-in and audit logs, Microsoft 365 Unified Audit Log, Google Workspace audit, Salesforce Event Monitoring), outside endpoint telemetryFailure-heavy sign-in chain, often about ten minutes long
3MFA persistence: attacker enrolls Okta FastPass or another factor from an emulated Android device named Passkey.Identity-provider and SaaS audit logs (Okta System Log, Entra sign-in and audit logs, Microsoft 365 Unified Audit Log, Google Workspace audit, Salesforce Event Monitoring), outside endpoint telemetryMFA activation after failures; Genymobile user agent
4SSO burst: the stolen session opens many connected applications quickly to find data.Identity-provider and SaaS audit logs (Okta System Log, Entra sign-in and audit logs, Microsoft 365 Unified Audit Log, Google Workspace audit, Salesforce Event Monitoring), outside endpoint telemetryUnusual count of distinct apps per session
5Bulk theft: scripted SharePoint and OneDrive downloads, Salesforce bulk export, Slack and Drive downloads seconds apart.Identity-provider and SaaS audit logs (Okta System Log, Entra sign-in and audit logs, Microsoft 365 Unified Audit Log, Google Workspace audit, Salesforce Event Monitoring), outside endpoint telemetryPowerShell user agent; row counts; keyword searches such as poc, confidential, vpn
6Concealment: ToogleBox Recall authorized; MFA-notification email deleted; phishing sent to contacts, then deleted.Identity-provider and SaaS audit logs (Okta System Log, Entra sign-in and audit logs, Microsoft 365 Unified Audit Log, Google Workspace audit, Salesforce Event Monitoring), outside endpoint telemetryOAuth authorization of the add-on; deletions of security emails
7Extortion: email, texts and calls, 72-hour Bitcoin demand, Tox, Limewire samples, leak site, harassment, DDoS.Mail gateway and phone-system records, outside endpoint telemetryInbound mail from the listed extortion mailboxes
8Track B access: POST requests to /PSEMHUB/hub or /%50SEMHUB/hub, then JSP web shells or shell processes from Java.Web-server access logs; Process creation with command line, path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents)Java parent with shell child; new JSP files under PSEMHUB.war
9Track B tooling: MeshAgent from /tmp, SIDEEYE (Ple64.exe), Neo-reGeorg tunnel pages.Process creation with command line, path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents); DNS lookup with the requesting process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents DnsQueryResponse); Outbound network connection (CrowdStrike: NetworkConnectIP4. SentinelOne: IP Connect. Defender: DeviceNetworkEvents)Azure-named agents; connections to C2 on TCP/3333 and 3334
10Track B movement and exit: psappsrv.cfg and config.xml reads, sshpass fanout, README marker file, zstd archive, SSH to the leak-site mirror.Process creation with command line, path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents); Outbound network connection (CrowdStrike: NetworkConnectIP4. SentinelOne: IP Connect. Defender: DeviceNetworkEvents)meshctrl RunCommand, sshpass, zstd, outbound SSH

Items marked (inferred) are analyst mappings the cited sources do not state. Steps 8 to 10 follow GTIG's June and September reports; steps 1 to 7 follow GTIG's January report, Okta, Obsidian and Mandiant's guide.

04

Consolidated IOC Table

TypeValueConfidenceActionContext
Domainazurenetfiles.nethighdetectMeshCentral C2 / staging, Microsoft-lookalike name (primary C2: wss://azurenetfiles.net:443/agent.ashx)
Domainmicrosoft-entra.nethighdetectMeshCentral C2 / staging, Microsoft-lookalike name
Domainenroll.azuredevice.cloudhighdetectMeshCentral C2 / staging, Microsoft-lookalike name
Domainwinmanage-me.networkhighdetectMeshCentral C2 / staging, Microsoft-lookalike name
IPv4142.11.200.186highdetectStaging host (Python SimpleHTTP :8888, MeshCentral)
IPv4142.11.200.187highdetectStaging host (Python SimpleHTTP :8888, MeshCentral)
IPv4142.11.200.188highdetectStaging host (Python SimpleHTTP :8888, MeshCentral)
IPv4142.11.200.189highdetectStaging host (Python SimpleHTTP :8888, MeshCentral)
IPv4142.11.200.190highdetectStaging host (Python SimpleHTTP :8888, MeshCentral)
IPv4176.120.22.24highdetectClearnet mirror of the ShinyHunters data leak site; SSH exfil destination
IPv45.199.162.157highdetectAttack controller, scanner and HTTP callback receiver
IPv4104.219.234.138highdetectExfiltration staging and remote-management host
IPv4162.219.30.165highdetectC2 for SIDEEYE backdoor (TCP/3333 control, TCP/3334 data)
SHA-256f02a924c9ff92a8780ce812511341182c6b509d45bc59f3f7b522e37225d24fchighdetectmeshagent64-azure-ops.exe
SHA-256d83fdb9e53c5ff03c4cb0451ea1bebd79b53f29eadc1e2fa394c7af13a86ce2fhighdetectmeshagent64-v2.exe
SHA-256c7e9332731b06644fc73e0046a2a89eaa59b09f54250e9bd622467187351711fhighdetectmeshagent32-azure-ops.exe
SHA-25668257a6f9ff196179ec03624e849927f26599eb180a7c82e14ef5bc4e93bc309highdetectmeshagent (Linux, unconfigured)
SHA-2563ba215692665513abfffd4e815c5c45f2d41e5dcc4283a2a3b740930c5c417c3highdetectPle64.exe (SIDEEYE loader)
SHA-2562bee941fb40519d0d1ec52bd79a8f63fc65aac6455c8f2d6b668e3360dfdb5d7highdetectu.jsp
SHA-25648b4a0827da7bbfce9fb52464f8a659dea7a035189c52c506c0bfb4b1c3fe494lowhuntx.jsp: GTIG says the hash varies per deployment; hunt by name and path
SHA-256419c571ee38b7e7266d130c4b6bbc4dd0ef44d6e5f3bc02cc2cf73b762f07c86lowhunttunnel.jsp: GTIG says the hash varies per deployment; hunt by name and path
SHA-256ba14419beb2ec0bb94cab6298c14d7fb3e1d819366fe378290c0c2a4d97f7e07lowhunttunnel.jspx: GTIG says the hash varies per deployment; hunt by name and path
SHA-2562ab684d93c1553fad87041b4dea97188a97e78589deee2a7bacff905564f3a35mediumenrich.bash_history: attacker command history from the staging hosts
File namex.jsp under PSEMHUB.warhighdetectJSP web shell or Neo-reGeorg tunnel
File nameu.jsp under PSEMHUB.warhighdetectJSP web shell or Neo-reGeorg tunnel
File nameu2.jsp under PSEMHUB.warhighdetectJSP web shell or Neo-reGeorg tunnel
File nametunnel.jsp under PSEMHUB.warhighdetectJSP web shell or Neo-reGeorg tunnel
File nametunnel.jspx under PSEMHUB.warhighdetectJSP web shell or Neo-reGeorg tunnel
File namePle64.exe under PSEMHUB.warhighdetectTrojanized installer delivering SIDEEYE
File nameREADME-IF-YOU-SEE-THIS-YOUVE-BEEN-HACKED.TXThighdetectDefacement and extortion marker copied to WebLogic and Process Scheduler directories
File name<victim_abbreviation>_fanout.shhighdetectSSH credential-spray and marker-deployment script in /tmp
Linux paths/tmp/meshagent, /tmp/meshagent.msh, /tmp/meshagent.dbhighdetectMeshAgent dropped under the PeopleSoft service account
URI/PSEMHUB/hub, /%50SEMHUB/hub, /PSIGW/HttpListeningConnectorhighhuntExploitation path; assume any percent-encoded or mixed-case variant
Emailshinycorp@tutanota[.]comhighhuntExtortion contact (GTIG spelling)
Emailshinygroup@onionmail[.]comhighhuntExtortion contact
Emailshinycorp@tuta[.]com, shinygroup@tuta[.]commediumhuntExtortion contacts listed by MITRE
Domain pattern<org>sso[.]com, <org>internal[.]com, <org>support[.]com, <org>okta[.]com, <org>access[.]commediumhuntVictim-branded lookalikes; NICENIC (UNC6661) and Tucows (UNC6671) registrars
User agentGenymobile / Geny Mobile (Okta Android client com.okta.android.auth)highdetectEmulated Android enrolling FastPass
Device namePasskeymediumhuntOkta Verify / FastPass device name used in all three Obsidian incidents
User agentWindowsPowerShell/5.1 against SharePoint or OneDrivemediumhuntScripted bulk download
OAuth appToogleBox RecallhighdetectAdd-on that permanently deletes mail; authorized to hide the MFA-enrollment email
User agentRapeForce, RapeFlakemediumhuntActor strings reported for the Aura and earlier Snowflake campaigns (Tier 3 source)
IPv4 (19)See the IdP/SaaS source-IP watchlist in Section 10mediumhuntResidential proxy and VPN addresses from January 2026; perishable, hunt only

Action vocabulary: detect alert or block, hunt search and review, enrich add context only. Sources: Tier 1 reports 2, 3, 4 and MITRE 1; Obsidian 9 for Okta behavior.

05

Affected Surface & Telemetry Matrix

SurfaceTelemetryPriorityGap
Identity providers: Okta, Entra ID, Google WorkspaceIdentity-provider and SaaS audit logs (Okta System Log, Entra sign-in and audit logs, Microsoft 365 Unified Audit Log, Google Workspace audit, Salesforce Event Monitoring), outside endpoint telemetryCriticalNeeds SIEM ingest of authentication, MFA-lifecycle and admin events; Okta indicator list is customer-gated
Microsoft 365: SharePoint, OneDrive, ExchangeIdentity-provider and SaaS audit logs (Okta System Log, Entra sign-in and audit logs, Microsoft 365 Unified Audit Log, Google Workspace audit, Salesforce Event Monitoring), outside endpoint telemetry; Purview Audit must be onCriticalUser agent is captured only if the audit record carries it; retention varies by licence
Salesforce and Experience CloudSalesforce Event Monitoring (login, API, bulk-result and report-export events), outside endpoint telemetryHighEvent Monitoring is a licensed add-on; basic login history will miss bulk export
Other SaaS: Slack, Google Drive, DocuSign, AtlassianEach product's audit log, outside endpoint telemetryMediumOften not ingested; retention windows are short
Help desk and phone systemTicketing and call records; no endpoint telemetryHighProcess control, not a log source
Oracle PeopleSoft web tier on WebLogic (Linux and Windows)Web-server access logs; Process creation with command line, path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents); Outbound network connection (CrowdStrike: NetworkConnectIP4. SentinelOne: IP Connect. Defender: DeviceNetworkEvents); File hashes on process events (CrowdStrike: SHA256HashData. SentinelOne: process image SHA-256. Defender: SHA1 or SHA256)CriticalFileless exploitation leaves no file; web-log retention is often short
Linux application and database serversProcess creation with command line, path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents); Outbound network connection (CrowdStrike: NetworkConnectIP4. SentinelOne: IP Connect. Defender: DeviceNetworkEvents); DNS lookup with the requesting process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents DnsQueryResponse)HighSensor must be on the PeopleSoft hosts; many are unmanaged appliances
Staff endpointsDNS lookup with the requesting process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents DnsQueryResponse); browser and proxy logsMediumThe call happens on a phone, so endpoints see only the later sign-in page

Gaps: nothing in endpoint telemetry sees the phone call, the lookalike page rendered on a personal phone, or SaaS-native exports. Detection for Track A depends on identity-provider and SaaS log ingest.

06

ATT&CK Mapping

TacticTechniqueNameObserved behaviorQuery or control
Resource DevelopmentT1583.001Acquire Infrastructure: DomainsVictim-branded SSO lookalikes; Microsoft-lookalike C2 namesQ1; N8
Initial AccessT1566.004 (inferred)Spearphishing VoiceCallers pose as IT supportQ9; process control
Initial AccessT1078.004Valid Accounts: Cloud AccountsStolen SSO credential plus MFA codeQ8, Q9, Q10
Initial AccessT1190Exploit Public-Facing ApplicationCVE-2026-35273 against PeopleSoft EMHubQ5; N6
PersistenceT1098.005 (inferred)Account Manipulation: Device RegistrationFastPass enrollment from emulated AndroidQ7, Q8
PersistenceT1556.006 (inferred)Modify Authentication Process: Multi-Factor AuthenticationAttacker-controlled factorQ7, Q8
PersistenceT1505.003Server Software Component: Web Shellx.jsp, u.jsp, tunnel.jsp under PSEMHUB.warQ5; N6
Persistence / C2T1219Remote Access SoftwareMeshCentral and ConnectWiseQ1, Q2, Q3
Defense EvasionT1036.005Masquerading: Match Legitimate Name or Locationmeshagent64-azure-ops.exe, Azure-named domainsQ1, Q3
Defense EvasionT1070.008 (inferred)Indicator Removal: Clear Mailbox DataToogleBox Recall deletes the MFA-notification emailQ12
ExecutionT1059.003, T1059.004Windows Command Shell, Unix ShellShells spawned by the WebLogic Java processQ5
ExecutionT1059.007JavaScriptmeshctrl.js RunCommandQ4
Credential AccessT1552.001Credentials In Filespsappsrv.cfg database credentialsN7
Credential AccessT1187 (inferred)Forced AuthenticationOutbound SMB to capture NetNTLM hashesQ6
Credential AccessT1528, T1550.001Steal Application Access Token; Application Access TokenOAuth and API tokens from integrationsQ13; N5
DiscoveryT1083, T1082, T1016File and Directory, System Information, Network Configurationpsappsrv.cfg, config.xml, hostname and idQ4
Lateral MovementT1021.004, T1110.003 (inferred)SSH; Password Sprayingsshpass fanout scriptQ4
CollectionT1213.002, T1213.006SharePoint; DatabasesScripted SharePoint pull; Salesforce datasetsQ11, Q13
CollectionT1560.002Archive via Libraryzstd archive of exfil directoryQ4
Command and ControlT1090.003, T1573.002Multi-hop Proxy; Asymmetric CryptographyTor leak site; SSH from staging hostQ2
ExfiltrationT1567, T1048Web Service; Alternative ProtocolLimewire samples, SSH and rsync from the PeopleSoft tierQ2, Q13
ImpactT1657, T1491.001Financial Theft; Internal Defacement72-hour Bitcoin demand; README marker fileN9

Technique IDs come from MITRE G1057 (source 1) and GTIG (sources 2 to 4). Entries marked (inferred) are analyst mappings.

07

Native Audit-Log Hunts

These checks need no Falcon query. Run them in the product named in each row.

N1 · Okta System Log: MFA lifecycle and emulator

Where: Admin Console, Reports, System Log, or the System Log API.

eventType eq "user.mfa.factor.activate" or eventType eq "user.mfa.factor.reset_all" or eventType eq "device.enrollment.create"

Pivot on actor, client.ipAddress and client.userAgent.rawUserAgent. Look for Genymobile and for a device named Passkey.

N2 · Entra ID: security-info registration

Where: Entra admin center, Monitoring, Audit logs, filter Category = UserManagement.

Activity: User registered security info / User deleted security info

Compare the source IP to the user's normal sign-in locations and to Conditional Access results.

N3 · Microsoft 365: scripted SharePoint and OneDrive downloads

Where: Exchange Online PowerShell.

Search-UnifiedAuditLog -StartDate (Get-Date).AddDays(-14) -EndDate (Get-Date) -Operations FileDownloaded,FileAccessed -ResultSize 5000 |
  Where-Object { $_.AuditData -match 'WindowsPowerShell' } |
  Select-Object CreationDate, UserIds, Operations

Group by user and count. Mandiant's threshold was 50 documents of 3 or more types in 5 minutes.

N4 · Google Workspace: add-on authorization and mail deletion

Where: Admin console, Reporting, Audit and investigation, OAuth log events and Gmail log events.

OAuth log: App name contains ToogleBox Recall. Gmail log: event is delete or permanent delete and subject matches MFA enrollment wording.

A deleted 'Security method enrolled' message is the signal; check outbound mail deleted the same hour.

N5 · Salesforce: bulk export and connected-app token use

Where: Developer console or Workbench against EventLogFile.

SELECT EventType, LogDate, LogFile FROM EventLogFile WHERE EventType IN ('BulkApi','ReportExport','Login','RestApi') AND LogDate = LAST_N_DAYS:14

Look for new connected apps, API calls from unfamiliar addresses, and Data Loader user agents. For Experience Cloud, review guest-user API volume.

N6 · PeopleSoft web tier: exploitation attempts and web shells

Where: Shell on each WebLogic node (check every node behind the load balancer).

PS_CFG_HOME=/u01/app/psoft/ps_config_homes/csprd   # adjust to your install
grep -Eih 'psemhub|%50semhub|psigw/httplisteningconnector' $(find "$PS_CFG_HOME"/webserv -name '*access*log*') | head -200
find "$PS_CFG_HOME"/webserv/*/applications/peoplesoft/PSEMHUB.war \( -name '*.jsp' -o -name '*.jspx' -o -name '*.exe' \) -ls
find "$PS_CFG_HOME"/webserv/*/applications/peoplesoft/PSEMHUB.war/envmetadata -type f -ls

Any JSP, JSPX or EXE that is not part of the shipped product is hostile. Five to fifteen POSTs to the hub servlet from one address is target verification.

N7 · PeopleSoft hosts: credential and config reads

Where: Shell with auditd, or EDR file-read telemetry.

ausearch -i -f psappsrv.cfg
ausearch -i -f config.xml

Reads of psappsrv.cfg and WebLogic config.xml by a shell or Java child are reconnaissance. Rotate every credential stored there if a web shell is found.

N8 · Proxy, DNS and mail: lookalike domains

Where: DNS, web proxy and mail gateway logs.

Match: ^(my-?)?<yourorg>(sso|internal|support|okta|azure|access)\.(com|net|support)$

Also match ticket-<yourorg>.support and on<yourorg>zendesk.com. Hits mean staff were sent to a lookalike page.

N9 · Mail gateway and phone system: extortion contact

Where: Mail gateway search and phone-system call records.

Sender or reply-to contains shinycorp@tutanota.com, shinygroup@onionmail.com, shinycorp@tuta.com or shinygroup@tuta.com

Brief executives and the help desk. Expect harassing texts and calls to staff and their families.

08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.

Q1 to Q6 run on Falcon sensor telemetry. Q7 to Q13 run on identity and SaaS logs ingested into Falcon Next-Gen SIEM. Their field names depend on your parser, so each carries a validate-in-tenant note. Run one against a sample row before relying on it.

Q1 · DNS resolution of ShinyHunters MeshCentral C2 and Microsoft-lookalike domains
CONF highFP lowCOST low

Looks for: Endpoints resolving the four Microsoft/Azure-lookalike domains that front the actor's MeshCentral C2 and staging. FP: none expected: attacker-registered lookalikes with no legitimate use.

// HUNT: DNS resolution of ShinyHunters MeshCentral C2 and Microsoft-lookalike domains
// MITRE: T1583.001, T1219, T1036.005
// CONF: high
// FP: low
// COST: low
// REQUIRES: Falcon sensor DNS telemetry (DnsRequest)
// FALSE POSITIVES: none expected -- attacker-registered lookalike domains with no legitimate use
// LOOKBACK: 90d
#event_simpleName=DnsRequest
| DomainName=/(^|\.)(azurenetfiles\.net|microsoft-entra\.net|enroll\.azuredevice\.cloud|winmanage-me\.network)$/i
| table([@timestamp, aid, ComputerName, DomainName, ContextBaseFileName])
| sort(@timestamp, order=desc)
Q2 · Connections to PeopleSoft-campaign staging, C2 and exfiltration hosts
CONF highFP lowCOST low

Looks for: Outbound connections from any host to the nine GTIG-attributed staging, C2 and exfiltration addresses (including SIDEEYE on TCP/3333-3334). FP: none expected; confirm none of the ranges is a sinkhole or scanner you operate.

// HUNT: Connections to PeopleSoft-campaign staging, C2 and exfiltration hosts
// MITRE: T1105, T1573.002, T1090, T1048, T1219
// CONF: high
// FP: low
// COST: low
// REQUIRES: Falcon sensor network telemetry (NetworkConnectIP4)
// FALSE POSITIVES: none expected -- GTIG-attributed attacker infrastructure
// LOOKBACK: 90d
#event_simpleName=NetworkConnectIP4
| in(RemoteAddressIP4, values=["142.11.200.186","142.11.200.187","142.11.200.188","142.11.200.189","142.11.200.190","176.120.22.24","5.199.162.157","104.219.234.138","162.219.30.165"])
| table([@timestamp, aid, ComputerName, UserName, RemoteAddressIP4, RemotePort, ImageFileName, CommandLine])
| sort(@timestamp, order=desc)
Q3 · Masqueraded MeshCentral agents and the SIDEEYE loader (name or SHA-256)
CONF highFP lowCOST low

Looks for: Execution of the Azure-named MeshAgent binaries, the trojanized Ple64.exe installer, or any file with a published SHA-256. FP: a legitimately deployed MeshCentral agent that happens to be named meshagent64-v2.exe; the hash alternative removes the doubt.

// HUNT: Masqueraded MeshCentral agents and the SIDEEYE loader (name or SHA-256)
// MITRE: T1036.005, T1219, T1105
// CONF: high
// FP: low
// COST: low
// REQUIRES: Falcon sensor process telemetry (ProcessRollup2/SyntheticProcessRollup2)
// FALSE POSITIVES: a sanctioned MeshCentral deployment that reuses the name meshagent64-v2.exe
// LOOKBACK: 90d
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| (ImageFileName=/(meshagent(32|64)-(azure-ops|v2)|Ple64)\.exe$/i or SHA256HashData=/^(f02a924c9ff92a8780ce812511341182c6b509d45bc59f3f7b522e37225d24fc|d83fdb9e53c5ff03c4cb0451ea1bebd79b53f29eadc1e2fa394c7af13a86ce2f|c7e9332731b06644fc73e0046a2a89eaa59b09f54250e9bd622467187351711f|68257a6f9ff196179ec03624e849927f26599eb180a7c82e14ef5bc4e93bc309|3ba215692665513abfffd4e815c5c45f2d41e5dcc4283a2a3b740930c5c417c3)$/i)
| table([@timestamp, aid, ComputerName, UserName, ImageFileName, ParentBaseFileName, SHA256HashData, CommandLine])
| sort(@timestamp, order=desc)
Q4 · Linux post-exploitation tooling: meshctrl RunCommand, sshpass spray, zstd staging, fanout and marker file
CONF mediumFP mediumCOST low

Looks for: The attacker's documented Linux tradecraft on compromised PeopleSoft and WebLogic hosts: MeshCentral CLI remote commands, sshpass credential spray, zstd exfil archives, the fanout script and the defacement marker file. FP: sshpass and zstd are legitimate admin and backup tools; meshctrl.js RunCommand, the fanout script name and the marker file name are not.

// HUNT: Linux post-exploitation tooling (meshctrl RunCommand, sshpass spray, zstd staging, fanout, marker file)
// MITRE: T1059.007, T1021.004, T1110.003, T1560.002, T1491.001
// CONF: medium
// FP: medium
// COST: low
// REQUIRES: Falcon Linux sensor process telemetry (ProcessRollup2/SyntheticProcessRollup2)
// FALSE POSITIVES: sshpass in admin automation; zstd in backup and log-rotation jobs
// TUNING: split the alternation: treat meshctrl.js RunCommand, _fanout.sh and the README marker as high-confidence on their own, and require sshpass or zstd to run as the PeopleSoft/WebLogic service account or from /tmp before alerting
// LOOKBACK: 30d
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| CommandLine=/(meshctrl\.js\s+RunCommand|sshpass\s+-p|zstd\s+-3\s+-T0|_fanout\.sh|npm\s+list\s+global\s+authenticode|README-IF-YOU-SEE-THIS-YOUVE-BEEN-HACKED)/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine])
| sort(@timestamp, order=desc)
Q5 · WebLogic Java process spawning a shell (CVE-2026-35273 fileless command execution and web shells)
CONF highFP mediumCOST low

Looks for: A java process launching cmd.exe, sh, bash or dash. GTIG documents this as how both the fileless POST-response command execution and the x.jsp/u.jsp web shells appear on the host. FP: WebLogic and other Java servers that legitimately shell out for admin or deployment scripts.

// HUNT: Java process (WebLogic/PeopleSoft) spawning a shell
// MITRE: T1190, T1505.003, T1059.003, T1059.004
// CONF: high
// FP: medium
// COST: low
// REQUIRES: Falcon sensor process telemetry (ProcessRollup2/SyntheticProcessRollup2), Linux and Windows
// FALSE POSITIVES: Java application servers that shell out for deployment, backup or health-check scripts
// TUNING: scope to PeopleSoft/WebLogic hosts with a Falcon host group or ComputerName filter, baseline 14 days, then exclude the specific scripts those hosts legitimately launch; keep alerts for base64 -d, curl, /dev/tcp, tasklist and start /b
// LOOKBACK: 30d
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(java|javaw)(\.exe)?$/i
| FileName=/^(cmd\.exe|sh|bash|dash)$/i
| table([@timestamp, aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine])
| sort(@timestamp, order=desc)
Q6 · Outbound SMB (TCP/445) from a server to a public address (NetNTLM coercion)
CONF mediumFP mediumCOST medium

Looks for: Servers opening SMB connections to non-private addresses. Mandiant notes the PeopleSoft exploit chain may coerce the host into outbound SMB to capture machine-account NetNTLM hashes. FP: Azure Files and other cloud file services that legitimately use TCP/445 to public endpoints.

// HUNT: Outbound SMB (TCP/445) from a host to a public address
// MITRE: T1187, T1190
// CONF: medium
// FP: medium
// COST: medium
// REQUIRES: Falcon sensor network telemetry (NetworkConnectIP4)
// FALSE POSITIVES: cloud file shares (for example Azure Files) reached over TCP/445 by design
// TUNING: exclude the public ranges of your sanctioned cloud file services, then restrict to server host groups
// LOOKBACK: 14d
#event_simpleName=NetworkConnectIP4
| RemotePort=445
| !cidr(RemoteAddressIP4, subnet=["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16","127.0.0.0/8","169.254.0.0/16","100.64.0.0/10"])
| table([@timestamp, aid, ComputerName, UserName, RemoteAddressIP4, RemotePort, ImageFileName, CommandLine])
| sort(@timestamp, order=desc)
Q7 · Okta: emulated-Android user agent (Genymobile) on any event
CONF highFP lowCOST low

Looks for: Any Okta event whose client user agent identifies a Genymobile/Genymotion Android emulator. Both GTIG and Obsidian saw the actor enroll Okta FastPass from an emulator. FP: none expected: emulator user agents have no business in a workforce IdP log. ⚠ Field unverified — validate in tenant

// HUNT: Okta events from an emulated-Android (Genymobile) client
// MITRE: T1098.005, T1078.004, T1556.006
// CONF: high
// FP: low
// COST: low
// REQUIRES: Okta System Log ingest (okta_system_log) -- field names are parser-dependent; ⚠ validate in tenant
// FALSE POSITIVES: none expected; a QA or mobile-development team using an emulator against a test Okta org
// LOOKBACK: 30d
#repo=okta_system_log
| "client.userAgent.rawUserAgent"=/Genymobile|Geny\s?Mobile/i
| table([@timestamp, "actor.alternateId", eventType, "outcome.result", "client.ipAddress", "client.userAgent.rawUserAgent", "client.geographicalContext.country"])
| sort(@timestamp, order=desc)
Q8 · Okta: successful MFA factor activation, reset or device enrollment
CONF mediumFP mediumCOST low

Looks for: Every successful MFA factor lifecycle change and Okta Verify device enrollment. In this intrusion pattern MFA manipulation is the account-takeover step, so any hit needs a look at the same user's preceding sign-ins. FP: legitimate self-service enrollment, device replacement and new-hire onboarding. ⚠ Field unverified — validate in tenant

// HUNT: Okta successful MFA factor activation, reset or device enrollment (post-vishing signal)
// MITRE: T1098.005, T1556.006
// CONF: medium
// FP: medium
// COST: low
// REQUIRES: Okta System Log ingest (okta_system_log) -- field names are parser-dependent; ⚠ validate in tenant
// FALSE POSITIVES: new-hire onboarding, self-service device replacement
// TUNING: join to Q9 (failure-heavy sign-in) and to help-desk tickets; deprioritise users enrolled in the first 14 days of employment
// LOOKBACK: 14d
#repo=okta_system_log
| eventType=/^(user\.mfa\.factor\.(activate|reset_all|update)|device\.enrollment\.create)$/
| "outcome.result"=SUCCESS
| table([@timestamp, "actor.alternateId", eventType, "client.ipAddress", "client.userAgent.rawUserAgent", "client.geographicalContext.country", "debugContext.debugData.tunnels"])
| sort(@timestamp, order=desc)
Q9 · Okta: failure-heavy sign-in chain followed by an MFA enrollment (per user)
CONF mediumFP mediumCOST medium

Looks for: Users with five or more failed password or factor attempts and at least one MFA activation inside the search window. Obsidian saw prolonged, failure-heavy flows of about ten minutes before the actor succeeded and enrolled FastPass. FP: users who forget a password and then re-enroll a replacement phone in one session. ⚠ Field unverified — validate in tenant

// HUNT: Okta failure-heavy sign-in chain followed by MFA enrollment (run over a 1h-4h window)
// MITRE: T1566.004, T1078.004, T1098.005
// CONF: medium
// FP: medium
// COST: medium
// REQUIRES: Okta System Log ingest (okta_system_log) -- field names are parser-dependent; ⚠ validate in tenant
// FALSE POSITIVES: forgotten-password plus device-replacement in one session
// TUNING: raise the failure threshold to 8 for large tenants, and drop hits where the enrollment source IP matches the user's usual egress
// LOOKBACK: 4h
#repo=okta_system_log
| eventType=/^(core\.user_auth\.login_failed|core\.user\.factor\.attempt_fail|app\.ad\.login\.bad_password|user\.mfa\.factor\.activate)$/
| case {
    eventType=/factor\.activate$/ | kind := "enroll";
    * | kind := "fail";
  }
| groupBy(["actor.alternateId"], function=[count(as=Events), {kind="fail" | count(as=Failures)}, {kind="enroll" | count(as=Enrollments)}, min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)], limit=1000)
| Failures >= 5
| Enrollments >= 1
| sort(Failures, order=desc, limit=100)
Q10 · Okta: activity from the published UNC6661/UNC6671 source IPs
CONF mediumFP lowCOST low

Looks for: Any Okta event from the 19 residential-proxy and VPN addresses GTIG published for the January 2026 SaaS intrusions. FP: residential and VPN addresses are shared and recycle; a hit is a lead to correlate, not a verdict. ⚠ Field unverified — validate in tenant

// HUNT: Okta activity from UNC6661/UNC6671 published source IPs
// MITRE: T1078.004, T1090
// CONF: medium
// FP: low
// COST: low
// REQUIRES: Okta System Log ingest (okta_system_log) -- field names are parser-dependent; ⚠ validate in tenant
// FALSE POSITIVES: shared residential or VPN addresses reassigned to an unrelated subscriber since January 2026
// LOOKBACK: 90d
#repo=okta_system_log
| rename(field="client.ipAddress", as=SrcIP)
| in(SrcIP, values=["24.242.93.122","23.234.100.107","23.234.100.235","73.135.228.98","157.131.172.74","149.50.97.144","67.21.178.234","142.127.171.133","76.64.54.159","76.70.74.63","206.170.208.23","68.73.213.196","37.15.73.132","104.32.172.247","85.238.66.242","199.127.61.200","209.222.98.200","38.190.138.239","198.52.166.197"])
| table([@timestamp, "actor.alternateId", eventType, "outcome.result", SrcIP, "client.userAgent.rawUserAgent"])
| sort(@timestamp, order=desc)
Q11 · Microsoft 365: scripted bulk SharePoint/OneDrive download (PowerShell user agent)
CONF highFP mediumCOST medium

Looks for: Per-user, per-address counts of SharePoint and OneDrive file downloads or accesses whose user agent is PowerShell. GTIG observed the actor pulling SharePoint and OneDrive data this way. FP: sanctioned migration, backup and eDiscovery scripts that use PowerShell against SharePoint. ⚠ Field unverified — validate in tenant

// HUNT: Microsoft 365 scripted bulk SharePoint/OneDrive download (PowerShell user agent)
// MITRE: T1213.002, T1530, T1059.001
// CONF: high
// FP: medium
// COST: medium
// REQUIRES: Microsoft 365 Unified Audit Log ingest (SharePoint/OneDrive) with UserAgent captured -- field names are parser-dependent; ⚠ validate in tenant
// ⚠ validate in tenant: Workload, Operation, UserAgent, UserId, ClientIP (Unified Audit Log fields; names vary by parser)
// FALSE POSITIVES: sanctioned migration, backup and eDiscovery tooling
// TUNING: exclude service accounts and automation IPs that run these jobs; raise the file-count threshold if your tenant has heavy scripted sync
// LOOKBACK: 24h
Workload=/^(SharePoint|OneDrive)$/
| Operation=/^(FileDownloaded|FileAccessed|FileSyncDownloadedFull)$/
| UserAgent=/PowerShell/i
| groupBy([UserId, ClientIP], function=[count(as=Files), count(SourceFileName, distinct=true, as=DistinctFiles), min(@timestamp, as=FirstSeen), max(@timestamp, as=LastSeen)], limit=1000)
| Files >= 25
| sort(Files, order=desc, limit=100)
Q12 · Google Workspace: authorization of the ToogleBox Recall add-on
CONF highFP lowCOST medium

Looks for: Any record mentioning the ToogleBox Recall add-on. GTIG saw the actor authorize it to permanently delete the Okta 'Security method enrolled' notification so the victim would not see the new MFA device. FP: an administrator or user who deliberately installed the add-on; verify with the account owner. ⚠ Field unverified — validate in tenant

// HUNT: Google Workspace authorization of the ToogleBox Recall add-on
// MITRE: T1070.008, T1098.003
// CONF: high
// FP: low
// COST: medium
// REQUIRES: Google Workspace token/OAuth audit log ingest -- scope with #repo= to your Workspace repository; ⚠ validate in tenant
// FALSE POSITIVES: deliberate installation by the account owner
// LOOKBACK: 30d
@rawstring=/ToogleBox\s*Recall/i
| table([@timestamp, @rawstring])
| sort(@timestamp, order=desc)
Q13 · Salesforce: bulk-API, report-export or Data Loader activity and known actor user agents
CONF mediumFP mediumCOST low

Looks for: Salesforce event-log rows from Data Loader or from the user-agent strings reported in the Aura and earlier Snowflake campaigns. Salesforce is the actor's long-running data-theft target. FP: administrators and integration users who run Data Loader for legitimate loads and exports. ⚠ Field unverified — validate in tenant

// HUNT: Salesforce bulk-API / report-export / Data Loader activity and known actor user agents
// MITRE: T1213.006, T1567, T1530
// CONF: medium
// FP: medium
// COST: low
// REQUIRES: Salesforce Event Monitoring (EventLogFile or real-time) ingest -- field names are parser-dependent; ⚠ validate in tenant
// FALSE POSITIVES: administrators and integration users running Data Loader on purpose
// TUNING: allowlist named integration users and admin egress IPs, then alert on ROWS_PROCESSED outliers per user against a 30-day baseline
// LOOKBACK: 14d
#repo=salesforce_eventlogfile
| EVENT_TYPE=/^(BulkApi|BulkApiResultEvent|ReportExport|RestApi|ApiEvent)$/
| USER_AGENT=/(data.?loader|RapeForce|RapeFlake)/i
| table([@timestamp, USER_NAME, SOURCE_IP, EVENT_TYPE, USER_AGENT, ROWS_PROCESSED, CONNECTED_APP_NAME])
| sort(@timestamp, order=desc)
09

CrowdStrike Custom IOA Recommendations

IOA nameRule typePatternExclusionsPromotesDeployment path
ShinyHunters MeshCentral C2 domainDomain NameDomainName matches (^|\.)(azurenetfiles\.net|microsoft-entra\.net|enroll\.azuredevice\.cloud|winmanage-me\.network)$NonePromote Q1Custom IOA in Detect for 14 days, then Prevent. Add the same domains to IOC Management.
ShinyHunters staging and C2 connectionNetwork ConnectionRemote address in the nine Section 10 addresses, any portNonePromote Q2Prefer IOC Management for plain addresses; use a Custom IOA only to add TCP/3333 and 3334 context.
Masqueraded MeshAgent or SIDEEYE loaderProcess CreationImage file name matches meshagent(32|64)-(azure-ops|v2)\.exe or Ple64\.exeHash allowlist for a sanctioned MeshCentral deploymentPromote Q3Detect for 7 days, then Prevent.
Java server spawning a shellProcess Creation (Linux and Windows)Parent image matches java or javaw; image matches cmd.exe, sh, bash or dashHost-group scope to PeopleSoft and WebLogic hosts; allowlist known admin scripts after a 14-day baselinePromote Q5Detect in the PeopleSoft host group; move to Prevent after tuning.
Linux MeshCentral and sshpass toolingProcess Creation (Linux)Command line matches meshctrl\.js\s+RunCommand or _fanout\.sh or README-IF-YOU-SEE-THIS-YOUVE-BEEN-HACKEDNone for meshctrl and fanout; scope sshpass and zstd to service accountsPromote Q4 (high-confidence terms only)Detect only; keep sshpass and zstd in the hunt query.

Q7 to Q13 are identity and SaaS detections. Deploy them as scheduled searches in Next-Gen SIEM rather than as endpoint IOAs.

Alert packages

Ready-to-paste alert text and triage steps for the three highest-fidelity detections.

Q3: Masqueraded MeshCentral agent executed

Subject: 🚨 HUNT ALERT 🚨 — Masqueraded MeshCentral Agent Executed (Possible Remote Access / C2)

A binary named like an Azure service, or carrying a published ShinyHunters hash, ran on this host. The actor uses MeshCentral agents to keep interactive access and to push scripts after exploiting PeopleSoft. Check whether Falcon blocked it or it ran, then look at the parent process and the install path. Any hit on a server in the PeopleSoft tier is a likely intrusion, not a lookalike.

Investigation checklist

  1. Blocked or executed? ProcessBlocked means Falcon stopped it; ProcessRollup2 means it ran.
  2. Read SHA256HashData and compare to the Section 10 list. A match is confirmed.
  3. Read ParentBaseFileName. A java, sh or bash parent on a PeopleSoft host points to web-shell activity.
  4. Read the install path in ImageFileName. Under PSEMHUB.war or /tmp is hostile.
  5. Pivot to DnsRequest and NetworkConnectIP4 on the same host for the C2 domains and TCP/3333 to 3334.
  6. Check frequency: how many hosts ran the same hash.
  7. Look for follow-on execution: shells, sshpass, zstd, tar, rsync.
  8. Isolate the host if execution is confirmed and the path or parent is hostile.

Pivot queries

// >> YOU NEED:  ComputerName   (from the alert)
// >> FILL IN:   ComputerName="REPLACE_WITH_HOSTNAME"
// Host-scoped: what this host resolved and connected to
#event_simpleName=/DnsRequest|NetworkConnectIP4/
| ComputerName="REPLACE_WITH_HOSTNAME"
| table([@timestamp, DomainName, RemoteAddressIP4, RemotePort, ContextBaseFileName])
| sort(@timestamp, order=asc)
// >> YOU NEED:  SHA256HashData   (from the alert)
// >> FILL IN:   SHA256HashData="REPLACE_WITH_HASH"
// Environment-wide: every host that ran the same binary
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| SHA256HashData="REPLACE_WITH_HASH"
| groupBy([ComputerName], function=[count(as=Runs), min(@timestamp, as=FirstSeen)], limit=500)
| sort(FirstSeen, order=asc, limit=100)
Q5: Java process spawned a shell on a PeopleSoft host

Subject: 🚨 HUNT ALERT 🚨 — Java Process Spawned a Shell (Possible PeopleSoft CVE-2026-35273 Exploitation)

A java process launched a shell. GTIG documents this as the host-side sign of both fileless exploitation of PeopleSoft CVE-2026-35273 and the x.jsp and u.jsp web shells. The alert fires whether or not the exploit left a file, so a clean file scan does not clear the host. Read the shell's command line first: hostname, whoami, uname, id, base64 -d, curl, /dev/tcp, tasklist and start /b are the documented commands.

Investigation checklist

  1. Read CommandLine on the shell event. Discovery commands or an encoded payload are hostile.
  2. Read UserName. A quarter of the actor's commands ran as root or SYSTEM.
  3. Check the web-server access log for POST to /PSEMHUB/hub or /%50SEMHUB/hub at the same time.
  4. Search PSEMHUB.war and PORTAL.war for unexpected .jsp, .jspx and .exe files on every WebLogic node.
  5. Pivot to NetworkConnectIP4 from the same host for the Section 10 addresses.
  6. Look for sshpass, zstd, tar and rsync started by the service account.
  7. Preserve the web directory and logs before cleanup.
  8. Isolate the host and rotate every credential in psappsrv.cfg if any step confirms compromise.

Pivot queries

// >> YOU NEED:  ComputerName   (from the alert)
// >> FILL IN:   ComputerName="REPLACE_WITH_HOSTNAME"
// Host-scoped: everything the shell ran
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ComputerName="REPLACE_WITH_HOSTNAME"
| ParentBaseFileName=/^(sh|bash|dash|cmd\.exe|java|javaw)(\.exe)?$/i
| table([@timestamp, UserName, ParentBaseFileName, FileName, CommandLine])
| sort(@timestamp, order=asc)
// Environment-wide: other hosts where a Java process started a shell in the window
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(java|javaw)(\.exe)?$/i
| FileName=/^(cmd\.exe|sh|bash|dash)$/i
| groupBy([ComputerName], function=[count(as=Spawns), min(@timestamp, as=FirstSeen)], limit=500)
| sort(Spawns, order=desc, limit=100)
Q7: Okta event from an emulated Android client

Subject: 🚨 HUNT ALERT 🚨 — Okta Activity From an Emulated Android Device (Possible MFA Persistence After Vishing)

An Okta event came from a Genymobile emulator user agent. In the incidents Google and Obsidian describe, the actor enrolled FastPass from an emulator after a failure-heavy sign-in. Treat the user as compromised until proven otherwise, and check what factors were added and what the session touched afterward. Contact the user on a known number, never on a number the caller supplied.

Investigation checklist

  1. Read actor.alternateId and eventType. Is this an enrollment or a normal sign-in?
  2. List every MFA factor event for the user in the last 24 hours (pivot below).
  3. Read client.ipAddress and compare to the Section 10 watchlist and to the user's normal egress.
  4. Check the sign-in chain before the enrollment for repeated failures.
  5. Look at the downstream SaaS activity: SharePoint downloads, Salesforce exports, Slack and Drive downloads.
  6. Check Google Workspace for a ToogleBox Recall authorization and deleted security emails.
  7. Revoke sessions and tokens, remove the unknown factors, and reset the password through high-assurance verification.
  8. Escalate if any bulk download or export is confirmed.

Pivot queries

// >> YOU NEED:  actor.alternateId   (from the alert)
// >> FILL IN:   "actor.alternateId"="REPLACE_WITH_USER"
// Host-scoped equivalent: the user's full Okta timeline
#repo=okta_system_log
| "actor.alternateId"="REPLACE_WITH_USER"
| table([@timestamp, eventType, "outcome.result", "client.ipAddress", "client.userAgent.rawUserAgent"])
| sort(@timestamp, order=asc)
// >> YOU NEED:  client.ipAddress   (from the alert)
// >> FILL IN:   SrcIP="REPLACE_WITH_IP"
// Environment-wide: every user seen from the same address
#repo=okta_system_log
| rename(field="client.ipAddress", as=SrcIP)
| SrcIP="REPLACE_WITH_IP"
| groupBy(["actor.alternateId"], function=[count(as=Events), min(@timestamp, as=FirstSeen)], limit=500)
| sort(Events, order=desc, limit=100)
10

Machine-Readable IOC Appendix

The IdP source addresses are residential-proxy and VPN endpoints from January 2026. Mandiant advises hunting and correlating on them, not broad blocking. Use the CSV only for the nine infrastructure addresses, four domains and six hashes.

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
domain,azurenetfiles.net,detect,high,2027-04-16,ShinyHunters MeshCentral C2 or staging domain,campaign:ShinyHunters
domain,microsoft-entra.net,detect,high,2027-04-16,ShinyHunters MeshCentral C2 or staging domain,campaign:ShinyHunters
domain,enroll.azuredevice.cloud,detect,high,2027-04-16,ShinyHunters MeshCentral C2 or staging domain,campaign:ShinyHunters
domain,winmanage-me.network,detect,high,2027-04-16,ShinyHunters MeshCentral C2 or staging domain,campaign:ShinyHunters
domain,REPLACE_WITH_ORG_SSO_LOOKALIKE,detect,high,2027-04-16,Your own brand lookalike found via Q1 or N8,campaign:ShinyHunters
ipv4,142.11.200.186,detect,high,2027-01-16,Staging host,campaign:ShinyHunters
ipv4,142.11.200.187,detect,high,2027-01-16,Staging host,campaign:ShinyHunters
ipv4,142.11.200.188,detect,high,2027-01-16,Staging host,campaign:ShinyHunters
ipv4,142.11.200.189,detect,high,2027-01-16,Staging host,campaign:ShinyHunters
ipv4,142.11.200.190,detect,high,2027-01-16,Staging host,campaign:ShinyHunters
ipv4,176.120.22.24,detect,high,2027-01-16,Clearnet mirror of the ShinyHunters data leak site,campaign:ShinyHunters
ipv4,5.199.162.157,detect,high,2027-01-16,Attack controller, scanner and HTTP callback receiver,campaign:ShinyHunters
ipv4,104.219.234.138,detect,high,2027-01-16,Exfiltration staging and remote-management host,campaign:ShinyHunters
ipv4,162.219.30.165,detect,high,2027-01-16,C2 for SIDEEYE backdoor,campaign:ShinyHunters
sha256,f02a924c9ff92a8780ce812511341182c6b509d45bc59f3f7b522e37225d24fc,prevent,critical,2027-04-16,meshagent64-azure-ops.exe,campaign:ShinyHunters
sha256,d83fdb9e53c5ff03c4cb0451ea1bebd79b53f29eadc1e2fa394c7af13a86ce2f,prevent,critical,2027-04-16,meshagent64-v2.exe,campaign:ShinyHunters
sha256,c7e9332731b06644fc73e0046a2a89eaa59b09f54250e9bd622467187351711f,prevent,critical,2027-04-16,meshagent32-azure-ops.exe,campaign:ShinyHunters
sha256,68257a6f9ff196179ec03624e849927f26599eb180a7c82e14ef5bc4e93bc309,prevent,critical,2027-04-16,meshagent,campaign:ShinyHunters
sha256,3ba215692665513abfffd4e815c5c45f2d41e5dcc4283a2a3b740930c5c417c3,prevent,critical,2027-04-16,Ple64.exe,campaign:ShinyHunters
sha256,2bee941fb40519d0d1ec52bd79a8f63fc65aac6455c8f2d6b668e3360dfdb5d7,detect,high,2027-04-16,u.jsp,campaign:ShinyHunters
# Not imported: hashes GTIG says vary per deployment (hunt by name and path)
# x.jsp 48b4a0827da7bbfce9fb52464f8a659dea7a035189c52c506c0bfb4b1c3fe494
# tunnel.jsp 419c571ee38b7e7266d130c4b6bbc4dd0ef44d6e5f3bc02cc2cf73b762f07c86
# tunnel.jspx ba14419beb2ec0bb94cab6298c14d7fb3e1d819366fe378290c0c2a4d97f7e07
# .bash_history (attacker command history) 2ab684d93c1553fad87041b4dea97188a97e78589deee2a7bacff905564f3a35
# Do not import the IdP source IPs below: they are sources of sign-ins, not destinations of endpoint connections
IdP / SaaS source-IP watchlisthunt only
# GTIG January 2026 SaaS-intrusion source IPs. Residential proxy and VPN. HUNT ONLY, do not block.
# Pattern note: Mullvad, Oxylabs, NetNut, 9Proxy, Infatica and nsocks networks appear in these intrusions.

24.242.93.122  AS11427  UNC6661
23.234.100.107  AS11878  UNC6661
23.234.100.235  AS11878  UNC6661
73.135.228.98  AS33657  UNC6661
157.131.172.74  AS46375  UNC6661
149.50.97.144  AS201814  UNC6661
67.21.178.234  AS400595  UNC6661
142.127.171.133  AS577  UNC6671
76.64.54.159  AS577  UNC6671
76.70.74.63  AS577  UNC6671
206.170.208.23  AS7018  UNC6671
68.73.213.196  AS7018  UNC6671
37.15.73.132  AS12479  UNC6671
104.32.172.247  AS20001  UNC6671
85.238.66.242  AS20845  UNC6671
199.127.61.200  AS23470  UNC6671
209.222.98.200  AS23470  UNC6671
38.190.138.239  AS27924  UNC6671
198.52.166.197  AS395965  UNC6671

# CQL list for in():
"24.242.93.122","23.234.100.107","23.234.100.235","73.135.228.98","157.131.172.74","149.50.97.144","67.21.178.234","142.127.171.133","76.64.54.159","76.70.74.63","206.170.208.23","68.73.213.196","37.15.73.132","104.32.172.247","85.238.66.242","199.127.61.200","209.222.98.200","38.190.138.239","198.52.166.197"
Behavioral Signaturessearch strings
OKTA SYSTEM LOG
  eventType: user.mfa.factor.activate | user.mfa.factor.reset_all | user.mfa.factor.update | device.enrollment.create
  failure chain: core.user_auth.login_failed | core.user.factor.attempt_fail | app.ad.login.bad_password  (5+ then success)
  user agent: com.okta.android.auth/... Android/... Genymobile/Phone   regex: Genymobile|Geny\s?Mobile
  device display name: Passkey   (FastPass / Okta Verify enrollment)
  sign-in flow: about 10 minutes, repeated failures, then success, then enrollment
MICROSOFT 365
  SharePoint/OneDrive FileDownloaded or FileAccessed with UserAgent containing WindowsPowerShell
  threshold used by Mandiant: 50+ distinct files and 3+ extensions in 5 minutes per session
  SearchQueryPerformed regex: \bpoc\b|proposal|confidential|internal|salesforce|vpn
  Exchange SoftDelete|HardDelete|MoveToDeletedItems where subject matches new MFA / factor / method / device / security enrollment wording
GOOGLE WORKSPACE
  OAuth authorize event for app name ToogleBox Recall (Gmail add-on and Apps Script scopes)
SALESFORCE
  Data Loader activity; BulkApiResultEvent and ReportEventStream volume outliers
  user agents reported for related campaigns: RapeForce, RapeFlake
PEOPLESOFT / WEBLOGIC
  POST /PSEMHUB/hub  |  POST /%50SEMHUB/hub  |  /PSIGW/HttpListeningConnector with loopback addresses in parameters
  5 to 15 POSTs with a serialized Java object to one server = target verification
  new .jsp / .jspx / .exe under PSEMHUB.war or PORTAL.war; files under PSEMHUB.war/envmetadata/transactions/
  XML files recently changed under envmetadata/data/environment/ (XMLDecoder on restart)
  java or javaw parent starting cmd.exe, sh, bash with base64 -d, curl, /dev/tcp, tasklist, start /b
  outbound TCP/445 from PeopleSoft hosts to the internet
LINUX STAGING AND MOVEMENT
  node meshctrl.js RunCommand --id <agent> --run 'bash /tmp/<abbrev>_fanout.sh'
  sshpass -p ... ssh -o StrictHostKeyChecking=no
  pv ... | zstd -3 -T0 -o exfil.tar.zst
  npm list global authenticode ; MeshCentral 1.1.59 ; acme-client npm package
  /tmp/meshagent  /tmp/meshagent.msh  /tmp/meshagent.db
  marker file README-IF-YOU-SEE-THIS-YOUVE-BEEN-HACKED.TXT in WebLogic and Process Scheduler directories
EXTORTION
  72-hour Bitcoin demand; Tox negotiation; Limewire-hosted samples; Tor leak site named SHINYHUNTERS
  mailboxes: shinycorp@tutanota[.]com, shinygroup@onionmail[.]com, shinycorp@tuta[.]com, shinygroup@tuta[.]com
  harassing texts and calls to staff and family; DDoS; swatting (FBI PSA)
Named Malware / Toolingreference
MeshCentral server 1.1.59 and MeshAgent (Windows, Linux) - legitimate RMM abused for C2
meshctrl.js (MeshCentral CLI) driven by node
acme-client (npm) for Let's Encrypt certificates on the C2 name
sshpass, ssh, pv, zstd - spray, copy, archive
x.jsp (hex-encoded command web shell), u.jsp and u2.jsp (chunked upload and exec)
Neo-reGeorg (tunnel.jsp, tunnel.jspx) - SOCKS over HTTP
SIDEEYE backdoor delivered by trojanized installer Ple64.exe (EV-signed; GTIG requested revocation)
ToogleBox Recall - Google Workspace add-on that permanently deletes email
Genymobile / Genymotion Android emulator - used to enroll FastPass
Bland AI - voice agent used to script vishing calls (MITRE, source 1)
ConnectWise and other RMM tools for initial access (MITRE)
TruffleHog - repository secret scanner (Huntress, source 10)
S3 Browser, WinSCP, AWS CLI - cloud storage discovery and deletion (MITRE)
Salesforce Data Loader; modified AuraInspector (Huntress, source 10)
Limewire (proof samples), Tox (negotiation), Tor (leak site)
Patch / MFA / SaaS Audit Checklistposture
[ ] Oracle Security Alert for CVE-2026-35273 (issued 10 Jun 2026) applied on every PeopleSoft web tier
[ ] EMHub service disabled, or PSEMHUB application removed
[ ] /PSEMHUB and /PSIGW/HttpListeningConnector blocked on the NORMALIZED, case-insensitive path (not a literal string match)
[ ] Credentials readable by the PeopleSoft service account rotated if any exposure is suspected
[ ] Outbound TCP/445 from server networks to the internet denied
[ ] Phishing-resistant MFA (FastPass, FIDO2 passkeys) enforced for all admins, then all users
[ ] SMS, voice, email and push-only factors removed where phishing-resistant options exist
[ ] MFA enrollment allowed only from managed devices or trusted networks, with re-authentication
[ ] Help desk requires live video ID check, manager approval and callback to a number on file
[ ] Okta ThreatInsight on; super admin restricted to corporate network zones
[ ] Entra: Conditional Access covers Register security information and Global Administrator sign-in
[ ] Google Workspace third-party API access restricted; alert on ToogleBox Recall
[ ] Salesforce Event Monitoring on; Data Loader and API access limited to named profiles
[ ] Microsoft Purview Audit on and PowerShell user agents captured for SharePoint and OneDrive
[ ] Integration tokens inventoried, scoped, IP-restricted and rotated
11

Detection Validation Gates

GateCheckPass condition
Telemetry readyConfirm each source feeds the SIEM: Process creation with command line, path and parent (CrowdStrike: ProcessRollup2. SentinelOne: Process Creation. Defender: DeviceProcessEvents); Outbound network connection (CrowdStrike: NetworkConnectIP4. SentinelOne: IP Connect. Defender: DeviceNetworkEvents); DNS lookup with the requesting process (CrowdStrike: DnsRequest. SentinelOne: DNS Resolved. Defender: DeviceEvents DnsQueryResponse); and the identity and SaaS logs in Section 5.A sample event from each source is searchable in the last hour.
Benign baselineRun Q4, Q5, Q6, Q8, Q11 and Q13 over 14 days before alerting.Fewer than 10 hits per week per query, each explained by a named job, user or integration.
Positive testsQ1: resolve a listed domain from a lab host. Q3: run a harmless binary renamed to meshagent64-v2.exe on a lab host. Q5: from a lab Java program, start a shell that runs id. Q7 and Q12: replay a synthetic log line into a test repository.Every test fires its query within the ingest delay. Never test with live malware or against production accounts.
PromotionPromote Q1, Q2, Q3 first (high confidence, low FP), then Q5 after tuning, then Q7.Detect for 14 days with no unexplained hits, then enable prevention where the platform supports it.
12

Hardening — Tiered & Deployable

Immediate (this week)
  • Patch CVE-2026-35273 and disable EMHub. Apply Oracle's Security Alert, then disable the Environment Management Hub or remove PSEMHUB. WAF rules alone were bypassed with /%50SEMHUB/. Framework: MITRE M1051, M1042; Oracle Security Alert CVE-2026-35273; Mandiant (sources 3, 4). Verify: Playbook step 1.2.
  • Block the EMHub and Integration Gateway paths on the normalized path. Deny /PSEMHUB and /PSIGW/HttpListeningConnector, case-insensitively, at the reverse proxy. Non-breaking for PIA users per Mandiant. Framework: MITRE M1030, M1050; Mandiant (source 4). Verify: Playbook step 1.1.
  • Stop MFA enrollment from untrusted places. Require a managed device or trusted network, plus re-authentication, to register or change a factor. Framework: MITRE M1032, M1036; Mandiant hardening guide (source 5); Microsoft Conditional Access user action Register security information. Verify: Playbook 4 and 5.
  • Verify callers by video and callback. Help desk requires a live video call with a government ID, manager approval and a callback to a number on file. Reject answers based on employee ID, SSN or manager name. Framework: Mandiant (source 5). ⚠ best-practice, no formal benchmark.
  • Turn on identity-layer logging. Ingest Okta authentication and MFA-lifecycle events, Entra audit logs, Microsoft Purview Audit with user agent, Google Workspace OAuth and Gmail logs, and Salesforce Event Monitoring. Framework: MITRE M1047; Mandiant (source 5).
  • Block the known infrastructure. Import the Section 10 CSV into Falcon IOC Management and DNS filtering. Framework: MITRE M1031, M1037.
Near term (1 to 4 weeks, pilot first)
  • Enforce phishing-resistant MFA. Okta FastPass or FIDO2 passkeys for admins first, then all users. Remove SMS, voice, email and push-only factors where an alternative exists. Okta states FastPass and passkeys are not defeated by these kits. Framework: MITRE M1032; NIST SP 800-63B AAL3 guidance; Okta (source 6). Verify: Playbook 4, 5.
  • Restrict sign-in sources. Okta network zones and ThreatInsight, Entra named locations, Workspace context-aware access. Limit super-admin access to the corporate network. Framework: MITRE M1036; Mandiant (source 5).
  • Lock down third-party app consent. Restrict who can authorize OAuth apps and add-ons in Google Workspace and Entra; alert on ToogleBox Recall. Framework: MITRE M1047, M1026; Mandiant (source 5).
  • Constrain Salesforce export paths. Remove API Enabled and bulk-export rights from profiles that do not need them; set Login IP ranges; secure Experience Cloud guest profiles. Framework: Mandiant Salesforce hardening guidance (source 5). ⚠ best-practice, no formal benchmark.
  • Harden SSH on application servers. Key-only authentication, no root login, low retry count, so a credential-spray script has nothing to guess. Framework: MITRE M1032, M1027; CIS Distribution Independent Linux Benchmark, SSH server configuration section. Verify: Playbook 2.
  • Deny outbound SMB from server networks. Framework: MITRE M1037; Mandiant (source 3). Verify: Playbook 3.
  • Audit the PeopleSoft hosts. auditd rules for sshpass, zstd, and writes under PSEMHUB.war; file-integrity monitoring on the web directories. Framework: MITRE M1047, M1022; CIS Linux auditd guidance. Verify: Playbook 2.
Strategic (1 to 3 months)
  • Replace long-lived credentials with workload identity. Move static keys and tokens to federated, short-lived identities; scope each credential to one resource; restrict source IPs. Framework: MITRE M1026, M1018; Mandiant (source 5).
  • Inventory and govern integrations. Every connected app and API token has an owner, narrow scopes, an IP allowlist and a rotation date, since the actor reuses stolen integration tokens. Framework: MITRE M1018, M1026; Sekoia (source 8).
  • Just-in-time admin. Remove standing Global Administrator and Okta super-admin; require approval and justification per activation. Framework: MITRE M1026; Mandiant (source 5).
  • Put PeopleSoft administrative surfaces behind a path allowlist. Publish only the PIA paths users need and require VPN for everything else. Framework: MITRE M1030, M1035; Mandiant (sources 3, 4).
  • Secret scanning with push protection. Block commits that contain tokens and scan history, because the actor mines repositories for credentials. Framework: MITRE M1013; Mandiant (source 5).

Verify after deployment. Over 14 days, confirm that Q5 and Q8 return only explained hits, that /%50SEMHUB/hub returns 403 from the proxy, and that no MFA factor was added from an untrusted network.

13

Deployable Playbooks

Each step carries its prerequisites, reboot requirement and rollback. Replace every REPLACE_WITH value before use, and test in non-production first.

Playbook 1 · PeopleSoft exposure reduction (T1190, T1505.003; M1051, M1042, M1030)

Step 1.1 · Deny the EMHub and Integration Gateway paths at the reverse proxy

What it does: Blocks /PSEMHUB and /PSIGW/HttpListeningConnector on the normalized, case-insensitive path, so the percent-encoded variant /%50SEMHUB/ is blocked too.

Prerequisites: A reverse proxy in front of the PIA web tier; confirm EMHub is not needed for your patching workflow (Mandiant calls the block non-breaking for PIA users).

Reboot required: No. Reload the proxy; no OS reboot.

Configuration

# nginx: add inside the server block that fronts PIA
location ~* ^/psemhub(/|$)                 { return 403; }
location ~* ^/psigw/httplisteningconnector { return 403; }

# Apache httpd equivalent
<LocationMatch "(?i)^/psemhub(/|$)">
    Require all denied
</LocationMatch>
<LocationMatch "(?i)^/psigw/httplisteningconnector">
    Require all denied
</LocationMatch>

# nginx: validate and reload
nginx -t && nginx -s reload

Verify

for p in /PSEMHUB/hub /%50SEMHUB/hub /psemhub/hub /PSIGW/HttpListeningConnector; do
  printf '%s -> ' "$p"
  curl -sk -o /dev/null -w '%{http_code}\n' "https://REPLACE_WITH_PIA_HOST$p"
done
# Expect 403 for all four lines

Rollback

# Remove the location blocks above, then reload
nginx -t && nginx -s reload
# Apache: remove the LocationMatch blocks, then
apachectl configtest && apachectl graceful

Step 1.2 · Apply Oracle's Security Alert and disable EMHub

What it does: Fixes CVE-2026-35273 at the source. Path blocking alone was already bypassed.

Prerequisites: Change window; backup or snapshot of PS_CFG_HOME and the web tier; patch tested in non-production; Oracle Security Alert for CVE-2026-35273.

Reboot required: WebLogic domain restart; no OS reboot unless Oracle's alert says otherwise.

Configuration

# 1) Follow Oracle's Security Alert for CVE-2026-35273 (issued 10 Jun 2026).
# 2) Multi-server: disable the Environment Management Hub service.
#    Single-server: remove the PSEMHUB application.
# 3) Restart the WebLogic domain, then repeat the Step 1.1 verification.

Verify

# After restart, the EMHub servlet must not answer
curl -sk -o /dev/null -w '%{http_code}\n' "https://REPLACE_WITH_PIA_HOST/PSEMHUB/hub"
# Expect 403 or 404. Then confirm the applied patch level in the PeopleTools patch inventory.

Rollback

# Restore the pre-change snapshot of PS_CFG_HOME and the web tier.
# Oracle security patches are not individually uninstallable, so keep the snapshot until the change is accepted.

Playbook 2 · Linux application servers (T1110.003, T1021.004, T1560.002; M1032, M1027, M1047)

Step 2.1 · Key-only SSH with a low retry count

What it does: Gives the sshpass credential-spray script nothing to guess.

Prerequisites: Working key-based access for every admin and for break-glass. Keep a second session open. OpenSSH 8.2 or later reading /etc/ssh/sshd_config.d.

Reboot required: No. Reload sshd.

Configuration

# /etc/ssh/sshd_config.d/99-huntpack-hardening.conf
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
MaxAuthTries 3

# apply
sshd -t && systemctl reload sshd

Verify

sshd -T | grep -Ei '^(passwordauthentication|kbdinteractiveauthentication|permitrootlogin|maxauthtries) '
# Expect: no, no, no, 3

Rollback

rm /etc/ssh/sshd_config.d/99-huntpack-hardening.conf
sshd -t && systemctl reload sshd

Step 2.2 · auditd rules for the attacker's tools and the web directory

What it does: Records sshpass and zstd execution and any write under PSEMHUB.war, giving Q4 and Q5 a second source.

Prerequisites: auditd installed and running; the rules file is not in immutable mode (-e 2).

Reboot required: No, unless auditd is set immutable, in which case a reboot loads the rules.

Configuration

# /etc/audit/rules.d/99-huntpack-shinyhunters.rules
-a always,exit -F arch=b64 -S execve -F exe=/usr/bin/sshpass -k sshpass_exec
-a always,exit -F arch=b64 -S execve -F exe=/usr/bin/zstd -k zstd_exec
-w /u01/app/psoft/ps_config_homes/csprd/webserv -p wa -k psemhub_write   # adjust to your PS_CFG_HOME

sudo augenrules --load

Verify

sudo auditctl -l | grep -E 'sshpass_exec|zstd_exec|psemhub_write'
sudo ausearch -k sshpass_exec -ts today

Rollback

sudo rm /etc/audit/rules.d/99-huntpack-shinyhunters.rules
sudo augenrules --load

Playbook 3 · Deny outbound SMB from servers (T1187; M1037)

Step 3.1 · Drop outbound TCP/445 to public addresses

What it does: Stops NetNTLM coercion and SMB exfiltration from the PeopleSoft tier. Do the same at the perimeter firewall for server networks.

Prerequisites: nftables active; no server uses SMB to a public service such as Azure Files.

Reboot required: No.

Configuration

sudo nft add table inet huntpack
sudo nft add chain inet huntpack out '{ type filter hook output priority 0; policy accept; }'
sudo nft add rule inet huntpack out ip daddr != { 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 } tcp dport 445 counter drop

Verify

sudo nft list table inet huntpack
# The counter increments on blocked attempts; Q6 should go quiet

Rollback

sudo nft delete table inet huntpack

Playbook 4 · Entra ID Conditional Access (T1098.005, T1556.006; M1032, M1036)

Step 4.1 · Block security-info registration from untrusted locations (report-only first)

What it does: Prevents an attacker from adding an MFA method from their own network after stealing a password and code.

Prerequisites: Microsoft Graph PowerShell with Policy.ReadWrite.ConditionalAccess; named locations configured with your trusted networks marked trusted; a break-glass group.

Reboot required: No.

Configuration

Connect-MgGraph -Scopes 'Policy.ReadWrite.ConditionalAccess','Policy.Read.All'
$params = @{
  displayName = 'HuntPack - Block security info registration from untrusted locations'
  state       = 'enabledForReportingButNotEnforced'
  conditions  = @{
    users        = @{ includeUsers = @('All'); excludeGroups = @('REPLACE_WITH_BREAKGLASS_GROUP_ID') }
    applications = @{ includeUserActions = @('urn:user:registersecurityinfo') }
    locations    = @{ includeLocations = @('All'); excludeLocations = @('AllTrusted') }
  }
  grantControls = @{ operator = 'OR'; builtInControls = @('block') }
}
New-MgIdentityConditionalAccessPolicy -BodyParameter $params

Verify

Get-MgIdentityConditionalAccessPolicy -Filter "displayName eq 'HuntPack - Block security info registration from untrusted locations'" | Select-Object DisplayName, State
# Review the report-only results in Entra sign-in logs for two weeks, then set state to 'enabled'

Rollback

$id = (Get-MgIdentityConditionalAccessPolicy -Filter "displayName eq 'HuntPack - Block security info registration from untrusted locations'").Id
Remove-MgIdentityConditionalAccessPolicy -ConditionalAccessPolicyId $id

Step 4.2 · Require phishing-resistant authentication for Global Administrators (report-only first)

What it does: Applies the built-in phishing-resistant authentication strength to the most valuable role.

Prerequisites: Admins registered with FIDO2 keys or passkeys first, or they will be locked out; a break-glass group.

Reboot required: No.

Configuration

$params = @{
  displayName = 'HuntPack - Global Administrators require phishing-resistant MFA'
  state       = 'enabledForReportingButNotEnforced'
  conditions  = @{
    users        = @{ includeRoles = @('62e90394-69f5-4237-9190-012177145e10'); excludeGroups = @('REPLACE_WITH_BREAKGLASS_GROUP_ID') }
    applications = @{ includeApplications = @('All') }
  }
  grantControls = @{ operator = 'OR'; authenticationStrength = @{ id = '00000000-0000-0000-0000-000000000004' } }
}
New-MgIdentityConditionalAccessPolicy -BodyParameter $params

Verify

Get-MgIdentityConditionalAccessPolicy -Filter "displayName eq 'HuntPack - Global Administrators require phishing-resistant MFA'" | Select-Object DisplayName, State

Rollback

$id = (Get-MgIdentityConditionalAccessPolicy -Filter "displayName eq 'HuntPack - Global Administrators require phishing-resistant MFA'").Id
Remove-MgIdentityConditionalAccessPolicy -ConditionalAccessPolicyId $id

Playbook 5 · Okta (T1098.005, T1078.004; M1032, M1036)

Step 5.1 · Tighten enrollment, network zones and admin access in the Admin Console

What it does: Limits where factors can be enrolled, blocks anonymizer networks, and restricts the admin console.

Prerequisites: Okta super administrator; a list of corporate egress ranges; FastPass or FIDO2 enrolled for admins; menu names can vary by release and SKU.

Reboot required: No.

Configuration

1. Security > General: set Okta ThreatInsight to log and enforce at the threat level you accept.
2. Security > Networks: add a zone for corporate egress ranges, and a dynamic zone for anonymizers and proxies if your SKU offers it; mark the anonymizer zone as blocked.
3. Security > Authenticators > Enrollment: edit the enrollment policy so Okta Verify and FastPass enrollment requires re-authentication and runs only from the corporate zone.
4. Security > Authentication policies: for the Okta Admin Console app, add a rule that requires a phishing-resistant authenticator and the corporate zone.
5. Record the previous value of each setting before saving.

Verify

System Log search, last 24 hours:
eventType eq "user.mfa.factor.activate"
# Every hit should come from the corporate zone and carry a managed device

Rollback

Reverse each console change using the previous values recorded in step 5.
Blocking a zone can lock out remote staff; keep a super-admin session open while testing.

Playbook 6 · Salesforce and Google Workspace (T1213, T1567, T1070.008; M1047, M1026)

Step 6.1 · Limit Salesforce export paths and keep event logs

What it does: Reduces who can bulk-export and makes bulk activity visible.

Prerequisites: Salesforce admin; Event Monitoring licence; a list of integration users that need API access.

Reboot required: No.

Configuration

1. Setup > Event Monitoring Settings: enable the event types you ingest (login, API, bulk-result, report export).
2. Profiles and permission sets: remove API Enabled and Export Reports from profiles that do not need them.
3. Profiles: set Login IP Ranges for integration and admin profiles.
4. Digital Experiences: review each guest user profile and remove object and API access it does not need.

Verify

SELECT Profile.Name, COUNT(Id) FROM User WHERE IsActive = true AND Profile.PermissionsApiEnabled = true GROUP BY Profile.Name
# Only profiles with a business need should appear

Rollback

Restore the previous profile permissions from the change record. Removing API Enabled can break integrations, so test with one profile first.

Step 6.2 · Restrict third-party app access in Google Workspace

What it does: Stops users authorizing add-ons such as ToogleBox Recall, which can permanently delete mail.

Prerequisites: Google Workspace super administrator.

Reboot required: No.

Configuration

Admin console > Security > Access and data control > API controls > Manage third-party app access: set unconfigured third-party apps to restricted for Gmail scopes, and allowlist only approved apps.
Admin console > Reporting > Audit and investigation > OAuth log events: add an alert on app name containing ToogleBox.

Verify

Audit and investigation > OAuth log events, filter App name contains ToogleBox. Expect no authorization events.

Rollback

Set the access setting back to its previous value. Restricting apps can break approved add-ons, so allowlist them first.
14

Containment Runbook

PhaseActionsOwnerEvidence
Isolate (identity, SaaS and PeopleSoft)Revoke all sessions, tokens and OAuth grants for affected users in the IdP and every SaaS app. Disable compromised accounts. Pause MFA registration and self-service password reset. Limit VPN and VDI to compliant devices. Tell the help desk to move to manual verification. Network-contain affected PeopleSoft hosts. Block /PSEMHUB on the normalized path. Block the Section 10 domains and addresses.IR lead; IdP admin; server teamIdP and SaaS audit exports; Falcon containment status; proxy configuration
PreserveSnapshot every WebLogic node behind the load balancer. Copy PSEMHUB.war, PORTAL.war, access logs, /tmp and shell history. Export SaaS audit logs before retention expires. Record every MFA factor and OAuth grant found.IR lead; forensicsDisk images; log exports; hash list
EradicateRemove web shells, Ple64.exe, Neo-reGeorg pages and MeshAgent. Remove attacker MFA factors and the ToogleBox Recall authorization. Rotate every credential readable from the PeopleSoft tier, including psappsrv.cfg database strings, Integration Broker and cloud keys. Revoke and reissue integration tokens. Apply the Oracle Security Alert.Server team; IdP admin; app ownersRotation ticket IDs; patch inventory
RecoverRe-enable MFA enrollment only with phishing-resistant methods and re-authentication. Restore access in stages. Monitor with Q1 to Q13 for 30 days. Prepare for extortion contact: verify demands through a known channel and do not send payment or respond to demands, as the FBI advises. Report to the FBI Internet Crime Complaint Center and brief legal and communications.IR lead; legal; communicationsMonitoring dashboard; IC3 report reference

Containment order follows Mandiant's guidance (source 5): because these intrusions use valid credentials rather than malware, revoking sessions and restricting identity operations comes before host cleanup.

15

Detection Coverage Map

TechniqueBehaviorCQLIOACoverage
T1583.001Lookalike C2 and SSO domainsQ1Q1Good
T1566.004Voice phishing call and lure page on a personal phoneGAP
T1078.004, T1098.005, T1556.006Attacker-enrolled MFA after a failure-heavy sign-inQ7, Q8, Q9, Q10Good
T1190CVE-2026-35273 exploitation attemptsQ5Q5Partial
T1505.003JSP web shell on disk (file creation)Partial
T1219, T1036.005MeshCentral agents and lookalike namesQ1, Q2, Q3Q1, Q2, Q3Good
T1059.007, T1110.003, T1560.002meshctrl, sshpass spray, zstd stagingQ4Q4Partial
T1187Outbound SMB coercionQ6Partial
T1213.002, T1530Scripted SharePoint and OneDrive theftQ11Good
T1213.006, T1567Salesforce bulk export and Data LoaderQ13Partial
T1070.008ToogleBox Recall and mailbox cleanupQ12Good
T1528, T1550.001Stolen integration-token reuseQ13Partial
T1657Extortion contactGAP

Gaps. The phone call and the lure page on a personal phone are outside endpoint telemetry; only help-desk process and user training cover them. File creation of JSP web shells has no Falcon query in this pack, so N6 and the host auditd rule cover it. Extortion contact is covered by mail-gateway search (N9) and legal process. Integration-token reuse is partly outside endpoint telemetry and depends on SaaS audit ingest.

Validation. Run Section 11 before promoting: telemetry ready, 14-day baseline, safe positive tests, then staged promotion.

16

Hunt Summary Ticket

TITLE: ShinyHunters Vishing-to-SaaS Data Theft and PeopleSoft CVE-2026-35273 Exploitation
SEVERITY: High. Active data-theft extortion with exploited-in-the-wild zero-day and n-day
SCOPE: Identity provider and SaaS audit logs; PeopleSoft web tier and Linux servers; endpoint
       DNS, network and process telemetry
HYPOTHESIS: Callers pose as IT support to steal an SSO password and MFA code, enroll their own
       factor, and bulk-download SaaS data. Separately, the group exploits PeopleSoft EMHub,
       installs MeshCentral agents and exfiltrates data over SSH.
QUERIES: 13 CQL queries (Q1-Q13): 6 on endpoint telemetry, 7 on identity and SaaS logs.
DO FIRST: 1) Run Q8 and Q9 over 14 days. 2) Check PeopleSoft hosts with Q5, N6 and Playbook 1.
       3) Import the Section 10 CSV. 4) Brief the help desk on video and callback verification.
FINDINGS: [fill in after the hunt]
GAPS: The phone call and lure page on a personal phone are outside endpoint telemetry. JSP file
       creation has no query here. Integration-token reuse depends on SaaS audit ingest.
ACTIONS: Patch CVE-2026-35273; block /PSEMHUB on the normalized path; enforce phishing-resistant
       MFA; restrict MFA enrollment; revoke sessions on any hit.
OWNER: REPLACE_WITH_OWNER
VERSION: v0.1 (Draft) 2026-10-16
17

Changelog

v0.12026-10-16Initial draft. 13 CQL queries, 5 IOA candidates, 3 alert packages, tiered hardening with 6 deployable playbooks. Built from 13 sources, 9 of them Tier 1.
18

References

TierSourceUsed forAccess date
T1MITRE ATT&CK G1057 ShinyHunters (UNC6240, Bling Libra)Canonical aliases, active since at least 2019, technique catalogue including T1190 on PeopleSoft CVE-2026-35273, MeshCentral masquerade, Tor DLS, extortion mailboxes.2026-10-16
T1GTIG/Mandiant: Vishing for Access, Tracking the Expansion of ShinyHunters-Branded SaaS Data Theft (30 Jan 2026)UNC6661/UNC6671/UNC6240 split, vishing and victim-branded SSO domains, ToogleBox Recall, PowerShell SharePoint theft, 19 source IPs, extortion mechanics.2026-10-16
T1GTIG/Mandiant: ShinyHunters Targets Education Sector with Oracle PeopleSoft Exploit (11 Jun 2026)CVE-2026-35273 zero-day window 27 May to 9 Jun, MeshCentral staging, masqueraded agents, fanout script, hashes, 6 network indicators.2026-10-16
T1GTIG/Mandiant: ShinyHunters Renewed Mass Exploitation Campaign Targeting Oracle PeopleSoft (Sep 2026)%50SEMHUB WAF bypass, fileless and web-shell exploitation, x.2026-10-16
T1Mandiant: proactive hardening, logging and detection guide for ShinyHunters-branded SaaS intrusionsContainment, help-desk verification, IdP and SaaS hardening, logging requirements, detection logic.2026-10-16
T1Okta Threat Intelligence: Phishing kits adapt to the script of callersReal-time session-orchestration vishing kits defeat push and number matching; FastPass and FIDO passkeys resist.2026-10-16
T1FBI IC3 PSA I-20260515-PSA: ShinyHunters Cyber Criminal Group Attacks Learning Management System (15 May 2026)Government description of extortion pressure: harassment, threatening calls and texts, swatting, Tor leak site, false claims.2026-10-16
T1Sekoia: Gotta Breach 'Em All, the journey of ShinyHuntersGroup structure (decentralised clusters under a shared alias, link to The Com), 2025 to 2026 timeline, token-theft supply-chain pattern.2026-10-16
T2Obsidian Security: Behind the breach, ShinyHunters' 2026 voice phishing campaignOkta event sequences, FastPass enrollment from an emulated Android device named Passkey, Genymobile user agent, SSO burst, Slack and Drive bulk download.2026-10-16
T3Huntress: ShinyHunters threat actor profileAggregated campaign timeline (token abuse, Aura exploitation, actor user-agent strings).2026-10-16
T3Picus Security: The ShinyHunters Domino EffectBackground on the ecosystem-breach pattern.2026-10-16
T2KrebsOnSecurity: ShinyHunters arrests and extortion (7 Oct 2026)Current status: reported detentions and arrests, brand takeover, continued PeopleSoft mass exploitation and the WAF-bypass update.2026-10-16
T2BleepingComputer: FBI arrests another suspected ShinyHunters hacker (Oct 2026)Corroborates the October 2026 arrests and the PeopleSoft attribution.2026-10-16
T1Oracle Security Alerts (CVE-2026-35273 advisory, referenced by GTIG)Patch authority for Track B. Not fetched here; follow it directly.2026-10-16