Back to Intelligence

FakeAgent Malvertising + SectopRAT/StealC, npm/Rust Supply Chain Stealers & N4D Mesh Controller: OTX Pulse Analysis — Enterprise Detection Pack

SA
Security Arsenal Team
August 22, 2026
12 min read

Five live OTX pulses published between August 20–22, 2026 paint a coherent and alarming picture: credential theft operations are converging on trusted platforms — AI tool downloads, developer package registries, and internet-facing AI infrastructure — as primary distribution vectors. The common denominator across every campaign in this batch is the theft of credentials, browser secrets, crypto wallets, and CI/CD tokens, which then feed dark web initial-access markets.


Threat Summary

This pulse cluster reveals a threat landscape in which trust itself is the attack surface:

  1. FakeAgent (SectopRAT + StealC) — A malvertising operation poisoned Bing search results for "Claude Desktop," redirecting victims to a malicious Claude Artifact hosted on the legitimate claude.ai domain. The artifact funneled users to attacker infrastructure (download-app.us, 107.189.24.255) distributing a fake installer. Twenty-nine organizations were compromised in a 48-hour window (July 21–22, 2026). The final payload is a .NET RAT (SectopRAT) paired with the StealC infostealer.

  2. BRIDGEHEAD (npm typosquatting) — Forty typosquatted npm packages mimicking chalk, axios, commander, lodash, react, and typescript profile hosts via install scripts. Windows/WSL victims receive a 22MB Rust executable pulled from GitHub that executes entirely in memory, targeting browser credentials and cryptocurrency wallets, with Telegram-based exfiltration.

  3. Rust crate compromise (proc-macro1) — A coordinated supply chain attack compromised three legitimate crates (arrayref, internment, append-only-vec) by injecting a malicious dependency, proc-macro1 (typosquat of proc-macro2). The package's build.rs executes cross-platform credential-stealing malware at build time, compromising developer machines and CI/CD pipelines. Payloads staged from 23.254.165.112:9089.

  4. N4D Mesh Controller / "go-titan" — A Linux campaign exploiting exposed Model Context Protocol (MCP) servers and internet-facing services (Ray dashboards among them) across five CVEs for credential theft, lateral movement, and C2. Newly rotated infrastructure includes 209.99.186.235 and cdnorigin.net; the UPX-packed agent is labeled "33.8-go-titan."

  5. Education-sector surge — Education remains the world's most-attacked sector (4,696 weekly attacks per org, +8% YoY), with threat actors registering lookalike domains (checkmyschool.org, education-gov.com, students-portal.com, studentloansyyyy.com) to harvest student and faculty credentials at scale.

Collective objective: mass credential and session-token harvesting to monetize via dark web access brokerage. The stolen developer credentials from the supply chain campaigns are particularly dangerous — they enable downstream compromise of every consumer of the poisoned packages.

Threat Actor / Malware Profile

SectopRAT (FakeAgent campaign)

  • Distribution: Search-engine malvertising → malicious Claude Artifact on legitimate claude.ai → fake installer download.
  • Payload behavior: .NET-based remote access trojan deployed alongside StealC, which extracts browser cookies, saved credentials, crypto wallets, and session tokens. SectopRAT provides hands-on keyboard access and is known for its "second desktop" capability for covert browser session hijacking.
  • Anti-analysis: VMProtect packing, DirectX shader-based encryption, and GPU-based anti-VM checks (the malware fingerprints GPU behavior to detect sandboxes). Uses EtherHiding — Ethereum blockchain transactions as a dead-drop/resilient C2 configuration channel, making takedown extremely difficult.
  • Delivery chain: DLL sideloading of the loader, then reflective .NET execution.

StealC

Commodity infostealer sold on dark web forums. Grabs Chromium/Gecko credentials, cookies, autofills, crypto extensions, and Discord/Telegram sessions; exfiltrates via HTTP POST to gate infrastructure before RAT deployment.

BRIDGEHEAD Rust stealer

  • Distribution: npm preinstall/install scripts in 40 typosquatted packages.
  • Payload behavior: Host profiling (Windows vs. WSL detection), then a 22MB Rust binary fetched from GitHub release assets, executed in-memory with no disk artifacts — defeating signature-based AV.
  • Exfiltration: Telegram Bot API for credential/wallet exfil.
  • Cross-boundary twist: Detects WSL and pivots from Linux into the Windows host, bridging environments most EDR stacks monitor independently.

