The latest OTX pulse cluster reveals a dual-pronged credential-theft and initial-access campaign targeting enterprise identity infrastructure and perimeter appliances. On one flank, the MadApe phishing kit (Group-IB, 2026-10-29) is running a multi-stage Microsoft Device Code phishing operation that bypasses traditional credential-harvesting pages entirely — instead abusing the legitimate OAuth 2.0 Device Authorization Grant flow to silently mint access tokens against victim Microsoft 365 tenants. On the other flank, two critical, pre-authentication command-injection vulnerabilities — CVE-2026-73570 (Zimbra Collaboration Suite SNMP path) and CVE-2026-88771 (Citrix NetScaler ADC/Gateway) — are being actively exploited to drop JSP webshells (China Chopper, Godzilla) and Perl-based reverse shells (update_c08937.pl), enabling direct credential extraction from mail stores and NetScaler authentication databases.
The attack chains converge on credential and session theft. MadApe requires no endpoint malware — it weaponizes Microsoft's own device-code endpoint (login.microsoftonline.com/oauth2/v2.0/devicecode) against users. The Zimbra and NetScaler intrusions follow a classic perimeter exploitation → webshell → credential harvesting → lateral movement pattern. The fifth pulse — unauthorized AI relays installing genuine Claude Code/Codex CLIs and rerouting traffic through aiok.me / nuoda.vip infrastructure — signals a third, quieter vector: API-key and LLM session hijacking targeting development teams in APAC manufacturing and semiconductor verticals.
Collectively, these pulses describe a threat ecosystem focused on identity-layer compromise at scale: steal tokens, steal passwords, or intercept API keys — then monetize access on dark-web marketplaces. The 565+ domains in the MadApe pulse alone indicate a well-resourced, rotating phishing infrastructure. All five pulses are TLP:WHITE and attribution is currently unknown, though the tooling overlap (China Chopper, PowerShell downloaders, SSH persistence) suggests a mix of criminal access-brokers and state-aligned operators.
Threat Actor / Malware Profile
MadApe Phishing Kit (Microsoft 365 Device Code Abuse)
- Distribution: Business-themed PDF lures (
invoice,contract,RFQ) delivered via email and malvertising. PDFs contain QR codes and shortened URLs that pivot through 3–7 stage redirect chains across 565+ disposable domains (sucdens.com,cepoffices.com,nsboards.com). - Payload behavior: No traditional payload. Victims land on a pixel-perfect fake Microsoft document-sharing page that displays a legitimate Microsoft Device Code and instructs them to enter it at
microsoft.com/devicelogin. Because the code is generated by the attacker's own OAuth client, entering it grants the attacker's app delegated access to Mail.Read, Files.ReadWrite, and offline_access — without the victim ever typing a password on a phishing page. - C2 / Token Exfiltration: Stolen access tokens and refresh tokens are exfiltrated via HTTPS POST to attacker-controlled API endpoints hosted on the redirect-chain domains, often disguised as telemetry or analytics beacons.
- Persistence: Refresh tokens are the persistence mechanism. MadApe requests
offline_accessscope, allowing token refresh for up to 90 days. Attackers also register malicious OAuth consent grants to survive password resets. - Anti-analysis: Redirect chains inspect User-Agent and IP geolocation; security sandboxes receive benign 404 pages. The kit uses dynamic JavaScript decryption of the final landing URL and randomizes the OAuth client ID per campaign wave.
CVE-2026-73570 — Zimbra SNMP Command Injection
- Vector: Unauthenticated HTTP POST to the Zimbra SNMP notification handler (
/service/admin/soapor SNMP trap receiver) with crafted OID strings containing shell metacharacters. - Payloads:
China Chopper(S0020) andGodzillaWebShellJSP webshells dropped into/opt/zimbra/jetty/webapps/zimbra/.LooptikandNeedyMantisreverse shells for interactive access. - Persistence: Cron entries (
@reboot /tmp/.x11-unix/update.sh) and injection of attacker SSH keys intozimbrauser'sauthorized_keys. - Objective: Dump Zimbra LDAP credentials, extract mailbox GAL, and harvest cleartext passwords from
zmlocalconfig.
CVE-2026-88771 — Citrix NetScaler Pre-Auth Command Injection
- Vector: Crafted HTTP request to the NetScaler management interface (port 443) exploiting insufficient input sanitization in the
NSPPE(NetScaler Packet Processing Engine) authentication path. - Payloads:
main.pyPython stager andupdate_c08937.plPerl reverse shell hosted athttp://64.94.85.67:443/. Creates attacker-controlled local accounts withpitboss-prefixed usernames. - Persistence: Adds hidden CLI users via
add system user pitboss<random>and modifiesns.confto survive reboots. - Objective: Harvest NetScaler Gateway credentials and session cookies to pivot into internal networks as an authenticated VPN user.
Trojanized Claude Code Extension & Unauthorized AI Relays
- Vector: Supply-chain compromise of Claude Code extension v2.1.313 on Cursor Marketplace; enterprise systems in APAC reconfigured to route OpenAI/Anthropic CLI traffic through
aiok.me,nuoda.vip, andmirbuds.comrelays. - Persistence: SSH key labeled
svc-telemetryappended to~/.ssh/authorized_keys; reverse SSH tunnel to attacker infrastructure. PowerShell-based sandbox detection (if ($env:COMPUTERNAME -match 'SANDBOX') { exit }). - Objective: Intercept LLM API keys, exfiltrate proprietary code and prompts, and maintain long-term SSH access to developer workstations.
IOC Analysis
This pulse cluster contains 614 indicators across five pulses, spanning four high-value IOC classes:
| IOC Type | Count | Examples | SOC Action |
|---|---|---|---|
| Domain / Hostname | 580+ | sucdenses.com, psk1zim.abrdns.com, vibe.aiok.me, aiok.me | Block at DNS sinkhole / secure web gateway. Add to TI platform watchlist. Hunt proxy logs for 90-day lookback. |
| FileHash-SHA256 | 20+ | 18756b75…de927 (Claude extension), e9fe4396…242c (NetScaler payload), dee5af1c…c48a (Zimbra webshell) | Block in EDR/AV. Hunt file-creation events across endpoints, mail gateways, and web servers. |
| URL | 3 | http://64.94.85.67:443/update_c08937.pl | Block at egress firewall and SWG. Hunt for any HTTP(S) requests to this IP on port 443. |
| CVE | 2 | CVE-2026-73570, CVE-2026-88771 | Trigger emergency patch validation. Cross-reference with vulnerability scanner and asset inventory. |
Operationalization guidance:
- Feed domains/URLs into Microsoft Sentinel Threat Intelligence or MISP via TAXII. Set
valid_until90 days for phishing domains; 365 days for C2/repair domains. - SHA256 hashes should be imported into CrowdStrike Custom IOA, Defender for Endpoint Indicators, or Carbon Black Reputation Override.
- The
psk1zim.abrdns.comhostname resolves to Zimbra exploit C2 — flag any DNS resolution of*.abrdns.comas high-fidelity. - For NetScaler, monitor for HTTP requests containing
update_c08937.plorupdate_result_3567cs.tgzin URI — these are post-exploitation staging artifacts.
Detection Engineering
---
title: MadApe Microsoft Device Code Phishing - Suspicious Device Code Flow Initiation
id: 9e2a4f8c-1b7d-4e3a-9f5c-3d8a2c6e1b4f
status: experimental
description: Detects OAuth 2.0 Device Authorization Grant flow initiation from non-managed devices or unusual locations, characteristic of MadApe phishing kit activity.
author: Security Arsenal Threat Intel
references:
- https://www.group-ib.com/blog/madape-microsoft-device-code-phishing-kit/
date: 2026/10/31
logsource:
product: azure
service: signinlogs
detection:
selection:
- authenticationProtocol: 'deviceCode'
- deviceDetail.browser: 'Unknown'
condition: selection
timeframe: 1h
falsepositives:
- Legitimate device code flow for CLI tools (Azure CLI, VS Code)
level: high
tags:
- attack.t1528
- attack.t1078.004
---
title: Zimbra CVE-2026-73570 - JSP WebShell Creation in Webapps Directory
id: 7f3b1e9a-4c2d-4a8e-b1c5-9d7e2f4a6c8b
status: experimental
description: Detects creation of JSP files in Zimbra webapps directory, consistent with China Chopper / Godzilla webshell deployment following CVE-2026-73570 exploitation.
author: Security Arsenal Threat Intel
references:
- https://www.microsoft.com/en-us/security/blog/2026/09/30/unauthenticated-command-injection-on-internet-facing-mail-servers-tracking-cve-2026-73570/
date: 2026/10/31
logsource:
product: linux
category: file_event
detection:
selection:
TargetFilename|contains:
- '/opt/zimbra/jetty/webapps/zimbra/'
- '/opt/zimbra/jetty/webapps/zimbraAdmin/'
TargetFilename|endswith:
- '.jsp'
- '.jspx'
condition: selection
falsepositives:
- Zimbra updates or legitimate plugin installation
level: critical
tags:
- attack.t1190
- attack.t1505.003
- cve.2026-73570
---
title: Citrix NetScaler CVE-2026-88771 - Suspicious Perl Reverse Shell Execution
id: 2c8d4e6f-9a1b-4c3d-8e5f-7a9b1c3d5e7f
status: experimental
description: Detects execution of Perl scripts with suspicious naming patterns (update_c*.pl) or network connections to known NetScaler exploitation C2.
author: Security Arsenal Threat Intel
references:
- https://www.levelblue.com/blogs/spiderlabs-blog/citrix-netscaler-cve-2026-88771-observed-exploitation-artifacts-and-hunt-indicators
date: 2026/10/31
logsource:
category: process_creation
product: windows
detection:
selection_image:
Image|endswith:
- '\perl.exe'
- '\perl5*'
selection_cmdline:
CommandLine|contains:
- 'update_c'
- '.pl '
- 'socket'
- '64.94.85.67'
condition: selection_image and selection_cmdline
falsepositives:
- Legitimate Perl automation scripts
level: critical
tags:
- attack.t1190
- attack.t1059.001
- attack.t1071.001
- cve.2026-88771
---
title: Trojanized Claude Code Extension - SSH Key Persistence
id: 5a7b9c1d-3e5f-4a7b-9c2d-4e6f8a1b3c5d
status: experimental
description: Detects modification of SSH authorized_keys file or creation of reverse SSH tunnels, consistent with the trojanized Claude Code extension backdoor.
author: Security Arsenal Threat Intel
references:
- https://opensourcemalware.com/blog/trojanized-claude-code-extension-plants-persistent-ssh-backdoor
date: 2026/10/31
logsource:
category: file_event
product: windows
detection:
selection:
TargetFilename|endswith:
- '\.ssh\authorized_keys'
- '\.ssh\authorized_keys2'
filter_legitimate:
Image|contains:
- '\Windows\System32\'
- '\OpenSSH\'
condition: selection and not filter_legitimate
falsepositives:
- Legitimate SSH key deployment via GPO or configuration management
level: high
tags:
- attack.t1133
- attack.t1098.004
- attack.t1572
// KQL Hunt: MadApe Device Code Phishing + Zimbra/NetScaler Exploitation IOCs
// Microsoft Sentinel | 90-day lookback recommended
let lookback = 90d;
let madape_domains = dynamic(["sucdens.com","cepoffices.com","zakosta.info","nsboards.com","adastraerrans.com","travestiilan.com","nysndigital.com","powerlivings.com"]);
let zimbra_c2 = dynamic(["psk1zim.abrdns.com","tls.psk1zim.abrdns.com"]);
let ai_relays = dynamic(["vibe.aiok.me","aiok.me","sorryios.io","nuoda.vip","chat.nuoda.vip","mirbuds.com"]);
let netscaler_c2 = "64.94.85.67";
let sha256_hashes = dynamic([
"18756b75afedee74bbf49832a1b1dada4961672c41d595be5c1bbe75709de927",
"7e0a52885fadee05544a9e99eb18c792bec05900a5e1a66d68f8383decb0e278",
"ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15",
"e9fe43968c6c0955300e3bc4d7fb0b05a18570b4733aaf4f5c6f7f09be5a242c",
"974b69782fdf5d67b97cfd508465939e44ee10798dbcc1e82b92d78776bad938",
"dee5af1c0f76b45d28bafd6e60c07bb8e391d98addf81ef8f13d073acdb3c48a",
"aea991f694911e321b0ab97534f2ad0291c392c0a43dabff664c563618bd036d",
"6ab7de2509038edf580aef6229c1c3db17f4da8f2d7d940818faf617d1938244",
"bf28f38122bf20d5fac969cc414daa6a890cdea872d389ca93d2092b6b7773cf",
"b594a42b8f1c6f090327bb9a3361c2d3515537fb7ac8da6b9061b9a3f330e159"
]);
// Hunt 1: Device Code authentication events (MadApe)
union isfuzzy=true
(SigninLogs
| where TimeGenerated >= ago(lookback)
| where AuthenticationProtocol == "deviceCode" or (AuthenticationDetails has "device code")
| project TimeGenerated, UserPrincipalName, IPAddress, AppDisplayName, DeviceDetail, Location, Status, AuthenticationProtocol
| extend Hunt = "MadApe DeviceCode"),
// Hunt 2: Network connections to phishing/C2 domains
(DeviceNetworkEvents
| where TimeGenerated >= ago(lookback)
| where RemoteUrl has_any (madape_domains) or RemoteUrl has_any (zimbra_c2) or RemoteUrl has_any (ai_relays) or RemoteIP == netscaler_c2
| project TimeGenerated, DeviceName, InitiatingProcessAccountName, InitiatingProcessFileName, RemoteUrl, RemoteIP, RemotePort
| extend Hunt = "C2/Phishing Domain"),
// Hunt 3: File hash matches on endpoints
(DeviceFileEvents
| where TimeGenerated >= ago(lookback)
| where SHA256 in~ (sha256_hashes)
| project TimeGenerated, DeviceName, FileName, FolderPath, SHA256, InitiatingProcessFileName
| extend Hunt = "Malicious File Hash"),
// Hunt 4: Process creation for NetScaler Perl payload or SSH backdoor
(DeviceProcessEvents
| where TimeGenerated >= ago(lookback)
| where (FileName =~ "perl.exe" and ProcessCommandLine has_any ("update_c", ".pl")) or
(FileName =~ "ssh.exe" and ProcessCommandLine has_any ("-R", "svc-telemetry"))
| project TimeGenerated, DeviceName, FileName, ProcessCommandLine, AccountName, InitiatingProcessFileName
| extend Hunt = "Suspicious Process")
| order by TimeGenerated desc
# PowerShell IOC Hunt Script - MadApe, Zimbra, NetScaler, Claude Extension Backdoor
# Run as Administrator on endpoints; outputs CSV to $env:TEMP\OTX_Hunt_Results.csv
# Requires: PowerShell 5.1+; no external modules
$ErrorActionPreference = 'SilentlyContinue'
$results = @()
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
# --- 1. Check for malicious SHA256 hashes on disk ---
$malHashes = @(
"18756b75afedee74bbf49832a1b1dada4961672c41d595be5c1bbe75709de927",
"7e0a52885fadee05544a9e99eb18c792bec05900a5e1a66d68f8383decb0e278",
"ecb58cb29078d9646ad1dcdbe51526f2d9cfea06be5fb2ab183e8ecc3ab6bf15",
"e9fe43968c6c0955300e3bc4d7fb0b05a18570b4733aaf4f5c6f7f09be5a242c",
"974b69782fdf5d67b97cfd508465939e44ee10798dbcc1e82b92d78776bad938",
"dee5af1c0f76b45d28bafd6e60c07bb8e391d98addf81ef8f13d073acdb3c48a",
"aea991f694911e321b0ab97534f2ad0291c392c0a43dabff664c563618bd036d",
"6ab7de2509038edf580aef6229c1c3db17f4da8f2d7d940818faf617d1938244",
"bf28f38122bf20d5fac969cc414daa6a890cdea872d389ca93d2092b6b7773cf",
"b594a42b8f1c6f090327bb9a3361c2d3515537fb7ac8da6b9061b9a3f330e159"
)
Write-Host "[+] Scanning common payload drop paths for malicious hashes..."
$scanPaths = @($env:TEMP, $env:APPDATA, $env:LOCALAPPDATA, "C:\ProgramData", "C:\Users\Public\Downloads")
foreach ($path in $scanPaths) {
Get-ChildItem -Path $path -Recurse -File -ErrorAction SilentlyContinue | ForEach-Object {
$hash = (Get-FileHash -Path $_.FullName -Algorithm SHA256).Hash.ToLower()
if ($malHashes -contains $hash) {
$results += [PSCustomObject]@{
Timestamp = $timestamp
HuntType = "Malicious File Hash"
Host = $env:COMPUTERNAME
Indicator = $hash
Path = $_.FullName
Details = "Matched OTX pulse IOC"
}
}
}
}
# --- 2. Check SSH authorized_keys for 'svc-telemetry' backdoor ---
Write-Host "[+] Checking SSH authorized_keys for suspicious keys..."
$userDirs = Get-ChildItem "C:\Users" -Directory
foreach ($user in $userDirs) {
$authKeys = Join-Path $user.FullName ".ssh\authorized_keys"
if (Test-Path $authKeys) {
$content = Get-Content $authKeys -Raw
if ($content -match "svc-telemetry") {
$results += [PSCustomObject]@{
Timestamp = $timestamp
HuntType = "SSH Backdoor Key"
Host = $env:COMPUTERNAME
Indicator = "svc-telemetry"
Path = $authKeys
Details = "Trojanized Claude Code extension persistence"
}
}
}
}
# --- 3. Check for suspicious SSH reverse tunnels ---
Write-Host "[+] Checking for active SSH reverse tunnels..."
$sshConns = Get-NetTCPConnection | Where-Object { $_.OwningProcess -ne 0 } | ForEach-Object {
$proc = Get-Process -Id $_.OwningProcess
if ($proc.ProcessName -match "ssh" -and $_.RemotePort -eq 22 -and $_.State -eq "Established") {
$cmdLine = (Get-CimInstance Win32_Process -Filter "ProcessId = $($_.OwningProcess)").CommandLine
if ($cmdLine -match "-R") {
$results += [PSCustomObject]@{
Timestamp = $timestamp
HuntType = "SSH Reverse Tunnel"
Host = $env:COMPUTERNAME
Indicator = $cmdLine
Path = $proc.Path
Details = "Potential exfiltration or C2 tunnel"
}
}
}
}
# --- 4. Check for NetScaler Perl payload artifacts ---
Write-Host "[+] Checking for Perl reverse-shell artifacts..."
$perlProcs = Get-CimInstance Win32_Process -Filter "Name like '%perl%'"
foreach ($proc in $perlProcs) {
if ($proc.CommandLine -match "update_c" -or $proc.CommandLine -match "\.pl") {
$results += [PSCustomObject]@{
Timestamp = $timestamp
HuntType = "Suspicious Perl Process"
Host = $env:COMPUTERNAME
Indicator = $proc.CommandLine
Path = $proc.ExecutablePath
Details = "Possible NetScaler CVE-2026-88771 payload"
}
}
}
# --- 5. Check DNS cache for MadApe / AI relay domains ---
Write-Host "[+] Checking DNS cache for malicious domains..."
$badDomains = @("sucdens.com","cepoffices.com","zakosta.info","nsboards.com","adastraerrans.com","travestiilan.com","nysndigital.com","powerlivings.com","aiok.me","nuoda.vip","mirbuds.com","psk1zim.abrdns.com")
$dnsCache = Get-DnsClientCache
foreach ($entry in $dnsCache) {
foreach ($domain in $badDomains) {
if ($entry.Name -like "*$domain*") {
$results += [PSCustomObject]@{
Timestamp = $timestamp
HuntType = "Malicious DNS Resolution"
Host = $env:COMPUTERNAME
Indicator = $entry.Name
Path = $entry.IPAddress
Details = "Matched OTX phishing/C2 domain"
}
}
}
}
# --- 6. Check for suspicious OAuth consent (MadApe) via registry/MSGraph note ---
# Note: Full OAuth consent hunting requires MS Graph; this checks for suspicious device code auth in event logs
Write-Host "[+] Checking Windows Event Logs for Device Code auth events..."
$events = Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4624; StartTime=(Get-Date).AddDays(-7)} | Where-Object {
$_.Message -match "device code" -or $_.Message -match "deviceCode"
}
foreach ($event in $events) {
$results += [PSCustomObject]@{
Timestamp = $event.TimeCreated.ToString("yyyy-MM-dd HH:mm:ss")
HuntType = "Device Code Auth Event"
Host = $env:COMPUTERNAME
Indicator = "EventID 4624"
Path = $event.Message.Substring(0, [Math]::Min(200, $event.Message.Length))
Details = "Review for MadApe phishing kit activity"
}
}
# --- Output ---
if ($results.Count -gt 0) {
$outputPath = "$env:TEMP\OTX_Hunt_Results_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv"
$results | Export-Csv -Path $outputPath -NoTypeInformation
Write-Host "[!] $($results.Count) suspicious indicators found. Results saved to: $outputPath"
$results | Format-Table -AutoSize
} else {
Write-Host "[+] No indicators of compromise found."
}
Write-Host "[i] Hunt complete. Review findings and correlate with SIEM/EDR telemetry."
Response Priorities
Immediate (0–4 hours)
- Block all 614 IOCs at the DNS layer (sinkhole), secure web gateway, and EDR. Prioritize
64.94.85.67(NetScaler C2),*.abrdns.com(Zimbra C2), and the 565+ MadApe phishing domains. - Emergency patch validation for CVE-2026-73570 (Zimbra) and CVE-2026-88771 (NetScaler). If patching is not immediate, isolate appliances from the internet and restrict management interface access to jump-hosts only.
- Hunt for execution artifacts: Search for
update_c*.pl,main.py, JSP files in Zimbra webapps, andsvc-telemetrySSH keys across the fleet using the KQL and PowerShell scripts above. - Revoke suspicious OAuth grants: In Microsoft 365, audit Enterprise Applications for any app with
offline_access+Mail.Readscopes granted in the last 30 days. Revoke refresh tokens for any session usingdeviceCodeauthentication from unmanaged devices.
24 Hours
- Identity verification: Force password reset and MFA re-registration for any user who authenticated via device code flow or whose mailbox shows signs of unauthorized access (new Inbox rules, forwarding, or unusual Sent Items).
- NetScaler/Zimbra credential rotation: Reset all local admin accounts on NetScaler and Zimbra. Rotate LDAP bind accounts, service accounts, and any credentials stored in
ns.conforzmlocalconfig. - LLM API key audit: If the unauthorized AI relay pulse applies to your environment (APAC manufacturing/semiconductor/healthcare), rotate all OpenAI and Anthropic API keys. Audit Claude Code/Codex CLI installations for unexpected relay configurations.
- Dark-web credential monitoring: Submit your corporate email domains to your TI provider to check for fresh credential dumps tied to Zimbra/NetScaler exploitation.
1 Week
- Architecture hardening:
- Disable Microsoft Device Code flow tenant-wide unless explicitly required for IoT/CLI scenarios (Azure AD → Conditional Access → Authentication flows).
- Segment mail servers and NetScaler appliances behind a WAF with virtual patching for CVE-2026-73570 and CVE-2026-88771.
- Enforce FIDO2/passkeys for M365 to make device-code phishing unprofitable.
- Detection-as-code deployment: Promote the Sigma rules above to production. Tune false positives (e.g., legitimate Perl automation, Azure CLI device code auth) via allow-lists.
- Supply-chain review: Audit VS Code / Cursor Marketplace extensions across developer workstations. Remove Claude Code extension v2.1.313 and re-install from verified publisher only.
- Threat intel integration: Automate OTX pulse ingestion into MISP / Sentinel via TAXII or API to ensure future pulses are operationalized within 15 minutes of publication.
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.