Back to Intelligence

The Gentlemen's EtherRAT & Shai-Hulud npm Supply Chain: OTX Pulse Analysis — Enterprise Detection Pack

SA
Security Arsenal Team
August 5, 2026
6 min read

Intelligence indicates two concurrent high-severity campaigns targeting enterprise environments. The Gentlemen ransomware affiliate is actively conducting intrusions characterized by the deployment of EtherRAT, a novel malware utilizing Ethereum smart contracts for Command-and-Control (C2) infrastructure to obfuscate communications. Their attack chain includes credential dumping via Mimikatz, lateral movement using Sliver, and network tunneling via Chisel and Ligolo-ng.

Simultaneously, a supply chain attack attributed to the actor Shai-Hulud has compromised the npm ecosystem. By hijacking a maintainer's GitHub account, the actor injected malicious code into the keyv and cacheable package families, affecting over 400 downstream packages. The payload is a descendant of the 'Mini' malware family, capable of IDE persistence and credential theft.

Threat Actor / Malware Profile

The Gentlemen & EtherRAT

  • Distribution: Initial access likely via exposed services or phishing; staging via open directories.
  • Payload Behavior: Deploys EtherRAT, which queries Ethereum blockchain smart contracts to retrieve C2 endpoints, bypassing traditional IP-based blocking. Also utilizes standard tools: Sliver (C2), Chisel/Ligolo-ng (tunneling), and Mimikatz (credential theft).
  • C2 Communication: Blockchain-based. The malware interacts with the Ethereum network to decode C2 domain addresses, making network detection significantly harder.
  • Persistence: Established through privileged account creation and Scheduled Tasks.
  • Anti-Analysis: Use of off-the-shelf tools (Sliver/Chisel) blended with custom blockchain logic to blend into normal network traffic.

Shai-Hulud (npm Supply Chain)

  • Distribution: Software supply chain compromise of keyv and cacheable npm packages.
  • Payload Behavior: A descendant of the 'Mini' malware family. It establishes persistence within the developer's IDE and exfiltrates credentials.
  • C2 Communication: Contact with malicious domains such as npm-cache.com and pypi-get.com.
  • Persistence: IDE-specific persistence mechanisms ensuring the malware survives package reinstalls.

IOC Analysis

The provided Indicators of Compromise (IOCs) include:

  • IPv4 Addresses: 5 specific IPs (e.g., 193.233.202.17, 77.110.126.46) associated with The Gentlemen's infrastructure. These should be blocked immediately at the firewall.
  • Domains: 2 domains for The Gentlemen (resumeacceptable.com, publisherresolution.com) and 3 for Shai-Hulud (npm-cache.com, pypi-get.com, js-mirror.com). SOC teams should block DNS resolution for these.
  • File Hashes (SHA1): 3 hashes specific to the malicious npm payloads.

Operational Guidance:

  • EDR/SIEM: Ingest IOCs into threat intelligence feeds. Specifically look for process execution matching the SHA1 hashes on developer workstations.
  • Network: Use Deep Packet Inspection (DPI) to identify RPC traffic to Ethereum nodes (standard for EtherRAT) originating from non-wallet endpoints.
  • Tooling: Use virustotal or hybrid-analysis for hash deep-dives. Use nslookup or dig to check for domain resolution cache poisoning.

Detection Engineering

Sigma Rules

YAML
title: Potential EtherRAT C2 via Ethereum RPC Node Access
id: 4a88e1b0-7f9c-4a2e-9e1f-1a2b3c4d5e6f
description: Detects processes making RPC connections to Ethereum public nodes, a behavior associated with EtherRAT C2 infrastructure resolving domains via smart contracts.
status: experimental
date: 2026/08/05
author: Security Arsenal
references:
    - https://hunt.io/blog/the-gentlemen-etherrat-ethereum-smart-contract-c2
tags:
    - attack.command_and_control
    - attack.t1071.001
logsource:
    category: network_connection
detection:
    selection:
        DestinationPort|startswith: '854'
        Initiated: 'true'
    filter:
        Image|endswith:
            - '\node.exe'
            - '\explorer.exe'
    condition: selection and not filter
falsepositives:
    - Legitimate Web3 or cryptocurrency applications
level: high
---
title: The Gentlemen Lateral Movement Tools Execution
id: b99f2c2a-8e1d-4f3a-9b0c-2d3e4f5a6b7c
description: Detects execution of known lateral movement and tunneling tools (Chisel, Ligolo-ng, Sliver) often used by The Gentlemen affiliates.
status: experimental
date: 2026/08/05
author: Security Arsenal
references:
    - https://hunt.io/blog/the-gentlemen-etherrat-ethereum-smart-contract-c2
tags:
    - attack.lateral_movement
    - attack.t1021.001
logsource:
    category: process_creation
detection:
    selection:
        Image|endswith:
            - '\chisel.exe'
            - '\ligolo-ng.exe'
            - '\sliver-client.exe'
            - '\sliver-server.exe'
    condition: selection
falsepositives:
    - Authorized administrator usage of tunneling tools
