Two fresh pulses out of AlienVault OTX (modified 2026-09-17, TLP:WHITE) paint a converging picture of credential theft and intelligence collection: a state-nexus espionage campaign deploying Rust-based implants against South Asian government and defense targets, and a commercial phishing-as-a-service operation industrializing Microsoft 365 session hijacking against Western enterprises. Both end in the same place — stolen identities and persistent access to sensitive networks.
Threat Summary
Pulse 1 — Operation RapidRust (APT36 / Operation C-Major): In August 2026, the Pakistan-nexus actor APT36 launched a refreshed intrusion set against government and defense organizations in India and Afghanistan. The campaign debuts RUSTYSHADE, a Rust-based backdoor that abuses private GitHub repositories as a dead-drop/command-and-control channel, protected with AES-256-GCM encrypted tasking. Supporting tooling includes RUSTYMOVE (USB-based lateral movement), PSNATCH and BASHNATCH (PowerShell/Bash credential and data stealers), plus GITSHELLPAD and GOSHELL auxiliary implants. This is a cross-platform espionage toolkit designed to blend C2 into legitimate developer infrastructure.
Pulse 2 — Mirage2FA: An active phishing-as-a-service (PhaaS) kit attributed to the LinX Coders group, performing Adversary-in-the-Middle (AiTM) attacks against Microsoft 365. It harvests credentials and authenticated session cookies, bypassing MFA entirely. Roughly 63.7% of 4,000+ identified victims are US-based, concentrated in Technology, Manufacturing, Education, Finance, Healthcare, and Telecom. Delivery uses HTML smuggling and WebSocket-based relay infrastructure, with thousands of compromise events logged between 2024 and 2026 across disposable phishing domains (e.g., verpox.shop, pslcertlive.site, vslbertlive.info).
Collective read: Initial access in both cases is social engineering; the monetization/persistence layer is identity theft. RapidRust escalates to full endpoint compromise and lateral movement; Mirage2FA stops at the cloud session — which, for most enterprises, is enough.
Threat Actor / Malware Profile
RUSTYSHADE (APT36)
- Distribution: Spearphishing lures themed around government/defense workflows, delivering Rust-compiled payloads (often via malicious documents or shortcut files).
- Payload behavior: Backdoor with remote command execution, file staging, and modular tasking. Companion stealers PSNATCH (Windows/PowerShell) and BASHNATCH (Linux/Bash) scrape credentials, browser stores, and documents.
- C2: Private GitHub repositories used as covert channels — tasks and exfil are committed/fetched as repository content, AES-256-GCM encrypted. This makes C2 traffic look like ordinary
github.comHTTPS. - Persistence: Scheduled tasks and startup registry entries on Windows; cron/systemd units on Linux.
- Anti-analysis: Rust compilation frustrates signature-based AV and static reversing; encrypted tasking defeats passive network inspection; legitimate cloud C2 defeats domain blocklisting.
- Lateral movement: RUSTYMOVE propagates via removable USB media — a direct threat to air-gapped defense networks.
Mirage2FA (LinX Coders)
- Distribution: Phishing emails with HTML smuggling attachments that assemble the lure client-side, evading secure email gateways.
- Payload behavior: Reverse-proxy AiTM pages mimicking Microsoft 365 login. The victim authenticates against real Microsoft endpoints through the proxy; the kit captures credentials, MFA tokens/OTP responses, and the resulting session cookie.
- C2/Relay: WebSocket channels to attacker infrastructure on fast-flux disposable domains (
*.shop,*.site,*.info,*.storeTLDs, plus compromised legitimate domains likegalatasaraydanhaberler.com,cementslabconstruction.com). - Persistence: None on the endpoint — persistence is the stolen session itself, replayed from attacker infrastructure until cookie expiry or revocation.
- Anti-analysis: HTML smuggling bypasses attachment scanning; WebSocket relay obscures the proxy relationship; brand-new domains defeat reputation filters.
IOC Analysis
The RapidRust pulse carries 20 indicators, all file hashes (MD5 and SHA1) — sample hashes for RUSTYSHADE, RUSTYMOVE, and the stealer components. Hash-only pulses are classic for compiled malware where infrastructure is legitimate (GitHub). Operationalization:
- Load SHA1/MD5 values into your EDR blocklist and SIEM watchlists. MD5s are weak against recompilation — treat hashes as point-in-time detection and pair with behavioral rules (below).
- Retro-hunt: query your EDR/DLP for any of these hashes executed in the last 90 days.
- Pivot on the behavior, not the binary: unsigned binaries spawning
powershell.exe/bashwith network children reachingapi.github.com.
The Mirage2FA pulse carries 68 indicators — domains and hostnames — the phishing relay infrastructure:
- Block the full domain list at DNS (protective DNS), web proxy, and email gateway. These TLDs (
.shop,.site,.store,.info) should be scrutinized broadly if your business has no legitimate need for them. - Feed domains into your proxy/SWG logs retroactively — any user who resolved
office.pcvgtech.storeoradp.pslcertlive.siteneeds credential reset AND session revocation. - Tooling: AlienVault OTX DirectConnect/API for indicator sync; MISP for correlation; VirusTotal/ANY.RUN for sandbox detonation of the HTML smuggling lures; Microsoft 365 Defender for sign-in log pivoting on anomalous session reuse.
Detection Engineering
---
title: RUSTYSHADE Backdoor - GitHub Repository C2 Communication
id: 7e2a1c4d-rapidrust-0001-ghc2-detect001
status: experimental
description: Detects suspicious processes making outbound connections to GitHub API/content endpoints consistent with RUSTYSHADE's use of private GitHub repositories for AES-256-GCM encrypted C2 tasking (APT36 Operation RapidRust).
author: Security Arsenal Threat Intel
date: 2026/09/18
references:
- https://www.zscaler.com/blogs/security-research/operation-rapidrust-apt36-deploys-rustyshade-rustymove-psnatch-and
logsource:
category: network_connection
product: windows
detection:
selection_domain:
DestinationHostname|contains:
- 'api.github.com'
- 'raw.githubusercontent.com'
selection_process:
Image|endswith:
- '\powershell.exe'
- '\pwsh.exe'
- '\wscript.exe'
- '\mshta.exe'
- '\rundll32.exe'
filter_known:
User|contains: 'githubactions'
condition: selection_domain and selection_process and not filter_known
falsepositives:
- Developer workstations using scripting tools against GitHub API
- GitHub Actions runners
level: high
tags:
- attack.command_and_control
- attack.t1071.001
- attack.t1102.002
---
title: RUSTYMOVE - USB-Based Lateral Movement Artifact Execution
id: 7e2a1c4d-rapidrust-0002-usb-lateralmove
status: experimental
description: Detects execution of binaries or scripts directly from removable media, consistent with RUSTYMOVE USB propagation used by APT36 to breach segmented/air-gapped defense networks.
author: Security Arsenal Threat Intel
date: 2026/09/18
logsource:
category: process_creation
product: windows
detection:
selection:
CommandLine|contains:
- ':\\'
Image|startswith:
- 'D:'
- 'E:'
- 'F:'
- 'G:'
selection_ext:
Image|endswith:
- '.exe'
- '.lnk'
- '.ps1'
- '.bat'
- '.dll'
condition: selection and selection_ext
falsepositives:
- Legitimate portable applications run from USB by IT staff
level: medium
tags:
- attack.lateral_movement
- attack.t1091
- attack.initial_access
- attack.t1200
---
title: Mirage2FA - HTML Smuggling Dropper Execution Followed by Browser Network Activity
id: 9b3d2f1a-mirage2fa-0001-htmlsmuggle-aitm
status: experimental
description: Detects HTML smuggling delivery pattern - browser or email client writing HTML/JS payload followed by rundll32/mshta execution and connections to known Mirage2FA phishing relay TLDs associated with M365 session theft.
author: Security Arsenal Threat Intel
date: 2026/09/18
references:
- https://any.run/cybersecurity-blog/mirage2fa-phishing-targets-us-companies/
logsource:
category: process_creation
product: windows
detection:
selection_parent:
ParentImage|endswith:
- '\chrome.exe'
- '\msedge.exe'
- '\firefox.exe'
- '\OUTLOOK.EXE'
selection_child:
Image|endswith:
- '\mshta.exe'
- '\rundll32.exe'
- '\wscript.exe'
selection_cli:
CommandLine|contains:
- '.html'
- '.hta'
- 'javascript:'
- 'base64'
condition: selection_parent and selection_child and selection_cli
falsepositives:
- Rare legitimate enterprise HTA applications
level: high
tags:
- attack.initial_access
- attack.t1566.002
- attack.t1027.006
- attack.credential_access
- attack.t1557
// Mirage2FA AiTM Phishing Infrastructure + RapidRust GitHub C2 Hunt
// Microsoft Sentinel / M365 Defender Advanced Hunting
let MirageDomains = dynamic(["galatasaraydanhaberler.com","sopbtech.store","office.pcvgtech.store","ver.verpox.shop","cementslabconstruction.com","adp.pslcertlive.site","ans.rsxbenefits.com","ari.vslbertlive.info"]);
let Lookback = 30d;
// Part 1: Users who resolved or connected to Mirage2FA phishing relay infrastructure
let PhishHits =
DeviceNetworkEvents
| where TimeGenerated > ago(Lookback)
| where RemoteUrl has_any (MirageDomains) or RemoteUrl endswith ".verpox.shop" or RemoteUrl endswith ".pslcertlive.site" or RemoteUrl endswith ".vslbertlive.info" or RemoteUrl endswith ".rsxbenefits.com"
| project PhishTime=TimeGenerated, DeviceName, AccountName=InitiatingProcessAccountName, RemoteUrl, RemoteIP, InitiatingProcessFileName;
// Part 2: Suspicious GitHub API access from non-developer processes (RUSTYSHADE C2)
let GitHubC2 =
DeviceNetworkEvents
| where TimeGenerated > ago(Lookback)
| where RemoteUrl in ("api.github.com","raw.githubusercontent.com") or RemoteIP in ("140.82.112.0/20")
| where InitiatingProcessFileName in~ ("powershell.exe","pwsh.exe","wscript.exe","mshta.exe","rundll32.exe")
| project GHC2Time=TimeGenerated, DeviceName, GHAccount=InitiatingProcessAccountName, GHProcess=InitiatingProcessFileName, GHRemoteUrl=RemoteUrl;
// Part 3: Session hijack corroboration - sign-ins from anomalous ASN/user-agent for users in PhishHits
PhishHits
| join kind=leftouter (
AADSignInEventsBeta
| where TimeGenerated > ago(Lookback)
| where RiskLevelDuringSignIn > 0 or IsFirstPartyApp == false
) on $left.AccountName == $right.AccountUpn
| project PhishTime, DeviceName, AccountName, RemoteUrl, RemoteIP, SignInTime=TimeGenerated1, IPAddress, Application, UserAgent
| summarize arg_min(PhishTime, *) by AccountName, RemoteUrl
;
GitHubC2
# Security Arsenal - RapidRust / Mirage2FA Endpoint Hunt Script
# Run via EDR live response or PS remoting across the fleet.
# Checks: persistence artifacts, USB execution traces, phishing domain DNS cache, file hashes.
$report = @()
# 1) Known RapidRust sample hashes (OTX pulse, 2026-09-17)
$badHashes = @(
"40a75f87f1e52c33df9ca733aaf8ebbb",
"aade06ec611d69f1553035f22356ccf4",
"ae77f1834ccde53258bc27a779102af2",
"f16f507a8ed515663a4f07050cd97a74"
)
# 2) Mirage2FA phishing infrastructure
$phishDomains = @("galatasaraydanhaberler.com","sopbtech.store","pcvgtech.store","verpox.shop","cementslabconstruction.com","pslcertlive.site","rsxbenefits.com","vslbertlive.info")
Write-Host "[*] Checking persistence: Run keys..." -ForegroundColor Cyan
$runKeys = @("HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
"HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
"HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce")
foreach ($key in $runKeys) {
if (Test-Path $key) {
Get-ItemProperty $key | ForEach-Object {
$_.PSObject.Properties | Where-Object {
$_.Value -match "powershell|pwsh|rundll32|AppData|Temp" -and $_.Name -notmatch "^PS"
} | ForEach-Object {
$report += [pscustomobject]@{Check="RunKey"; Finding="$($key): $($_.Name) = $($_.Value)"; Host=$env:COMPUTERNAME}
}
}
}
}
Write-Host "[*] Checking persistence: Scheduled tasks spawning interpreters..." -ForegroundColor Cyan
Get-ScheduledTask | ForEach-Object {
$actions = ($_.Actions | Out-String)
if ($actions -match "powershell|wscript|mshta" -and $_.TaskPath -notmatch "Microsoft") {
$report += [pscustomobject]@{Check="ScheduledTask"; Finding="$($_.TaskPath)$($_.TaskName) -> $actions"; Host=$env:COMPUTERNAME}
}
}
Write-Host "[*] Checking USB execution artifacts (RUSTYMOVE - USBStor + mounted devices)..." -ForegroundColor Cyan
if (Test-Path "HKLM:\SYSTEM\CurrentControlSet\Enum\USBSTOR") {
Get-ChildItem "HKLM:\SYSTEM\CurrentControlSet\Enum\USBSTOR" -Recurse -ErrorAction SilentlyContinue |
Select-Object -First 50 | ForEach-Object {
$report += [pscustomobject]@{Check="USBDevice"; Finding=$_.PSChildName; Host=$env:COMPUTERNAME}
}
}
Write-Host "[*] Checking DNS cache for Mirage2FA phishing domains..." -ForegroundColor Cyan
$dns = Get-DnsClientCache -ErrorAction SilentlyContinue
foreach ($d in $phishDomains) {
$hits = $dns | Where-Object { $_.Entry -match [regex]::Escape($d) }
foreach ($h in $hits) {
$report += [pscustomobject]@{Check="DNSCache-PhishHit"; Finding="$($h.Entry) -> $($h.Data) [CREDENTIAL RESET REQUIRED]"; Host=$env:COMPUTERNAME}
}
}
Write-Host "[*] Hash sweep: common staging dirs for RapidRust samples..." -ForegroundColor Cyan
$scanPaths = @("$env:TEMP","$env:APPDATA","$env:LOCALAPPDATA\Temp","C:\ProgramData")
foreach ($p in $scanPaths) {
Get-ChildItem $p -Recurse -File -ErrorAction SilentlyContinue -Include *.exe,*.dll,*.ps1 |
Where-Object { $_.Length -lt 30MB } | ForEach-Object {
$md5 = (Get-FileHash $_.FullName -Algorithm MD5 -ErrorAction SilentlyContinue).Hash
if ($badHashes -contains $md5.ToLower()) {
$report += [pscustomobject]@{Check="MaliciousHash"; Finding="RAPIDRUST SAMPLE: $($_.FullName) [$md5]"; Host=$env:COMPUTERNAME}
}
}
}
Write-Host "[*] Checking active connections to GitHub API from scripts (RUSTYSHADE C2)..." -ForegroundColor Cyan
Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue |
Where-Object { $_.RemotePort -eq 443 } | ForEach-Object {
$proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
if ($proc.ProcessName -match "powershell|pwsh|wscript|mshta|rundll32") {
$report += [pscustomobject]@{Check="ScriptNetConn"; Finding="$($proc.ProcessName) (PID $($_.OwningProcess)) -> $($_.RemoteAddress):443"; Host=$env:COMPUTERNAME}
}
}
Write-Host "`n===== HUNT RESULTS ($($report.Count) findings) =====" -ForegroundColor Yellow
$report | Format-Table -AutoSize | Out-String -Width 300
$report | Export-Csv ".\rapidrust_mirage2fa_hunt_$env:COMPUTERNAME.csv" -NoTypeInformation
Response Priorities
Immediate (0-4 hours):
- Push all 68 Mirage2FA domains/hostnames to DNS sinkhole, web proxy, and email gateway blocklists; push all 20 RapidRust hashes to EDR prevention.
- Retro-hunt proxy and DNS logs 90 days for the phishing domains — any hit means assume session theft: revoke all M365 refresh tokens (
Revoke-AzureADUserAllRefreshToken), force password reset, and audit mailbox rules, OAuth consent grants, and forwarding. - Run the PowerShell hunt on internet-facing and high-value endpoints; check scheduled tasks and Run keys for interpreter-based persistence.
24 hours:
- For every user in PhishHits: mandatory identity verification, full session revocation, MFA re-registration review, and inbox-rule audit (AiTM actors commonly create hidden forwarding rules for BEC follow-on).
- Alert on impossible-travel and token-replay sign-ins in Entra ID for the affected population; review Conditional Access sign-in risk policies.
- For government/defense-sector organizations: sweep for USB device insertion events correlating with new process execution (RUSTYMOVE), and audit GitHub API access patterns from non-developer endpoints.
1 week:
- Deploy phishing-resistant MFA (FIDO2/passkeys) for all users — Mirage2FA defeats OTP and push-based MFA by design; hardware-bound credentials break the AiTM proxy model. Enforce token binding / Continuous Access Evaluation where possible.
- Block HTML/HTM attachments at the email gateway or strip active content; restrict mshta/wscript/rundll32 via WDAC or AppLocker on standard users.
- Restrict outbound access to
api.github.com/raw.githubusercontent.comto developer-managed devices via proxy categorization; alert on all others. - Disable USB storage via device control policy on classified/segmented networks; establish cross-domain transfer procedures for defense environments.
Related Resources
Security Arsenal Incident Response Managed SOC & MDR Services AlertMonitor Threat Detection From The Dark Side Intel Hub
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.