Back to Intelligence

Blind Eagle GitHub Loader (AsyncRAT/DcRat/XWorm) + 'Mini Shai-Hulud' npm Supply Chain Attack: OTX Pulse Analysis — Enterprise Detection Pack

SA
Security Arsenal Team
August 31, 2026
9 min read

Two AlienVault OTX pulses published 2026-08-31 reveal converging abuse of trusted developer platforms as malware delivery infrastructure — one by an established Latin American APT, the other by a supply chain opportunist.

Pulse 1 — APT-C-36 (Blind Eagle), Colombia. LevelBlue SpiderLabs researchers dissected the operator behind Blind Eagle's GitHub-based loader infrastructure. The actor stages malicious loaders and RAT payloads inside GitHub repositories, delivering them via Colombian-themed phishing lures (judicial notification lures are evident in infrastructure like consultanotificacionesjuridicas.site). Investigators pivoted from GitHub commit metadata to an operator email address, then to a compromised machine indexed in stealer log databases — exposing a full operational pipeline spanning four RAT families: AsyncRAT, DcRat, Remcos, and XWorm, plus an AutoIt backdoor (S0129) and crypter services. Targeting is government entities in Colombia. Dynamic DNS (duckdns.org) is used for C2 resolution.

Pulse 2 — 'Mini Shai-Hulud' npm supply chain compromise. On 2026-08-28 an attacker published 10 malicious versions of the npm package @7nohe/openapi-react-query-codegen by exploiting a flawed GitHub Actions release workflow. The pipeline used an issue_comment trigger with no author-association gating, letting any GitHub user trigger an npm publish from a fork. The attacker opened PRs from a fork, then invoked the publish path — injecting obfuscated code through binding.gyp / node-gyp native build hooks, abusing OIDC trusted publishing. This mirrors the original Shai-Hulud worm's tradecraft at smaller scale, targeting the technology sector and any downstream developer/CI environment that installed the poisoned versions.

Collective picture: Adversaries are industrializing the abuse of GitHub — both as a payload staging host (Blind Eagle) and as a CI/CD exploitation surface (Mini Shai-Hulud). Trusted-platform traffic bypasses perimeter controls, and developer workstations become high-value entry points into enterprise networks.

Threat Actor / Malware Profile

APT-C-36 (Blind Eagle)

  • Distribution: Colombian phishing emails masquerading as judicial/legal notifications, linking to GitHub-hosted loaders and look-alike domains (simpmit.co, creainovada.xyz, consultanotificacionesjuridicas.site).
  • Payload behavior: Multi-stage AutoIt loaders that decrypt/inject final-stage RATs — AsyncRAT, DcRat, Remcos, XWorm — providing remote desktop, keylogging, credential theft, and secondary payload deployment.
  • C2: Dynamic DNS hostnames (e.g., dccomicrat81.duckdns.org) and hardcoded IPs (e.g., 64.89.160.17); RAT-typical TCP beaconing with configurable ports.
  • Persistence: Registry Run keys and scheduled tasks are standard across AsyncRAT/Remcos/XWorm families; AutoIt scripts are frequently dropped to %AppData%/%ProgramData% and re-launched at logon.
  • Anti-analysis: Crypter-as-a-service packaging, AutoIt script obfuscation, in-memory .NET payload loading to evade static AV, and GitHub staging to blend with legitimate developer traffic.
  • OPSEC failure: Operator committed with a real email address; pivot through stealer log marketplaces exposed the full pipeline — a reminder that stealer-log telemetry is a viable attribution vector.

Mini Shai-Hulud (npm supply chain)

  • Distribution: Malicious versions of @7nohe/openapi-react-query-codegen pushed to npm via hijacked OIDC trusted publishing from a forked repository.
  • Initial access vector: GitHub Actions workflow misconfiguration — issue_comment trigger lacking author_association checks, enabling fork-based arbitrary pipeline execution.
  • Payload behavior: Obfuscated JavaScript plus binding.gyp/node-gyp native build hooks that execute during npm install, enabling arbitrary code execution in developer machines and CI runners.
  • Objective: Developer credential/session theft (npm tokens, cloud keys, SSH), downstream propagation — consistent with Shai-Hulud lineage.