proc-macro1 / proc-macro-en

  • Distribution: Injected as a dependency into three legitimate, popular Rust crates — no typosquat victim action required; simply running cargo build on an affected version triggers execution via build.rs.
  • Payload behavior: Cross-platform stealer executing at build time; harvests SSH keys, cloud credentials, CI/CD tokens, and browser data. Downloads staged payloads from https://23.254.165.112:9089/rust-crate_0.x.0.

N4D Mesh Controller / go-titan

  • Distribution: Exploitation of exposed MCP servers and internet-facing services (CVE-2023-48022, CVE-2026-26220, CVE-2026-27944, CVE-2026-33032, CVE-2026-39987).
  • Payload behavior: Linux loader-to-agent chain; UPX-packed agent labeled "33.8-go-titan" performs credential theft, lateral movement, and mesh-style C2. Infrastructure rotated to 209.99.186.235 and cdnorigin.net.

IOC Analysis

This batch contains 68+ indicators across five types:

TypeExamplesOperationalization
IPv4107.189.24.255, 209.99.186.235, 23.254.165.112Block at egress firewall/proxy; retro-hunt netflow & proxy logs for 90 days
Domainsdownload-app.us, cdnorigin.net, checkmyschool.org, education-gov.com, students-portal.com, studentdiscount.online, studentloansyyyy.comDNS sinkhole; alert on resolution; note the education domains are pre-attack registration indicators — block proactively
URLshttps://23.254.165.112:9089/rust-crate_0.[1-4].0URL filtering block; hunt proxy logs for direct-IP HTTPS on non-standard port 9089
File hashes (MD5/SHA1/SHA256)SectopRAT samples, BRIDGEHEAD Rust binaries, proc-macro1 payloads, N4D agentsImport into EDR blocklists; VirusTotal/OTX pivot for related samples
CVEsCVE-2023-48022 (Ray), four 2026 MCP/service CVEsVulnerability scan for exposed Ray dashboards and MCP servers; patch or isolate

Tooling: Enrich via the OTX DirectConnect API, MISP sync, or otxv2 Python SDK. Feed hashes to your EDR's custom indicator list, domains to DNS RPZ, and IPs to firewall block lists. For EtherHiding C2 config, blockchain transaction decoding requires the Huntress-published contract references — network-layer detection (below) is more reliable than attempting to block Ethereum RPC.

Detection Engineering

YAML
---
title: FakeAgent SectopRAT Fake Claude Desktop Installer Execution
id: 8f1a2b3c-4d5e-4f6a-9b0c-1d2e3f4a5b01
status: experimental
description: Detects execution of fake Claude Desktop installers and SectopRAT loader behavior associated with the FakeAgent malvertising campaign, including DLL sideloading of VMProtect-packed payloads.
author: Security Arsenal Threat Intelligence
date: 2026/08/22
references:
    - https://www.huntress.com/blog/fakeagent-claude-desktop-malvertising-ends-in-dotnet-rat
logsource:
    category: process_creation
    product: windows
detection:
    selection_img:
        Image|endswith:
            - '\claude-setup.exe'
            - '\claude desktop.exe'
            - '\claude-desktop-installer.exe'
    selection_download:
        CommandLine|contains:
            - 'download-app.us'
            - '107.189.24.255'
    selection_sideload:
        Image|endswith: '\rundll32.exe'
        CommandLine|contains:
            - 'AppData\Local\Temp'
            - 'AppData\Roaming\Claude'
    condition: selection_img or selection_download or selection_sideload
falsepositives:
    - Legitimate Claude Desktop installation from anthropic.com (validate signer and download source)
level: high
tags:
    - attack.initial_access
    - attack.t1189
    - attack.t1574.002
---
title: Malicious Package Install Script Execution - npm and Cargo Build-Time Payload
id: 8f1a2b3c-4d5e-4f6a-9b0c-1d2e3f4a5b02
status: experimental
description: Detects suspicious child processes spawned by npm install scripts or Cargo build scripts, consistent with BRIDGEHEAD npm typosquatting and the proc-macro1 Rust crate supply chain attack.
author: Security Arsenal Threat Intelligence
date: 2026/08/22
references:
    - https://www.cloudsek.com/blog/bridgehead-npm-typosquatting-wsl-windows-crypto-wallet-stealer
    - https://socket.dev/blog/popular-rust-crates-compromised
logsource:
    category: process_creation
    product: windows
