Back to Intelligence

Midnight Blizzard CaptiveCrunch, LegionLoader ClickFix & Passkey AiTM Campaigns: OTX Pulse Analysis — Identity Theft Detection Pack

SA
Security Arsenal Team
September 11, 2026
8 min read

Threat Summary

Five concurrent OTX pulses paint a single strategic picture: identity is the primary target, and the browser sign-in flow is the battlefield. The most operationally significant activity is CaptiveCrunch, attributed to UNC2452 (Midnight Blizzard / APT29 / Cozy Bear) — the SVR-linked actor weaponizing hotel and conference-center Wi-Fi captive portals to manipulate DNS and HTTP responses, redirecting traveling executives to attacker-controlled Microsoft 365 phishing infrastructure. The campaign layers three collection techniques: cloned OWA/M365 phishing pages, device code phishing abusing the Microsoft Entra ID authentication flow, and ClickFix social engineering delivering the CornFlake and ChocoShell implants. Targeting spans the US, India, and Saudi Arabia.

In parallel, Storm-3121 and Storm-3032 are running passkey-themed social engineering operations active since May 2026: helpdesk-impersonation phone calls and SMS lures drive victims to adversary-in-the-middle (AiTM) phishing pages, after which attackers register their own passkeys and MFA methods on the victim account for durable persistence — a technique that defeats password resets entirely. The LegionLoader pulse confirms ClickFix (fake Cloudflare CAPTCHA) has become a commodity initial-access vector, and Casbaneiro/Metamorfo continues geofenced banking credential theft across Latin America via invoice-themed phishing, HTA downloaders, and AutoIt loaders. Finally, the PaperCut exploitation campaign (CVE-2026-81578, CVE-2026-82078) demonstrates AI-assisted exploitation at scale, converting exposed print servers into SOCKS proxy nodes and credential-harvesting pivots.

Collectively, these pulses indicate that harvested credentials and session tokens are being operationalized for cloud account takeover, persistence via MFA/passkey manipulation, and resale-ready access — the exact inventory that fuels dark web credential markets.

Threat Actor / Malware Profile

UNC2452 / Midnight Blizzard (CaptiveCrunch) — Distribution: compromised captive portal DNS/HTTP redirection at hospitality venues. Payload behavior: CornFlake and ChocoShell implants delivered through ClickFix fake-update prompts after credential capture. C2: attacker infrastructure fronted by lookalike Microsoft domains (m365-owa.com, ms365-device.com) and raw-IP-hosted JavaScript loaders (e.g., 213.145.86.112/cdn/chunks/polyfill-7e2b.min.js masquerading as a CDN polyfill). Persistence: stolen session tokens and Entra ID device code grants — no traditional host persistence required for initial access. Anti-analysis: geofenced/targeted delivery, abuse of legitimate Microsoft auth flows so telemetry blends with normal sign-ins.

Storm-3121 / Storm-3032 (Passkey AiTM) — Distribution: voice/SMS helpdesk impersonation. Payload: AiTM phishing kit mimicking Microsoft sign-in (setupmypasskey.com, passkeyhelpdesk.com, keysyncos.com, etc.). Persistence: attacker-registered passkeys, MFA methods, and OAuth consents on compromised accounts — password resets do NOT evict them. Objective: cloud data exfiltration.

LegionLoader — Distribution: ClickFix fake CAPTCHA pages and spear phishing (including Korean Namu Wiki abuse); users are tricked into pasting a malicious PowerShell command. Behavior: loader that stages secondary infostealers. Anti-analysis: user-driven execution bypasses email sandboxing.

Casbaneiro / Metamorfo (S0455) — Distribution: invoice/legal-notice phishing PDFs → HTA downloader → AutoIt loader. C2: distributed data-receiving servers (e.g., 162.201.178.68) with deliberate HTTP anomalies to evade naive parsers. Anti-analysis: IP-based geofencing restricting execution to Argentina, Colombia, Mexico, and Peru.

