Back to Intelligence

OtterCookie, Vidar Stealer, and The Gentlemen RaaS: Multi-Vector Credential Theft Campaign Analysis

SA
Security Arsenal Team
May 15, 2026
9 min read

Threat Summary

Recent OTX pulse data reveals a coordinated surge in credential theft operations specifically targeting the technology sector. Multiple threat actors are employing sophisticated techniques including supply chain attacks, social engineering, and multi-stage loaders to compromise environments and steal sensitive credentials.

North Korean threat actor FAMOUS CHOLLIMA is actively deploying OtterCookie infostealer through malicious npm packages using a two-layer distribution strategy with benign wrappers that pull malicious dependencies. Meanwhile, The Gentlemen RaaS group has suffered a significant data breach exposing nine administrator accounts, revealing their initial access methods through Fortinet and Cisco edge appliances using NTLM relay attacks.

Separately, attackers are leveraging the Claude Code leak as a social engineering lure to distribute Vidar Stealer and GhostSocks via trojanized GitHub repositories. Another campaign has been observed using EtherRAT and TukTuk malware frameworks that ultimately deliver The Gentlemen ransomware, with dynamic C2 configuration updates hidden in the Ethereum blockchain.

Collectively, these campaigns demonstrate sophisticated supply chain attacks, opportunistic social engineering exploitation, and multi-stage loaders designed to establish persistence, steal credentials, and enable lateral movement within targeted environments.

Threat Actor / Malware Profile

FAMOUS CHOLLIMA (North Korea)

  • Distribution: Malicious npm packages using benign wrappers (e.g., big.js clones) that pull malicious dependencies containing the actual payload
  • Malware Families: OtterCookie, BeaverTail, InvisibleFerret, Koalemos
  • Payload Behavior: Credential theft, SSH backdoor deployment, data exfiltration
  • C2 Communication: Vercel infrastructure for command and control
  • Persistence: Koalemos framework for maintaining access
  • Anti-analysis: Heavily obfuscated JavaScript packages
  • MITRE ATT&CK: Supply Chain Compromise (T1195), Code Signing (T1056.001)

The Gentlemen RaaS

  • Distribution: Initial access via Fortinet and Cisco edge appliances exploiting CVE-2024-55591 and CVE-2025-32433
  • Malware Families: SystemBC, The Gentlemen
  • Payload Behavior: NTLM relay attacks, credential theft, cryptocurrency mining, data leakage
  • C2 Communication: Rocket database backend (recently exposed in leak)
  • Persistence: NTLM relay credentials for maintaining access
  • Anti-analysis: Part of established RaaS ecosystem with division of labor
  • MITRE ATT&CK: Initial Access (T1190), Credential Access (T1110)

Vidar Stealer

  • Distribution: Trojanized GitHub repositories exploiting Claude Code leak, MicrosoftToolkit.exe masquerading
  • Associated Malware: GhostSocks, Arkei
  • Payload Behavior: Information stealing, credential theft, browser data extraction
  • C2 Communication: Encrypted HTTP/HTTPS channels
  • Persistence: Scheduled tasks or registry modifications
  • Anti-analysis: Multi-stage loaders, process termination attempts, file extension masquerading (.dot to .bat)
  • MITRE ATT&CK: Defense Evasion (T1027), Execution (T1204)

EtherRAT & TukTuk

  • Distribution: Malicious MSI installer disguised as Sysinternals tool
  • Associated Malware: The Gentlemen ransomware, Mimikatz, NetExec, Rclone
  • Payload Behavior: Dynamic C2 updates via Ethereum blockchain (EtherHiding), Kerberoasting, credential dumping
  • C2 Communication: Blockchain-based configuration updates
  • Persistence: DLL sideloading with legitimate applications like Greenshot
  • Anti-analysis: Legitimate application abuse for evasion
  • MITRE ATT&CK: Persistence (T1547), Credential Access (T1003)

IOC Analysis

The OTX pulses contain multiple indicator types that require different operational approaches:

File Hashes: MD5, SHA1, and SHA256 hashes for malware samples including:

  • Vidar Stealer variants (MD5: 77c73bd5e7625b7f691bc00a1b561a0f, d8256fbc62e85dae85eb8d4b49613774)
  • EtherRAT components (MD5: 73ce2438d4ed475e03727b7b000d2794, 77fbe265fd65c7f7b6d323fb6de6a4fd)