IOC Analysis

Indicator types present:

  • Domains / hostnames: data-encoder.com, creainovada.xyz, consultanotificacionesjuridicas.site, simpmit.co, dccomicrat81.duckdns.org — phishing lure sites and RAT C2. Note config.data is a filename-pattern indicator, useful for file/delivery hunting rather than DNS blocking.
  • IPv4: 64.89.160.17 — static RAT C2 infrastructure; high-confidence block.
  • URL: http://creainovada.xyz/instructions/ — likely a payload staging or lure path; block and retro-search proxy logs.
  • File hashes (SHA256/SHA1): Malicious npm package artifacts from the supply chain pulse — deploy to EDR blocklists and retro-hunt developer workstations and build agents.

Operationalization guidance:

  • Push domains/IP to DNS sinkhole, proxy block, and firewall egress deny lists; alert (not just block) on duckdns.org subdomains in environments without a sanctioned dynamic-DNS use case.
  • Retro-hunt proxy, DNS, and EDR network telemetry for 30+ days — phishing C2 often precedes pulse publication by weeks.
  • Import hashes into EDR reputation blocklists and scan artifact caches (npm cache, CI artifact stores) for the listed SHA256 values.
  • Tooling: CyberChef/Ghidra for AutoIt deobfuscation; otx Python SDK or direct API pulls to automate IOC ingestion into your SIEM; npm audit plus lockfile diffing to identify installs of the 10 malicious package versions.

Detection Engineering

YAML
---
title: Blind Eagle AutoIt Loader Execution with Suspicious Child Process
id: 9f3a2c71-4b1e-4d5a-9e02-7a1c6f8b2d11
status: experimental
description: Detects AutoIt interpreter executing scripts from user-writable directories followed by RAT-consistent child processes, consistent with APT-C-36 (Blind Eagle) GitHub loader delivery of AsyncRAT, DcRat, Remcos, or XWorm.
author: Security Arsenal Threat Intelligence
references:
  - https://www.levelblue.com/blogs/spiderlabs-blog/still-circling-inside-the-operator-behind-blind-eagles-github-loader
logsource:
  category: process_creation
  product: windows
  service: sysmon
detection:
  selection_autoit:
    Image|endswith:
      - '\AutoIt3.exe'
      - '\AutoIt3_x64.exe'
    CommandLine|contains:
      - '\AppData\'
      - '\ProgramData\'
      - '\Temp\'
  selection_child:
    ParentImage|endswith:
      - '\AutoIt3.exe'
      - '\AutoIt3_x64.exe'
    Image|endswith:
      - '\msbuild.exe'
      - '\csc.exe'
      - '\regasm.exe'
      - '\regsvcs.exe'
      - '\rundll32.exe'
      - '\powershell.exe'
      - '\cmd.exe'
  condition: selection_autoit or selection_child
level: high
tags:
  - attack.execution
  - attack.t1059
  - attack.t1218
  - apt.apt_c_36
falsepositives:
  - Legitimate enterprise AutoIt automation scripts
fields:
  - Image
  - CommandLine
  - ParentImage
  - User
date: 2026/08/31
---
title: RAT Persistence via Registry Run Key in User Directory
id: 2e7b91d4-8c3f-4a60-b511-3d9e5f6a7c22
status: experimental
description: Detects registry Run key persistence entries pointing to executables in user-writable paths, a standard persistence mechanism for AsyncRAT, Remcos, XWorm, and DcRat deployed by Blind Eagle.
author: Security Arsenal Threat Intelligence
references:
  - https://otx.alienvault.com/
logsource:
  category: registry_set
  product: windows
  service: sysmon
detection:
  selection_key:
    TargetObject|contains:
      - '\Software\Microsoft\Windows\CurrentVersion\Run'
      - '\Software\Microsoft\Windows\CurrentVersion\RunOnce'
  selection_path:
    Details|contains:
      - '\AppData\Roaming\'
      - '\AppData\Local\'
      - '\ProgramData\'
      - '%TEMP%'
  filter_legit:
    Details|contains:
      - 'OneDrive'
      - 'Teams'
      - 'Slack'
  condition: selection_key and selection_path and not filter_legit