PaperCut campaign — AI-assisted exploitation pipeline targeting internet-facing PaperCut servers (CVE-2026-81578/82078), deploying reverse shells and SOCKS proxies, with automated target filtering and credential harvesting from compromised hosts.

IOC Analysis

The indicator set spans five types, each requiring distinct operationalization:

  • Domains (phishing/AiTM): m365-owa.com, ms365-device.com, ms365-live.com, owa-ms365.com, setupmypasskey.com, validationsetupac.com, portalsetuphub.com, myconnectkey.com, oskeysync.com, keysyncos.com, oskeyregister.com, passkeyhelpdesk.com, dallasbackstage.com, gemscocl.com. Block at DNS sinkhole, secure web gateway, and Defender for Office 365. Alert retroactively on proxy/DNS logs — any historical resolution is a potential compromised identity, not just a blocked request.
  • IPv4: 213.145.86.112 (CaptiveCrunch loader host), 162.201.178.68 (Casbaneiro receiver). Block at egress firewall; hunt NetFlow/proxy for TLS and HTTP sessions.
  • File hashes (SHA256/MD5): import into EDR blocklists (Defender custom indicators, CrowdStrike, SentinelOne) and retro-hunt DeviceFileEvents. CornFlake/ChocoShell SHA256s and LegionLoader MD5s are high-fidelity execution artifacts.
  • URLs: the /cdn/chunks/polyfill-*.min.js pattern hosted on bare IPs is a strong network signature — legitimate CDNs do not serve polyfills from raw IPv4.
  • CVEs: CVE-2026-21509, CVE-2026-81578, CVE-2026-82078 — feed into vulnerability management for emergency patching of PaperCut and affected Microsoft components.

Tooling: OTX DirectConnect/API for continuous IOC sync, MISP for correlation, Microsoft Defender TI and Sentinel threat intelligence connectors for automated matching, and urlscan.io/VirusTotal for pivot analysis on the phishing domains.

Detection Engineering

YAML
---
title: ClickFix Social Engineering - Suspicious PowerShell Paste Execution
id: 8f3c1a2e-9d4b-4e7a-a1c5-6b2d8f0e3a91
status: experimental
description: Detects ClickFix-style execution where users are lured into running PowerShell commands fetching remote payloads, as seen in LegionLoader and CaptiveCrunch CornFlake delivery.
author: Security Arsenal Threat Intel
references:
    - https://asec.ahnlab.com/en/95374/
    - https://www.zscaler.com/blogs/security-research/captivecrunch-midnight-blizzard-weaponizes-hotel-wi-fi-captive-portals
date: 2026/09/11
logsource:
    category: process_creation
    product: windows
detection:
    selection_img:
        Image|endswith:
            - '\powershell.exe'
            - '\pwsh.exe'
            - '\mshta.exe'
    selection_cli:
        CommandLine|contains:
            - 'Invoke-Expression'
            - 'IEX'
            - 'DownloadString'
            - 'Invoke-WebRequest'
            - 'curl '
            - ' -enc '
            - ' -ec '
            - 'mshta http'
    condition: selection_img and selection_cli
falsepositives:
    - Legitimate admin automation scripts
    - Software deployment tooling
level: high
tags:
    - attack.execution
    - attack.t1059.001
    - attack.t1059.005
    - attack.t1204.002
---
title: Authentication to M365 Lookalike or Passkey Phishing Infrastructure
id: 2d7e4b1c-5a8f-4c3d-9e6a-1f0b7d3c5e82
status: experimental
description: Detects DNS or network connections to known CaptiveCrunch (UNC2452) and passkey AiTM phishing domains used for Microsoft 365 credential theft.
author: Security Arsenal Threat Intel
references:
    - https://www.microsoft.com/en-us/security/blog/2026/09/09/passkey-themed-social-engineering-leads-identity-cloud-compromise/
date: 2026/09/11
logsource:
    category: dns
    product: windows