level: critical
---
title: Shai-Hulud NPM Supply Chain Malicious Process Spawn
id: c00g3d3b-9f2e-5g4c-0d1e-3f4g5h6i7j8k
description: Detects suspicious child processes spawned by Node.js or NPM after installing compromised keyv/cacheable packages, indicative of Shai-Hulud activity.
status: experimental
date: 2026/08/05
author: Security Arsenal
references:
    - https://www.wiz.io/blog/keyv-and-cacheable-npm-supply-chain-attack
tags:
    - attack.initial_access
    - attack.supply_chain
logsource:
    category: process_creation
detection:
    selection_parent:
        ParentImage|endswith:
            - '\node.exe'
            - '\npm.cmd'
    selection_child:
        Image|contains:
            - 'powershell'
            - 'cmd'
            - 'bash'
        CommandLine|contains:
            - 'npm-cache.com'
            - 'pypi-get.com'
    condition: all of selection_*
falsepositives:
    - Legitimate build scripts invoking shells
level: high

KQL (Microsoft Sentinel)

KQL — Microsoft Sentinel / Defender
// Hunt for The Gentlemen C2 IP connections and Chisel/Ligolo processes
let GentlemenIOCs = dynamic(["193.233.202.17", "185.45.193.151", "38.110.228.43", "77.110.122.137", "77.110.126.46"]);
let ShaiHuludDomains = dynamic(["npm-cache.com", "pypi-get.com", "js-mirror.com"]);
// Network Connections
DeviceNetworkEvents
| where RemoteIP in (GentlemenIOCs) or RemoteUrl has_any (ShaiHuludDomains)
| project Timestamp, DeviceName, InitiatingProcessAccountName, RemoteIP, RemoteUrl
| extend IoCType = iff(RemoteIP in (GentlemenIOCs), "Gentlemen_IP", "ShaiHulud_Domain")
| order by Timestamp desc
;
// Process Creation
DeviceProcessEvents
| where FileName in~ ("chisel.exe", "ligolo-ng.exe", "mimikatz.exe")
| project Timestamp, DeviceName, AccountName, FileName, ProcessCommandLine
| order by Timestamp desc

PowerShell Hunt Script

PowerShell
# IOC Hunt for The Gentlemen and Shai-Hulud
# Requires Admin privileges for certain checks

$GentlemenIPs = @("193.233.202.17", "185.45.193.151", "38.110.228.43", "77.110.122.137", "77.110.126.46")
$ShaiHuludHashes = @("35a672cf34b996b91f3e1c28cbf3a05a37e036e4", "686aa40d0fc22c8d569494543a0f891f359f2f99", "f525d52ceb966516686b482d3dc0137028cc6a63")

Write-Host "[+] Checking for active network connections to Gentlemen C2 IPs..." -ForegroundColor Cyan
$ActiveConnections = Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue
foreach ($IP in $GentlemenIPs) {
    if ($ActiveConnections.RemoteAddress -eq $IP) {
        Write-Host "[ALERT] Active connection found to: $IP" -ForegroundColor Red
        Get-Process -Id (Get-NetTCPConnection -RemoteAddress $IP).OwningProcess | Select-Object ProcessName, Id, Path
    }
}

Write-Host "[+] Scanning for Shai-Hulud malicious file hashes (Node.js modules)..." -ForegroundColor Cyan
# Common NPM cache locations
$PathsToScan = @("$env:APPDATA\npm-cache", "$env:USERPROFILE\node_modules", "$env:APPDATA\npm")

foreach ($Path in $PathsToScan) {
    if (Test-Path $Path) {
        Get-ChildItem -Path $Path -Recurse -File -ErrorAction SilentlyContinue | ForEach-Object {
            $Hash = (Get-FileHash -Path $_.FullName -Algorithm SHA1).Hash
            if ($ShaiHuludHashes -contains $Hash) {
                Write-Host "[ALERT] Malicious file found: $($_.FullName)" -ForegroundColor Red
            }
        }
    }
}

Write-Host "[+] Checking for Suspicious Scheduled Tasks (Persistence)..." -ForegroundColor Cyan
Get-ScheduledTask | Where-Object { $_.Actions.Execute -like "*powershell*" -or $_.Actions.Execute -like "*cmd*" } | 
    Select-Object TaskName, TaskPath, State, Actions

Response Priorities

  • Immediate:

    • Block all listed IPv4 addresses and domains at the perimeter firewall and proxy servers.
    • Scan all developer workstations and build servers for the SHA1 file hashes provided.
    • Kill any processes matching chisel, ligolo-ng, or mimikatz immediately upon detection.
  • 24 Hours:

    • Verify identity and session integrity for accounts with privileged access, as Mimikatz usage suggests credential dumping.
    • Audit all npm packages currently used in CI/CD pipelines against the advisory list (keyv, cacheable).
    • Force password rotation for service accounts used in development environments.
  • 1 Week:

    • Review and restrict the use of blockchain/RPC ports (8545+) for non-approved applications to detect future EtherRAT variants.
    • Implement Software Bill of Materials (SBOM) scanning for developer dependencies to prevent future supply chain ingress.
    • Harden GitHub maintainer accounts with mandatory hardware security keys (FIDO2).

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.