CVEs: Multiple vulnerabilities being actively exploited:

  • CVE-2024-55591 (Fortinet)
  • CVE-2025-32433 (Cisco)
  • CVE-2025-33073 (Additional Cisco)
  • CVE-2025-55182 (Related to EtherRAT deployment)

URLs/IPs: C2 infrastructure indicators:

  • 147.45.197.92:443
  • 94.228.161.88:443
  • rti.cargomanbd.com
  • g8way.io
  • witch-skins-lip-coal.trycloudflare.com
  • gz.technicalprorj.xyz

Operational Guidance for SOC Teams:

  1. Block all malicious URLs/IPs at perimeter and endpoint levels immediately
  2. Deploy file hash signatures to EDR solutions for automatic quarantine
  3. Prioritize patching for identified CVEs, especially on edge appliances
  4. Configure DNS monitoring for suspicious hostname resolution attempts
  5. Implement YARA rules based on malware behavior patterns
  6. Set up SIEM alerts for process creation matching known malware patterns

Recommended Tooling:

  • VirusTotal for hash reputation checks
  • Cisco Talos Intelligence for IP/domain reputation
  • AlienVault OTX for community-driven threat data
  • CrowdStrike Falcon for endpoint detection
  • Splunk or Microsoft Sentinel for log analysis
  • MISP for threat intelligence sharing

Detection Engineering

Sigma Rules

YAML
---
title: Malicious NPM Package Installation
id: 8a7b2c1d-3e4f-5a6b-7c8d-9e0f1a2b3c4d
description: Detects installation of known malicious npm packages associated with OtterCookie infostealer campaign
status: experimental
author: Security Arsenal
date: 2026/05/15
references:
    - https://panther.com/blog/tracking-an-ottercookie-infostealer-campaign-across-npm
tags:
    - attack.initial_access
    - attack.t1195
logsource:
    product: linux
    service: auditd
detection:
    selection:
        process|contains: 'npm'
        cmdline|contains:
            - 'ottercookie'
            - 'beavertail'
            - 'invisibleferret'
            - 'koalemos'
    condition: selection
falsepositives:
    - Legitimate npm package installations with similar names
level: high
---
title: Vidar Stealer Execution Pattern
id: 9b8c3d2e-4f5a-6b7c-8d9e-0f1a2b3c4d5e
description: Detects execution patterns associated with Vidar Stealer and related loaders
status: experimental
author: Security Arsenal
date: 2026/05/15
references:
    - https://www.zscaler.com/blogs/security-research/anthropic-claude-code-leak
    - https://www.levelblue.com/blogs/spiderlabs-blog/unmasking-a-multi-stage-loader-autoit-abuse-leading-to-vidar-stealer-command-and-control-communication
tags:
    - attack.execution
    - attack.t1204
logsource:
    product: windows
    service: security
detection:
    selection1:
        EventID: 4688
        NewProcessName|contains:
            - 'MicrosoftToolkit.exe'
            - 'AutoIt3.exe'
    selection2:
        EventID: 4688
        CommandLine|contains:
            - '.dot'
            - '.bat'
    selection3:
        EventID: 4688
        ParentProcessName|endswith: '\explorer.exe'
        NewProcessName|contains:
            - 'AutoIt3.exe'
    condition: 1 of selection*
falsepositives:
    - Legitimate use of Microsoft Toolkit or AutoIt scripts
level: high
---
title: The Gentlemen RaaS Initial Access
id: a0c9e4d3-5f6b-7c8d-9e0f-1a2b3c4d5e6f
description: Detects potential exploitation of Fortinet and Cisco vulnerabilities associated with The Gentlemen RaaS
status: experimental
author: Security Arsenal
date: 2026/05/15
references:
    - https://research.checkpoint.com/2026/thus-spoke-the-gentlemen/
tags:
    - attack.initial_access
    - attack.t1190
logsource:
    product: firewall
detection:
    selection:
        cve:
            - 'CVE-2024-55591'
            - 'CVE-2025-32433'
            - 'CVE-2025-33073'
    condition: selection
falsepositives:
    - Legitimate vulnerability scanning or testing
level: critical

KQL Hunt Query (Microsoft Sentinel)