detection:
    selection:
        query|contains:
            - 'm365-owa.com'
            - 'ms365-device.com'
            - 'ms365-live.com'
            - 'owa-ms365.com'
            - 'setupmypasskey.com'
            - 'validationsetupac.com'
            - 'portalsetuphub.com'
            - 'myconnectkey.com'
            - 'oskeysync.com'
            - 'keysyncos.com'
            - 'oskeyregister.com'
            - 'passkeyhelpdesk.com'
            - 'dallasbackstage.com'
            - 'gemscocl.com'
    condition: selection
falsepositives:
    - Threat research activity
level: critical
tags:
    - attack.command_and_control
    - attack.t1071.001
    - attack.t1557
    - attack.t1566.002
---
title: JavaScript Loader Fetched from Bare IPv4 CDN Path
id: 4a1b9c7d-2e5f-4a6b-8c3d-7e0f1a9b2c46
status: experimental
description: Detects HTTP requests for JavaScript polyfill/chunk files hosted directly on bare IP addresses, matching CaptiveCrunch loader staging on 213.145.86.112.
author: Security Arsenal Threat Intel
date: 2026/09/11
logsource:
    category: proxy
detection:
    selection_uri:
        cs-uri-path|contains:
            - '/cdn/chunks/polyfill-'
            - '/cdn/chunks/'
    selection_ip:
        c-ip: '213.145.86.112'
    condition: selection_uri and selection_ip
falsepositives:
    - Unlikely; legitimate CDNs use named hosts
level: high
tags:
    - attack.command_and_control
    - attack.t1105
    - attack.t1071.001
KQL — Microsoft Sentinel / Defender
// Hunt: CaptiveCrunch / Passkey AiTM / LegionLoader infrastructure and ClickFix execution
let PhishDomains = dynamic(["m365-owa.com","ms365-device.com","ms365-live.com","owa-ms365.com","setupmypasskey.com","validationsetupac.com","portalsetuphub.com","myconnectkey.com","oskeysync.com","keysyncos.com","oskeyregister.com","passkeyhelpdesk.com","dallasbackstage.com","gemscocl.com"]);
let C2IPs = dynamic(["213.145.86.112","162.201.178.68"]);
let NetHits = DeviceNetworkEvents
| where TimeGenerated > ago(14d)
| where RemoteUrl has_any (PhishDomains) or RemoteIP in (C2IPs)
| project TimeGenerated, DeviceName, InitiatingProcessAccountName, InitiatingProcessFileName, RemoteUrl, RemoteIP, RemotePort, ActionType;
let ClickFixExec = DeviceProcessEvents
| where TimeGenerated > ago(14d)
| where FileName in~ ("powershell.exe","pwsh.exe","mshta.exe","rundll32.exe")
| where ProcessCommandLine has_any ("IEX","Invoke-Expression","DownloadString","Invoke-WebRequest"," -enc "," -ec ","mshta http","curl ")
| project TimeGenerated, DeviceName, AccountName, FileName, ProcessCommandLine, InitiatingProcessFileName;
union NetHits, ClickFixExec
| sort by TimeGenerated desc
PowerShell
# Security Arsenal IOC Hunt - CaptiveCrunch / LegionLoader / Casbaneiro host sweep
# Run via EDR live response or PS remoting across fleet
$ErrorActionPreference = 'SilentlyContinue'

$malHashes = @(
    '918fa52ae45ed60ba7cc8bdc99c3cbe9ab92e0375ec31fc05d0d4513be11c593',
    'be99857449d2856dd5a84e21c8a3d5e0e01456adb44062ddec5a6b4970d8d42c',
    '4302586202234cdf1ca058fd3c62be0050c8155ed113f3f62337d756e6915044',
    '0128a4b78aab83796042118ecb3e46e0',
    '27745ec8bde201e771e3f4069e887cad',
    '685b6822b0c66f4f18496eb6ce24f984'
)