detection:
    selection_parent:
        ParentImage|endswith:
            - '\node.exe'
            - '\npm.cmd'
            - '\cargo.exe'
            - '\rustc.exe'
    selection_child:
        Image|endswith:
            - '\powershell.exe'
            - '\pwsh.exe'
            - '\cmd.exe'
            - '\curl.exe'
            - '\certutil.exe'
            - '\wsl.exe'
            - '\rundll32.exe'
    selection_cli:
        CommandLine|contains:
            - 'DownloadString'
            - 'Invoke-WebRequest'
            - 'github.com'
            - '-enc '
            - 'wsl -e'
            - 'wsl.exe --exec'
    condition: selection_parent and selection_child and selection_cli
falsepositives:
    - Legitimate build scripts downloading native dependencies; tune by package allowlist
level: high
tags:
    - attack.supply_chain_compromise
    - attack.t1195.001
    - attack.t1059.001
---
title: Suspicious Direct-IP HTTPS Connection on Non-Standard Port - Supply Chain Payload Staging
id: 8f1a2b3c-4d5e-4f6a-9b0c-1d2e3f4a5b03
status: experimental
description: Detects HTTPS connections to raw IP addresses on non-standard ports matching proc-macro1 payload staging (23.254.165.112:9089) and N4D Mesh Controller infrastructure patterns.
author: Security Arsenal Threat Intelligence
date: 2026/08/22
references:
    - https://socket.dev/blog/popular-rust-crates-compromised
    - https://securitylabs.datadoghq.com/articles/n4d-mesh-controller-go-titan-new-infrastructure-hunting/
logsource:
    category: network_connection
    product: windows
detection:
    selection_ip:
        DestinationIp:
            - '23.254.165.112'
            - '107.189.24.255'
            - '209.99.186.235'
    selection_domain:
        DestinationHostname|endswith:
            - 'download-app.us'
            - 'cdnorigin.net'
    selection_port:
        DestinationPort:
            - 9089
    condition: selection_ip or selection_domain or selection_port
falsepositives:
    - Internal direct-IP services; restrict selection_port to external ranges if needed
level: critical
tags:
    - attack.command_and_control
    - attack.t1071.001
KQL — Microsoft Sentinel / Defender
// Security Arsenal - OTX Pulse Hunt: FakeAgent/BRIDGEHEAD/proc-macro1/N4D IOCs & behaviors
// Microsoft Sentinel / Defender XDR - 30-day retro hunt
let MaliciousIPs = dynamic(["107.189.24.255", "209.99.186.235", "23.254.165.112"]);
let MaliciousDomains = dynamic(["download-app.us", "cdnorigin.net", "checkmyschool.org", "education-gov.com", "studentdiscount.online", "studentloansyyyy.com", "students-portal.com"]);
let MaliciousSHA256 = dynamic(["1cd58cfba596da296ab1878d74023e00c399345a1b6c2a0e5446c53563f4e3bb", "1fe3646d27d286db8123297e06ae7badf3e26f352a04f91b6d82c28869a91664", "6f088ade49456db2422c3edfbb9998f4a3e9cce7c4c00a7279fb45d672a82b7d", "52c11f246309cce5556a00408bafb9868622114903dbd8128dc4ce3eca2df27a", "6888d4c54ef2b5bf23889f9637c2efe77e1d2af4724d315b73d646cf5547dc73", "408ef22050ffc5a67e005802809026b29f297a8019f8fda91a2afa8e877ba434", "74d3447e7cf99c99ea01a16332ec27432dfb0f491e10e67cd118065a60483306", "492f2ab86f8d8911adc79c10ec1541704f5311d207d9d799b0d2a57fcc6a4391", "c9561a3b00a0fa38b7772675d987f84bd429c55cd024fc08a98245c2d1632848"]);
let NetworkHits = DeviceNetworkEvents
    | where TimeGenerated > ago(30d)
    | where RemoteIP in (MaliciousIPs) or RemoteUrl has_any (MaliciousDomains)
    | project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RemoteIP, RemoteUrl, RemotePort, ActionType
    | extend HitType = "Network IOC";
let FileHits = DeviceFileEvents
    | where TimeGenerated > ago(30d)
    | where SHA256 in (MaliciousSHA256)
    | project TimeGenerated, DeviceName, InitiatingProcessFileName, FolderPath, FileName, SHA256, ActionType
    | extend HitType = "File Hash IOC";
let InstallScriptHits = DeviceProcessEvents
    | where TimeGenerated > ago(30d)
    | where InitiatingProcessFileName in~ ("node.exe", "npm.cmd", "cargo.exe", "rustc.exe", "wsl.exe")
    | where ProcessCommandLine has_any ("DownloadString", "Invoke-WebRequest", "-enc", "github.com", "23.254.165.112")
       or FileName in~ ("powershell.exe", "cmd.exe", "curl.exe", "certutil.exe", "rundll32.exe")
    | project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, FileName, ProcessCommandLine, AccountName
    | extend HitType = "Build/Install Script Execution";