KQL — Microsoft Sentinel / Defender
// Hunt for Vidar Stealer and related infostealer activity
let maliciousProcesses = dynamic(["MicrosoftToolkit.exe", "AutoIt3.exe", "wscript.exe", "powershell.exe"]);
let suspiciousIPs = dynamic(["147.45.197.92", "94.228.161.88"]);
let suspiciousHostnames = dynamic(["rti.cargomanbd.com", "gz.technicalprorj.xyz", "g8way.io"]);
let suspiciousFileHashes = dynamic([
    "77c73bd5e7625b7f691bc00a1b561a0f", "d8256fbc62e85dae85eb8d4b49613774", 
    "7ac9278876c83c9b597fae68acb6fbf9", "73ce2438d4ed475e03727b7b000d2794",
    "77fbe265fd65c7f7b6d323fb6de6a4fd", "b188fbc6ff5557767e73e4c883a553a3"
]);

// Check for process execution related to Vidar Stealer
DeviceProcessEvents
| where FileName in~ maliciousProcesses 
    or ProcessCommandLine has ".dot" 
    or ProcessCommandLine has ".bat"
    or SHA256 in~ suspiciousFileHashes
| project Timestamp, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName, SHA256
| order by Timestamp desc

// Union with network activity
| union (
    DeviceNetworkEvents
    | where RemoteIP in~ suspiciousIPs
        or RemoteUrl has_any (suspiciousHostnames)
    | project Timestamp, DeviceName, RemoteIP, RemoteUrl, RemotePort, InitiatingProcessFileName
    | order by Timestamp desc
)

PowerShell IOC Hunt Script

PowerShell
# Vidar Stealer and Infostealer IOC Hunt Script
# Version: 1.0
# Date: 2026-05-15
# Author: Security Arsenal

param(
    [switch]$Verbose,
    [switch]$ScanNetwork
)

# Malicious file hashes from OTX pulses
$maliciousHashes = @(
    "77c73bd5e7625b7f691bc00a1b561a0f", "d8256fbc62e85dae85eb8d4b49613774",
    "7ac9278876c83c9b597fae68acb6fbf9", "73ce2438d4ed475e03727b7b000d2794",
    "77fbe265fd65c7f7b6d323fb6de6a4fd", "b188fbc6ff5557767e73e4c883a553a3",
    "b2d51212744f404714fd909e87254d98", "c92cf9a1af5b1fe25cdcb8771ce52be4"
)

# Suspicious process names
$suspiciousProcesses = @(
    "MicrosoftToolkit.exe", "AutoIt3.exe"
)

# Suspicious hostnames and IPs
$suspiciousHosts = @(
    "rti.cargomanbd.com", "gz.technicalprorj.xyz", "g8way.io", 
    "witch-skins-lip-coal.trycloudflare.com", "147.45.197.92", "94.228.161.88"
)

# Registry keys to check
$registryPaths = @(
    "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run",
    "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run",
    "HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce",
    "HKCU:\Software\Microsoft\Windows\CurrentVersion\RunOnce"
)

Write-Host "Starting IOC Hunt for Infostealer Campaigns..." -ForegroundColor Cyan

# Check for suspicious processes
Write-Host "`nChecking for suspicious processes..." -ForegroundColor Yellow
$foundProcesses = Get-Process | Where-Object { $suspiciousProcesses -contains $_.ProcessName }
if ($foundProcesses) {
    Write-Host "ALERT: Found suspicious processes running!" -ForegroundColor Red
    $foundProcesses | Format-Table Id, ProcessName, Path -AutoSize
} else {
    Write-Host "No suspicious processes found." -ForegroundColor Green
}

# Check for files with malicious hashes
Write-Host "`nScanning for files with known malicious hashes..." -ForegroundColor Yellow
$fileScanPaths = @("$env:USERPROFILE\Downloads", "$env:TEMP", "$env:APPDATA")
$foundFiles = @()

foreach ($path in $fileScanPaths) {
    if (Test-Path $path) {
        Get-ChildItem -Path $path -Recurse -ErrorAction SilentlyContinue | ForEach-Object {
            if ($_.Extension -match '\.(exe|dll|bat|ps1|js|vbs)') {
                try {
                    $hash = (Get-FileHash -Path $_.FullName -Algorithm MD5 -ErrorAction SilentlyContinue).Hash.ToLower()
                    if ($maliciousHashes -contains $hash) {
                        $foundFiles += $_
                        if ($Verbose) {
                            Write-Host "Found malicious file: $($_.FullName)" -ForegroundColor Red
                        }
                    }
                } catch {
                    # File inaccessible or in use
                }
            }
        }
    }
}