Write-Host "[*] Hash sweep: user-writable directories..." -ForegroundColor Cyan
$dirs = @("$env:TEMP", "$env:APPDATA", "$env:LOCALAPPDATA", "$env:USERPROFILE\Downloads", "C:\ProgramData")
foreach ($d in $dirs) {
    Get-ChildItem -Path $d -Recurse -File -Include *.exe,*.dll,*.ps1,*.hta,*.js,*.vbs,*.bat -ErrorAction SilentlyContinue |
    ForEach-Object {
        $h256 = (Get-FileHash $_.FullName -Algorithm SHA256).Hash.ToLower()
        $hMd5 = (Get-FileHash $_.FullName -Algorithm MD5).Hash.ToLower()
        if ($malHashes -contains $h256 -or $malHashes -contains $hMd5) {
            Write-Host "[HIT] Malicious file: $($_.FullName)" -ForegroundColor Red
        }
    }
}

Write-Host "[*] Checking active connections to known C2..." -ForegroundColor Cyan
Get-NetTCPConnection -State Established |
    Where-Object { $_.RemoteAddress -in @('213.145.86.112','162.201.178.68') } |
    ForEach-Object {
        $proc = Get-Process -Id $_.OwningProcess
        Write-Host "[HIT] C2 connection: $($_.RemoteAddress):$($_.RemotePort) by $($proc.ProcessName) (PID $($proc.Id))" -ForegroundColor Red
    }

Write-Host "[*] Checking DNS cache for phishing domains..." -ForegroundColor Cyan
$phish = 'm365-owa|ms365-device|ms365-live|owa-ms365|setupmypasskey|passkeyhelpdesk|keysyncos|oskeyregister|dallasbackstage|gemscocl'
Get-DnsClientCache | Where-Object { $_.Entry -match $phish } |
    ForEach-Object { Write-Host "[HIT] DNS cache: $($_.Entry) -> $($_.Data)" -ForegroundColor Red }

Write-Host "[*] Auditing AutoIt/HTA persistence (Casbaneiro TTP)..." -ForegroundColor Cyan
$runKeys = @('HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run',
             'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run')
foreach ($k in $runKeys) {
    Get-ItemProperty $k | Get-Member -MemberType NoteProperty | ForEach-Object {
        $val = (Get-ItemProperty $k).$($_.Name)
        if ($val -match 'autoit|mshta|wscript|powershell.*-enc|AppData|Temp') {
            Write-Host "[SUS] Run key: $k :: $($_.Name) = $val" -ForegroundColor Yellow
        }
    }
}
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'autoit|mshta|powershell' -and $_.Actions.Arguments -match 'http|AppData|Temp' } |
    ForEach-Object { Write-Host "[SUS] Scheduled task: $($_.TaskName)" -ForegroundColor Yellow }

Write-Host "[*] Hunt complete. Escalate any [HIT] findings to IR immediately." -ForegroundColor Cyan

Response Priorities

Immediate (0–4h):

  • Push all phishing domains and both C2 IPs to DNS sinkhole, SWG, and egress firewall blocklists; import all file hashes into EDR block rules.
  • Run the KQL hunt fleet-wide; treat any historical hit on the M365/passkey domains as a presumed credential compromise.
  • Audit Entra ID for recent device code grant flows, new passkey/FIDO2 registrations, and MFA method additions on accounts that transited hotel or conference networks in the past 30 days.

24 Hours:

  • For every exposed identity: revoke all sessions and refresh tokens, remove attacker-registered passkeys/MFA devices (password reset alone is insufficient against Storm-3121/3032 persistence), and force credential rotation.
  • Review sign-in logs for token reuse from anomalous geographies consistent with CaptiveCrunch targeting (US, India, Saudi Arabia).
  • Isolate and reimage any host with hash or ClickFix execution hits; check LATAM-facing finance systems for Casbaneiro geofence exposure.

1 Week:

  • Deploy conditional access policies: enforce phishing-resistant MFA (FIDO2 with attestation), block device code flow for non-privileged users where feasible, and require compliant-device checks for M365 access — neutralizing both captive-portal and AiTM token theft.
  • Block mshta.exe, wscript.exe, and AutoIt interpreters from launching child processes or making network connections via WDAC/ASR rules.
  • Emergency-patch PaperCut servers (CVE-2026-81578/82078), remove them from direct internet exposure, and brief traveling executives on captive portal hygiene — mandate VPN-on-join for all untrusted networks.

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.