union NetworkHits, FileHits, InstallScriptHits
| sort by TimeGenerated desc
PowerShell
# Security Arsenal - OTX IOC Hunt Script
# FakeAgent (SectopRAT/StealC), BRIDGEHEAD, proc-macro1, N4D Mesh Controller
# Run elevated on Windows endpoints; review output CSV for hits.

$report = @()

# --- 1. Network IOCs: active & recent connections ---
$badIPs = @("107.189.24.255","209.99.186.235","23.254.165.112")
$conns = Get-NetTCPConnection -ErrorAction SilentlyContinue | Where-Object { $badIPs -contains $_.RemoteAddress -or $_.RemotePort -eq 9089 }
foreach ($c in $conns) {
    $proc = Get-Process -Id $c.OwningProcess -ErrorAction SilentlyContinue
    $report += [PSCustomObject]@{ Check="NetworkIOC"; Detail="$($c.LocalAddress):$($c.LocalPort) -> $($c.RemoteAddress):$($c.RemotePort) [$($proc.ProcessName)]"; Severity="CRITICAL" }
}

# --- 2. DNS cache for malicious domains ---
$badDomains = @("download-app.us","cdnorigin.net","checkmyschool.org","education-gov.com","studentdiscount.online","studentloansyyyy.com","students-portal.com")
$dns = Get-DnsClientCache -ErrorAction SilentlyContinue | Where-Object { $d = $_.Entry; $badDomains | Where-Object { $d -like "*$_*" } }
foreach ($d in $dns) {
    $report += [PSCustomObject]@{ Check="DNSCache"; Detail="$($d.Entry) -> $($d.Data)"; Severity="HIGH" }
}

# --- 3. Fake Claude installer artifacts (FakeAgent campaign) ---
$susPaths = @("$env:TEMP","$env:LOCALAPPDATA\Temp","$env:APPDATA\Claude","$env:USERPROFILE\Downloads")
foreach ($p in $susPaths) {
    if (Test-Path $p) {
        Get-ChildItem $p -Recurse -ErrorAction SilentlyContinue -Include "claude-setup*","claude*desktop*.exe","*.msi" |
            Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-45) } | ForEach-Object {
            $sig = Get-AuthenticodeSignature $_.FullName
            if ($sig.Status -ne "Valid") {
                $report += [PSCustomObject]@{ Check="FakeInstaller"; Detail="$($_.FullName) [Sig: $($sig.Status)] [Hash: $((Get-FileHash $_.FullName -Algorithm SHA256).Hash)]"; Severity="HIGH" }
            }
        }
    }
}

# --- 4. Known malware hashes on disk ( Downloads/AppData sweep ) ---
$badHashes = @("1cd58cfba596da296ab1878d74023e00c399345a1b6c2a0e5446c53563f4e3bb","1fe3646d27d286db8123297e06ae7badf3e26f352a04f91b6d82c28869a91664","6f088ade49456db2422c3edfbb9998f4a3e9cce7c4c00a7279fb45d672a82b7d","52c11f246309cce5556a00408bafb9868622114903dbd8128dc4ce3eca2df27a","6888d4c54ef2b5bf23889f9637c2efe77e1d2af4724d315b73d646cf5547dc73","408ef22050ffc5a67e005802809026b29f297a8019f8fda91a2afa8e877ba434","74d3447e7cf99c99ea01a16332ec27432dfb0f491e10e67cd118065a60483306","492f2ab86f8d8911adc79c10ec1541704f5311d207d9d799b0d2a57fcc6a4391","c9561a3b00a0fa38b7772675d987f84bd429c55cd024fc08a98245c2d1632848")
Get-ChildItem "$env:USERPROFILE\Downloads","$env:LOCALAPPDATA","$env:APPDATA" -Recurse -File -ErrorAction SilentlyContinue |
    Where-Object { $_.Length -lt 50MB } | ForEach-Object {
    $h = (Get-FileHash $_.FullName -Algorithm SHA256 -ErrorAction SilentlyContinue).Hash
    if ($badHashes -contains $h) {
        $report += [PSCustomObject]@{ Check="MalwareHash"; Detail="$($_.FullName) [$h]"; Severity="CRITICAL" }
    }
}