if ($foundFiles.Count -gt 0) {
    Write-Host "ALERT: Found files matching known malicious hashes!" -ForegroundColor Red
    $foundFiles | Format-Table FullName, Length, LastWriteTime -AutoSize
} else {
    Write-Host "No files matching known malicious hashes found." -ForegroundColor Green
}

# Check for suspicious network connections
if ($ScanNetwork) {
    Write-Host "`nChecking for network connections to suspicious hosts..." -ForegroundColor Yellow
    $activeConnections = Get-NetTCPConnection -ErrorAction SilentlyContinue | Where-Object { $_.State -eq 'Established' }
    
    foreach ($connection in $activeConnections) {
        try {
            $remoteAddress = [System.Net.DNS]::GetHostEntry($connection.RemoteAddress).HostName
            foreach ($host in $suspiciousHosts) {
                if ($remoteAddress -like "*$host*") {
                    Write-Host "ALERT: Found connection to suspicious host: $remoteAddress" -ForegroundColor Red
                    Write-Host "Local Address: $($connection.LocalAddress):$($connection.LocalPort)" -ForegroundColor Yellow
                    Write-Host "Remote Address: $($connection.RemoteAddress):$($connection.RemotePort)" -ForegroundColor Yellow
                }
            }
        } catch {
            # DNS resolution failed
        }
    }
}

# Check registry persistence mechanisms
Write-Host "`nChecking registry for suspicious persistence mechanisms..." -ForegroundColor Yellow
foreach ($path in $registryPaths) {
    if (Test-Path $path) {
        Get-Item -Path $path -ErrorAction SilentlyContinue | ForEach-Object {
            $properties = Get-ItemProperty -Path $_.PSPath -ErrorAction SilentlyContinue
            foreach ($property in $properties.PSObject.Properties) {
                if ($property.Name -notlike "PS*") {
                    $value = $property.Value
                    foreach ($proc in $suspiciousProcesses) {
                        if ($value -like "*$proc*") {
                            Write-Host "ALERT: Found suspicious registry entry!" -ForegroundColor Red
                            Write-Host "Path: $path" -ForegroundColor Yellow
                            Write-Host "Key: $($property.Name)" -ForegroundColor Yellow
                            Write-Host "Value: $value" -ForegroundColor Yellow
                        }
                    }
                }
            }
        }
    }
}

Write-Host "`nIOC Hunt completed." -ForegroundColor Cyan

Response Priorities

Immediate (within 4 hours)

  1. Block all identified malicious IPs and domains at perimeter and endpoint levels
  2. Deploy Sigma rules to SIEM for immediate detection of suspicious process executions
  3. Scan endpoints for file hashes associated with Vidar Stealer and related malware
  4. Apply security patches for CVE-2024-55591, CVE-2025-32433, CVE-2025-33073, and CVE-2025-55182
  5. Disable npm package installations from public repositories in development environments
  6. Hunt for connections to g8way.io, witch-skins-lip-coal.trycloudflare.com, and other suspicious hostnames
  7. Isolate any systems with confirmed malware indicators

24 Hours

  1. Verify identities of users with elevated privileges using identity governance tools
  2. Reset credentials for all accounts with access to npm repositories and development systems
  3. Audit GitHub repositories for unauthorized access or cloned repositories
  4. Review recent Git commits for suspicious code or unauthorized changes
  5. Check for any unauthorized Azure DevOps or CI/CD pipeline modifications
  6. Investigate all recent successful logins from external IP addresses
  7. Review and revoke potentially compromised API keys and tokens
  8. Enable enhanced logging on edge appliances for retrospective analysis

1 Week

  1. Implement npm package signing verification in CI/CD pipelines
  2. Deploy application allowlisting for development tools and package managers
  3. Establish GitHub repository integrity monitoring
  4. Review and update firewall rules for edge appliances
  5. Implement multi-factor authentication for all development and administrative accounts
  6. Conduct security awareness training focused on social engineering and supply chain attacks
  7. Establish regular reviews of third-party package dependencies
  8. Implement YARA rules for known malware families across endpoints
  9. Create incident response playbooks specific to supply chain attacks
  10. Establish continuous monitoring for blockchain-based C2 communication patterns

Related Resources

Security Arsenal Incident Response Managed SOC & MDR Services AlertMonitor Threat Detection From The Dark Side Intel Hub

darkwebotx-pulsedarkweb-credentialsvidar-stealerottercookiegentlemen-raasnpm-supply-chaincredential-theft

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.