level: high
tags:
  - attack.persistence
  - attack.t1060
  - attack.t1547.001
falsepositives:
  - User-installed applications registering autostart entries
date: 2026/08/31
---
title: GitHub Actions issue_comment Trigger Without Author Association Gate
id: 5c1d8e92-7f4a-4b33-9d06-1a2b3c4d5e33
status: experimental
description: Detects CI/CD pipeline risk consistent with the Mini Shai-Hulud npm supply chain compromise - GitHub Actions workflows using issue_comment triggers that allow fork-based workflow execution leading to package publishing.
author: Security Arsenal Threat Intelligence
references:
  - https://safedep.io/mini-shai-hulud-openapi-react-query-codegen-compromised/
logsource:
  category: file_event
  product: windows
detection:
  selection_path:
    TargetFilename|contains:
      - '\.github\workflows\'
  selection_content:
    TargetFilename|endswith:
      - '.yml'
      - '.yaml'
  condition: selection_path and selection_content
level: informational
tags:
  - attack.initial_access
  - attack.t1195.001
falsepositives:
  - Any legitimate workflow file modification - use as audit enrichment for CI security review
date: 2026/08/31
KQL — Microsoft Sentinel / Defender
// Hunt for Blind Eagle RAT C2 communication and phishing infrastructure
let ioc_domains = dynamic(["data-encoder.com", "creainovada.xyz", "consultanotificacionesjuridicas.site", "simpmit.co", "dccomicrat81.duckdns.org"]);
let ioc_ips = dynamic(["64.89.160.17"]);
let networkHits = DeviceNetworkEvents
| where TimeGenerated > ago(30d)
| where RemoteUrl in (ioc_domains) or RemoteIP in (ioc_ips)
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RemoteIP, RemoteUrl, RemotePort;
let dnsHits = DeviceNetworkEvents
| where TimeGenerated > ago(30d)
| where RemoteUrl has_any (ioc_domains) or RemoteUrl endswith ".duckdns.org"
| project TimeGenerated, DeviceName, InitiatingProcessFileName, RemoteUrl;
// AutoIt loader execution from user-writable paths
let autoitExec = DeviceProcessEvents
| where TimeGenerated > ago(30d)
| where FileName =~ "AutoIt3.exe" or FileName =~ "AutoIt3_x64.exe"
| where ProcessCommandLine has_any ("AppData", "ProgramData", "Temp")
| project TimeGenerated, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName, AccountName;
union networkHits, dnsHits, autoitExec
| sort by TimeGenerated desc
PowerShell
# Security Arsenal - Blind Eagle / RAT IOC Hunt Script
# Checks registry persistence, suspicious AutoIt artifacts, and C2 connections

Write-Host "=== Blind Eagle / AsyncRAT-XWorm Hunt ===" -ForegroundColor Cyan

# 1. Registry Run key persistence pointing to user-writable paths
$runKeys = @(
    "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run",
    "HKCU:\Software\Microsoft\Windows\CurrentVersion\RunOnce",
    "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run",
    "HKLM:\Software\Microsoft\Windows\CurrentVersion\RunOnce"
)
foreach ($key in $runKeys) {
    if (Test-Path $key) {
        Get-ItemProperty $key | Get-Member -MemberType NoteProperty | ForEach-Object {
            $value = (Get-ItemProperty $key).($_.Name)
            if ($value -match "AppData|ProgramData|Temp|AutoIt") {
                Write-Host "[PERSISTENCE] $key :: $($_.Name) = $value" -ForegroundColor Red
            }
        }
    }
}