# --- 5. Suspicious Run-key persistence (SectopRAT/StealC commonly persist here) ---
$runKeys = @("HKCU:\Software\Microsoft\Windows\CurrentVersion\Run","HKLM:\Software\Microsoft\Windows\CurrentVersion\Run")
foreach ($k in $runKeys) {
    Get-ItemProperty $k -ErrorAction SilentlyContinue | ForEach-Object {
        $_.PSObject.Properties | Where-Object { $_.Value -match "Temp|AppData|claude|node|cargo" -and $_.Name -notmatch "^PS" } | ForEach-Object {
            $report += [PSCustomObject]@{ Check="Persistence"; Detail="$k\$($_.Name) = $($_.Value)"; Severity="MEDIUM" }
        }
    }
}

# --- 6. Compromised npm/Rust dependencies in local dev caches ---
$npmCache = "$env:LOCALAPPDATA\npm-cache"
$cargoHome = "$env:USERPROFILE\.cargo\registry"
$badPkgs = @("proc-macro1","proc-macro-en")
foreach ($root in @($npmCache,$cargoHome)) {
    if (Test-Path $root) {
        Get-ChildItem $root -Recurse -Directory -ErrorAction SilentlyContinue | Where-Object { $n=$_.Name; $badPkgs | Where-Object { $n -like "*$_*" } } | ForEach-Object {
            $report += [PSCustomObject]@{ Check="MaliciousPackage"; Detail="$($_.FullName)"; Severity="CRITICAL" }
        }
    }
}

$report | Sort-Object Severity | Format-Table -AutoSize
$report | Export-Csv "$env:TEMP\otx_ioc_hunt_$(Get-Date -Format yyyyMMdd_HHmmss).csv" -NoTypeInformation
Write-Host "[+] Hunt complete. $($report.Count) findings. CSV written to $env:TEMP" -ForegroundColor Yellow

Response Priorities

Immediate (0–4 hours)

  • Block all network IOCs at egress: 107.189.24.255, 209.99.186.235, 23.254.165.112 (and port 9089 outbound), plus domains download-app.us, cdnorigin.net, and all five education lookalike domains. Sinkhole at DNS.
  • Push all file hashes from the five pulses into EDR block/alert lists; run the PowerShell hunt script fleet-wide via your RMM or Intune.
  • Dependency audit: search lockfiles (package-lock.json, Cargo.lock) and artifact registries for the 40 BRIDGEHEAD typosquats, proc-macro1, and proc-macro-en. Pin and rebuild any developer machine or CI runner that resolved arrayref, internment, or append-only-vec in August 2026.
  • Isolate any host that ran a fake Claude installer or shows build-script-spawned shell activity.

24 Hours

  • Credential reset, assume compromise. StealC, the BRIDGEHEAD Rust stealer, and proc-macro1 all harvest browser credentials, session cookies, crypto wallets, SSH keys, and CI/CD tokens. For every affected user/developer: force reset of all enterprise credentials, revoke OAuth tokens and active sessions (Entra ID/IdP), rotate SSH keys, GitHub/GitLab PATs, npm and crates.io publishing tokens, and cloud access keys.
  • Crypto wallet triage: identify users with wallet extensions; treat any wallet on an infected host as drained-pending — move funds where possible.
  • Session hijack check: SectopRAT's second-desktop capability means stolen session cookies may already be weaponized. Review IdP sign-in logs for impossible travel and token replay from the past 30 days.
  • Verify package publisher accounts: any maintainer whose credentials were on a compromised build host may themselves become the next supply-chain vector.

1 Week

  • Advertisement & search hygiene controls: deploy browser isolation or DNS-layer ad blocking for sponsored search results; publish internal guidance that AI/dev tools are installed only from vendor-verified sources.
  • CI/CD hardening: enforce dependency allowlisting and lockfile verification in pipelines; run builds in ephemeral, network-restricted sandboxes so build.rs/install-script payloads cannot reach credential stores or the internet. Enable Sigstore/crates.io and npm provenance verification.
  • MCP/Ray exposure remediation: scan for internet-exposed MCP servers and Ray dashboards; patch CVE-2023-48022 and the 2026 MCP CVEs or take the services behind authenticated gateways.
  • Education-sector controls (if applicable): pre-emptively block newly registered lookalike domains via threat-intel DNS feeds; run targeted phishing simulations for students/faculty during enrollment windows.
  • Detection deployment: promote the Sigma and KQL content above to production alerting after a 48-hour tuning window.

This briefing synthesizes live AlienVault OTX pulse data as of August 22, 2026. All indicators are TLP:WHITE and safe to distribute. Security Arsenal customers receive continuous IOC enrichment via AlertMonitor.

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.