Threat Summary
The three pulses collectively show credential theft shifting from a single malware problem into an identity supply-chain problem. Arctic Wolf/AlienVault reporting on CastleLoader describes a multi-stage shellcode loader cluster with campaigns named Urutyka, Garrigin, and Noidret, delivering CastleStealer, PythonRAT, NetSupport RAT, Lobshot, BoryptGrab and newly linked NeedleStealer payloads. The NeedleStealer connection is important because it introduces Rust and Golang tooling into a loader ecosystem previously associated with PowerShell stagers, IronPython and browser-extension/cryptocurrency theft themes.
In parallel, the MCP honeypot pulse shows attackers actively probing unauthenticated Model Context Protocol servers: roughly 1,000 sources reached the decoy, 596 spoke protocol, and 24 actively exploited it, executing 628 shell commands, 255 file reads and 248 secrets-store lookups. RecruitTrap adds the enterprise credential front door: HR-impersonation phishing that rejects personal emails, uses Browser-in-the-Browser on desktop and full-screen mobile login pages without URL chrome to harvest OAuth tokens and workforce credentials across aerospace, technology, retail, finance, hospitality, manufacturing and media.
Collective assessment: intrusion sets are optimizing for valid sessions rather than noisy endpoint persistence. Expect chains that start with SEO malvertising, fake software/HR lures, or exposed AI-agent infrastructure; stage through loaders and RATs; then pivot to browser stores, OAuth refresh tokens, cloud secrets managers, Kubernetes service accounts and CI/CD variables.
Threat Actor / Malware Profile
No pulse attributes a named APT; the actor profile is best treated as multiple financially motivated credential-theft clusters sharing TTPs.
CastleLoader cluster: distribution appears campaignized under Urutyka, Garrigin and Noidret. Payload behavior is multi-stage: initial stager or script retrieves shellcode, loads a RAT or stealer, then pulls secondary modules. Families listed include CastleStealer and BoryptGrab for browser/crypto theft, Lobshot for stealthy access, PythonRAT and NetSupport RAT for interactive control, and NeedleStealer as the newer Rust/Golang credential-theft framework. Likely ATT&CK mapping: T1566 phishing/social engineering, T1204 user execution, T1059 command and scripting interpreter, T1105 ingress tool transfer, T1071 web protocols C2, T1555/T1539 browser credentials and cookies, T1552 unsecured credentials, T1497/T1622 sandbox or environment checks where packed Rust/Go loaders are used. Persistence commonly lands through Run keys, scheduled tasks, browser extension abuse, or RAT service installation; validate against your telemetry rather than assuming one fixed artifact.
MCP/AI-agent abuse: exposed or unauthenticated MCP servers are treated like cloud control planes. Operators enumerate tools, read files, execute shell commands and query secrets stores. This is llmjacking-adjacent behavior but the key enterprise risk is credential and token discovery through agent permissions, AWS Bedrock access, Kubernetes secrets and over-privileged service accounts.
RecruitTrap: recruitment-themed enterprise phishing with victim screening. Domains imitate major brands and career portals. Desktop uses Browser-in-the-Browser to fake a trusted login window; mobile uses full-screen counterfeit pages that hide URL indicators. Objective is enterprise credentials and OAuth tokens, especially where mobile users cannot inspect the address bar.
IOC Analysis
The CastleLoader pulse includes domains, file hashes and two CVE entries. Operationalize domains such as teamsvoicepremium.com, italianhitech.com, ebedidance.com, drrajivparti.com and p-rala.com as DNS, proxy, TLS SNI and EDR network blocks, but treat CVE-2026-0257 and CVE-2026-48558 as pulse-supplied references requiring validation against vendor advisories before emergency patching. Hash d26ea6828cc01ae151d99bbee78c4e6d132e9077842a558bce3901fa0970d9be should be hunted in EDR, email detonation, browser download cache and software inventory.
RecruitTrap domains such as hbc-careers.com, fifahr-careers.com, mckinsey-careers.com, aa-careers.com, levis-careers.com, andmore-global.com and expedia-careers.com should be blocked at secure web gateway, DNS sinkhole, mobile threat defense and IdP sign-in risk engines. Note the presence of careers.com in the sample may be ambiguous or context-dependent; validate before blocking a potentially legitimate domain.
The MCP pulse has no released indicators. Hunt behavior instead: unauthenticated MCP endpoint exposure, tool-list enumeration bursts, secrets-store reads, shell command execution from agent processes, container escape attempts and Kubernetes API anomalies.
Recommended tooling: OTX CLI/alienvault-otx for pulse enrichment, MISP/OpenCTI for IOC normalization, Sigma for portable detections, Microsoft Sentinel/Defender KQL for endpoint and identity hunting, Zeek/Suricata for DNS/TLS metadata, and osquery/Fleet for fleet-wide artifact sweeps.
Detection Engineering
---
title: CastleLoader NeedleStealer Script Stager to Stealer or RAT Execution
id: 8f0d6f5e-7a9f-4a9d-9f10-0a5castle001
status: experimental
description: Detects PowerShell/IronPython style staging and child processes consistent with CastleLoader campaigns delivering CastleStealer, NeedleStealer, PythonRAT, Lobshot, BoryptGrab or NetSupport RAT.
references:
- https://arcticwolf.com/resources/blog/castleloader-new-campaigns-new-tooling-and-the-needlestealer-connection/
author: Security Arsenal
logsource:
category: process_creation
product: windows
detection:
selection_parent:
ParentImage|endswith:
- '\powershell.exe'
- '\pwsh.exe'
- '\wscript.exe'
- '\cscript.exe'
- '\mshta.exe'
- '\rundll32.exe'
selection_child:
Image|endswith:
- '\python.exe'
- '\ipy.exe'
- '\rundll32.exe'
- '\regsvr32.exe'
- '\bitsadmin.exe'
- '\curl.exe'
- '\netsupport*.exe'
- '\nsclient*.exe'
selection_cmd:
CommandLine|contains:
- 'FromBase64String'
- 'IEX'
- 'DownloadString'
- 'IronPython'
- 'shellcode'
- 'Reflective'
- 'castle'
- 'needle'
condition: selection_parent and selection_child and 1 of selection_cmd
falsepositives:
- Admin automation using PowerShell to invoke Python or installers
level: high
tags:
- attack.execution
- attack.t1059
- attack.t1105
- attack.t1204
---
title: Suspicious MCP Secrets Enumeration and Shell Execution
id: 7a2mcp00-2026-4c4f-9a11-mcpsecrets022
status: experimental
description: Flags rapid MCP tool enumeration followed by shell commands, file reads and secrets-store lookups against AI agent infrastructure.
references:
- https://beelzebub.ai/blog/it-thought-it-had-won/
author: Security Arsenal
logsource:
product: kubernetes
service: audit
detection:
selection_api:
verb:
- list
- get
- create
objectRef.resource:
- secrets
- pods
- serviceaccounts
- configmaps
selection_exec:
verb: create
objectRef.subresource: exec
keywords:
- 'mcp'
- 'modelcontextprotocol'
- 'bedrock'
- 'aws'
- 'token'
condition: selection_exec or (selection_api and keywords)
falsepositives:
- Platform operators debugging agent frameworks
level: critical
tags:
- attack.discovery
- attack.credential_access
- attack.t1552
- attack.t1613
---
title: RecruitTrap Enterprise OAuth Phishing Domain Resolution
id: 9b1rec00-2026-4d5b-9c22-recruittrap033
status: experimental
description: Detects DNS or proxy access to recruitment-themed credential harvesting domains reported in OTX for RecruitTrap.
references:
- https://zimperium.com/blog/extended-rapid-response-zimperium-identifies-recruittrap-recruit-scams-are-targeting-enterprise-credentials-on-mobile
author: Security Arsenal
logsource:
category: dns
detection:
selection_domain:
query|contains:
- 'hbc-careers.com'
- 'fifahr-careers.com'
- 'mckinsey-careers.com'
- 'aa-careers.com'
- 'levis-careers.com'
- 'andmore-global.com'
- 'expedia-careers.com'
condition: selection_domain
falsepositives:
- Threat research and sandbox detonation
level: high
tags:
- attack.initial_access
- attack.t1566
- attack.t1557
let bad_domains = dynamic(["teamsvoicepremium.com","italianhitech.com","ebedidance.com","drrajivparti.com","p-rala.com","hbc-careers.com","fifahr-careers.com","mckinsey-careers.com","aa-careers.com","levis-careers.com","andmore-global.com","expedia-careers.com"]);
let suspect_hash = "d26ea6828cc01ae151d99bbee78c4e6d132e9077842a558bce3901fa0970d9be";
union isfuzzy=true
(DeviceNetworkEvents
| where Timestamp > ago(14d)
| where RemoteUrl has_any (bad_domains) or RemoteIP in ()
| project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RemoteUrl, RemoteIP, RemotePort, ActionType),
(DeviceProcessEvents
| where Timestamp > ago(14d)
| where SHA256 == suspect_hash or ProcessCommandLine has_any ("FromBase64String","IEX","DownloadString","IronPython","shellcode","NeedleStealer","CastleLoader","NetSupport","BoryptGrab","Lobshot")
| project Timestamp, DeviceName, AccountName, FileName, FolderPath, SHA256, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine),
(DeviceEvents
| where Timestamp > ago(14d)
| where ActionType has_any ("ScheduledTaskCreated","RegistryValueSet","BrowserExtensionInstalled")
| where AdditionalFields has_any ("Run\\","Needle","Castle","careers","oauth","token")
| project Timestamp, DeviceName, ActionType, FileName, FolderPath, RegistryKey, RegistryValueName, RegistryValueData, AdditionalFields)
$ErrorActionPreference='SilentlyContinue'
$domains=@('teamsvoicepremium.com','italianhitech.com','ebedidance.com','drrajivparti.com','p-rala.com','hbc-careers.com','fifahr-careers.com','mckinsey-careers.com','aa-careers.com','levis-careers.com','andmore-global.com','expedia-careers.com')
$hash='d26ea6828cc01ae151d99bbee78c4e6d132e9077842a558bce3901fa0970d9be'
Write-Host '[*] DNS cache hits'
Get-DnsClientCache | Where-Object {$domains -contains $_.Entry -or $_.Data -match ($domains -join '|')} | Select-Object Entry,Data,TimeToLive
Write-Host '[*] Established/remembered connections to suspect infrastructure'
Get-NetTCPConnection | Where-Object {$_.State -eq 'Established'} | ForEach-Object { try { $h=[System.Net.Dns]::GetHostEntry($_.RemoteAddress).HostName; if($domains -contains $h){[pscustomobject]@{Local=$_.LocalPort;Remote=$_.RemoteAddress;Host=$h;OwningPid=$_.OwningProcess}} } catch {} }
Write-Host '[*] Hash sweep in common execution locations'
$paths=@($env:TEMP,$env:LOCALAPPDATA,$env:APPDATA,"$env:ProgramData","$env:USERPROFILE\Downloads")
foreach($p in $paths){ Get-ChildItem $p -Recurse -File -ErrorAction SilentlyContinue | Where-Object {$_.Length -lt 75MB} | ForEach-Object { $fh=(Get-FileHash $_.FullName -Algorithm SHA256).Hash.ToLower(); if($fh -eq $hash){[pscustomobject]@{Path=$_.FullName;SHA256=$fh;Created=$_.CreationTime;Modified=$_.LastWriteTime}} } }
Write-Host '[*] Persistence artifacts'
$runKeys=@('HKCU:\Software\Microsoft\Windows\CurrentVersion\Run','HKLM:\Software\Microsoft\Windows\CurrentVersion\Run','HKCU:\Software\Microsoft\Windows\CurrentVersion\RunOnce')
foreach($k in $runKeys){ Get-ItemProperty $k | ForEach-Object { $_.PSObject.Properties | Where-Object {$_.Value -match 'powershell|python|ipy|netsupport|needle|castle|lobshot|borypt|AppData|ProgramData'} | Select-Object @{n='Key';e={$k}},Name,Value } }
Get-ScheduledTask | Where-Object {$_.Actions.Execute -match 'powershell|python|wscript|mshta|rundll32' -and $_.TaskPath -notlike '\Microsoft\*'} | Select-Object TaskName,TaskPath,@{n='Action';e={$_.Actions.Execute}},@{n='Args';e={$_.Actions.Arguments}}
Write-Host '[*] Browser extension roots for manual review'
Get-ChildItem "$env:LOCALAPPDATA\Google\Chrome\User Data\Default\Extensions","$env:LOCALAPPDATA\Microsoft\Edge\User Data\Default\Extensions" -Directory -ErrorAction SilentlyContinue | Select-Object FullName,LastWriteTime
Response Priorities
- Immediate: block and sinkhole the listed domains after legitimacy validation, especially ambiguous careers.com; add the SHA256 to EDR/AV deny lists; alert on OAuth consent grants, impossible travel and token replay following visits to RecruitTrap domains; isolate exposed MCP servers from the internet and disable unauthenticated tool execution.
- 24h: force password and session revocation for users who resolved or visited career-themed domains; revoke OAuth refresh tokens and enterprise app consents; rotate browser-synced credentials, cloud keys, Kubernetes secrets, AWS Bedrock credentials and CI/CD variables if MCP or stealer telemetry is present; search mail and mobile MTD logs for HR-impersonation lures.
- 1 week: require phishing-resistant MFA and conditional access for mobile sign-in; restrict OAuth consent to admin-approved apps; constrain AI agents with least-privilege tools, no default secrets read, egress allowlists and signed MCP clients; segment build/agent nodes from domain controllers and secrets managers; add detections for Rust/Go packed binaries, PowerShell-to-Python/IronPython chains and browser extension changes.
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.