# 2. AutoIt scripts and compiled artifacts in user directories
$suspectPaths = @("$env:APPDATA", "$env:LOCALAPPDATA", "$env:ProgramData", "$env:TEMP")
foreach ($path in $suspectPaths) {
    Get-ChildItem -Path $path -Recurse -Include *.au3, *.a3x, AutoIt3*.exe -ErrorAction SilentlyContinue |
        Select-Object -First 20 | ForEach-Object {
            Write-Host "[AUTOIT ARTIFACT] $($_.FullName) (Modified: $($_.LastWriteTime))" -ForegroundColor Yellow
        }
}

# 3. Active connections to known RAT C2
$c2Indicators = @("64.89.160.17", "dccomicrat81.duckdns.org")
Get-NetTCPConnection -State Established -ErrorAction SilentlyContinue | ForEach-Object {
    if ($c2Indicators -contains $_.RemoteAddress) {
        $proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
        Write-Host "[C2 CONNECTION] $($_.RemoteAddress):$($_.RemotePort) via $($proc.ProcessName) (PID $($_.OwningProcess))" -ForegroundColor Red
    }
}

# 4. DNS cache check for lure/C2 domains
$dnsIndicators = @("data-encoder.com", "creainovada.xyz", "consultanotificacionesjuridicas.site", "simpmit.co")
$dnsCache = Get-DnsClientCache -ErrorAction SilentlyContinue
foreach ($ioc in $dnsIndicators) {
    $hit = $dnsCache | Where-Object { $_.Entry -like "*$ioc*" }
    if ($hit) { Write-Host "[DNS CACHE HIT] $ioc resolved on this host" -ForegroundColor Red }
}

# 5. npm artifact check for Mini Shai-Hulud hashes (developer machines)
$npmCache = "$env:LOCALAPPDATA\npm-cache"
$badHashes = @("b24d121667f21f492cb9db34fbfd515d5922a8dd30b9c45215c7220abbb10ca8", "b49afb7dba04cd99b357ce7c652c823a3707f28e130bd5c6645851a7adc030d6")
if (Test-Path $npmCache) {
    Get-ChildItem $npmCache -Recurse -File -ErrorAction SilentlyContinue | ForEach-Object {
        $h = (Get-FileHash $_.FullName -Algorithm SHA256 -ErrorAction SilentlyContinue).Hash
        if ($badHashes -contains $h.ToLower()) {
            Write-Host "[MALICIOUS NPM ARTIFACT] $($_.FullName) SHA256=$h" -ForegroundColor Red
        }
    }
}

Write-Host "=== Hunt Complete ===" -ForegroundColor Cyan

Response Priorities

Immediate (0-4 hours):

  • Block all listed domains, the duckdns C2 hostname, and IP 64.89.160.17 at DNS, proxy, and egress firewall layers.
  • Deploy the eight file hashes to EDR blocklists; retro-hunt endpoints, developer machines, and CI runners.
  • Run the KQL hunt and PowerShell sweep against any host with Colombian business exposure or npm development activity.
  • Audit package.json / lockfiles and CI logs for installs of @7nohe/openapi-react-query-codegen versions published on/after 2026-08-28.

24 hours:

  • Any host that communicated with C2 infrastructure or executed AutoIt loaders: force credential resets — RAT families involved (AsyncRAT, Remcos, XWorm) all harvest stored browser credentials, email accounts, and VPN tokens. Assume compromise of any credential used on the affected machine.
  • Rotate npm tokens, GitHub PATs, and cloud credentials on any developer workstation that installed the malicious package; OIDC-published packages mean build-time secrets may have been exfiltrated.
  • Review GitHub Actions audit logs for fork-triggered workflow runs and unexpected publish events.

1 week (architecture hardening):

  • Gate all CI/CD workflows: require author_association checks on issue_comment/pull_request triggers, disable fork-based workflow execution on publishing pipelines, and enforce OIDC publishing only from protected branches.
  • Implement DNS-level filtering or alerting on dynamic DNS providers (duckdns.org) absent a business justification.
  • Deploy application control rules restricting AutoIt3.exe and script interpreters from user-writable paths; enable Attack Surface Reduction rules for script-based execution.
  • For organizations with LATAM government exposure: brief users on judicial-notification phishing lures and enforce DMARC/attachment sandboxing on inbound legal-themed mail.

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.