Back to Intelligence

Miasma Worm v3 npm Supply-Chain Attack + Tomorrowland Credential-Harvesting Scam Network: OTX Pulse Analysis — Detection Pack

SA
Security Arsenal Team
August 14, 2026
12 min read

Two AlienVault OTX pulses published 2026-08-13/14 paint a converging picture of credential-theft operations targeting both the software supply chain and consumer trust. On one axis, the Miasma worm has resurfaced inside four legitimate AsyncAPI npm packages, abusing GitHub Actions OIDC publishing to ship malicious code with valid provenance. On the other, a coordinated fraud network of roughly a dozen typosquatted domains is impersonating Tomorrowland Belgium 2026 to harvest payment data and personal information from festivalgoers across Belgium, Czechia, France, and Sweden. Both operations share a single objective: monetizing stolen credentials and data at scale.


Threat Summary

Pulse 1 — Miasma Worm Returns to npm (2026-08-14): Four AsyncAPI packages (@asyncapi/generator, @asyncapi/generator-helpers, @asyncapi/generator-components, @asyncapi/specs) were compromised in July 2026. Critically, the malicious versions were published through AsyncAPI's own legitimate GitHub Actions workflow using npm's OIDC integration — meaning the trojanized artifacts carried valid provenance attestations and bypassed the trust signals security teams rely on. The payload, Miasma v3, is a new variant of the self-propagating worm previously observed inside Red Hat packages. It is designed to spread laterally through developer ecosystems, poisoning downstream projects and harvesting developer credentials (npm tokens, SSH keys, cloud credentials) from infected build environments.

Pulse 2 — Tomorrowland 2026 Fake Ticket Scams (2026-08-13): Investigators identified approximately twelve fraudulent domains impersonating Tomorrowland Belgium 2026, which sold out rapidly for its two July weekends at De Schorre in Boom. The scam infrastructure mimics official ticket sales with countdown timers, fake biometric verification flows, and cloned payment pages. Victims across four EU countries are funneled into surrendering card details, personal identity information, and account credentials — material that feeds directly into dark web credential marketplaces and carding shops.

Collective read: These pulses reflect two ends of the same credential-theft economy. The npm compromise targets developer identity and CI/CD secrets — the keys to enterprise infrastructure. The festival scam network targets consumer identity and payment instruments. Both will surface as bulk credential listings, token dumps, and combo lists in underground channels within days of collection.


Threat Actor / Malware Profile

Miasma v3 (npm Worm)

  • Attribution: Unknown. The campaign demonstrates familiarity with npm's OIDC trusted-publishing model, suggesting an actor with prior supply-chain experience.
  • Distribution: Malicious versions published via AsyncAPI's legitimate GitHub Actions workflow using npm OIDC integration. Because publishing occurred through the real pipeline, packages carried valid provenance — defeating attestation-based verification alone.
  • Payload behavior: The worm embeds in install/postinstall lifecycle scripts typical of malicious npm packages, executes on npm install in developer workstations and CI runners, and self-propagates by stealing npm publishing tokens and injecting itself into additional packages the victim can publish.
  • Credential harvesting: Targets ~/.npmrc (auth tokens), SSH private keys (~/.ssh/), cloud provider credentials (~/.aws/credentials, ~/.azure/, ~/.config/gcloud/), and CI/CD environment variables — high-value secrets that enable enterprise pivoting.
  • C2 communication: Observed infrastructure includes hardcoded HTTP endpoints on 85.137.53.71 across ports 8080, 8081, and 8091 — a multi-port listener pattern consistent with redundant exfiltration channels. Code is obfuscated using services associated with obfuscator.io, a common JavaScript obfuscation provider abused to hinder static analysis.
  • Anti-analysis: JavaScript obfuscation (obfuscator.io patterns), execution gated to install-time events, and provenance-valid packaging that evades registry-level trust checks.

Tomorrowland Phishing Network

  • Attribution: Unknown; infrastructure pattern (bulk typosquats, shared templates, multi-country targeting) is consistent with organized carding/fraud groups.
  • Distribution: Typosquatted and combo-squatted domains (tomorrowland-booking.com, belgium-tomorrowlland.com, belgiumtomoorrowland.com, tmrlnd.shop, jedemenatomorrowland.cz, and others) promoted via search ads, social media, and resale-marketplace listings targeting sold-out event demand.
  • Social engineering: Countdown-timer urgency mechanics, fake biometric/identity verification steps (to harvest ID documents), and cloned payment flows.
  • Objective: Payment card data, personally identifiable information, and credential capture — all monetizable on dark web marketplaces.

IOC Analysis

The pulses contain two indicator classes requiring different handling:

Network infrastructure (Miasma v3):

  • 85.137.53.71:8080, :8081, :8091 — hardcoded C2/exfiltration endpoints over plain HTTP. Block the IP at egress; the multi-port pattern means simple port filtering is insufficient — block the host entirely and alert on any historical connection to it.
  • obfuscator.io — treat as a contextual/attribution indicator rather than a hard block (legitimate dual-use service), but flag npm packages in your environment whose dependency trees contain obfuscator.io-style obfuscation artifacts.

Fraud domains (Tomorrowland network):

  • Eight domains sampled from 18 total indicators: tomorrowland-booking.com, belgium-tomorrowlland.com, belgium-tomorrowlland.info, belgiumtomoorrowland.com, festreisen.com, jedemenatomorrowland.cz, mcsdirect.tech, tmrlnd.shop. Sinkhole/block at DNS, add to web proxy deny lists, and ingest into email security for brand-impersonation detection. Note the double-letter typosquat pattern (tomorrowlland, tomoorrowland) — build fuzzy-match alerting on your brand-monitoring feeds for similar permutations.

Operationalization for SOC teams:

  1. Pull the full IOC sets from both OTX pulses (the samples above are partial) via the OTX API or your TIP integration and push to DNS firewall, EDR network indicators, and proxy blocklists.
  2. Retro-hunt proxy/DNS logs for 90 days for the fraud domains and the Miasma C2 IP — both campaigns have been active since July 2026.
  3. For the npm vector, query your artifact registries and lockfiles for the four affected AsyncAPI package versions and audit any CI runner that installed them. Treat any machine that executed the malicious install scripts as fully compromised — all developer secrets on it must be rotated.
  4. Use tooling such as npm audit, Socket, or JFrog Xray for package-level detection; YARA against extracted npm tarballs for obfuscator.io patterns; and passive DNS (SecurityTrails, PassiveTotal) to enumerate the rest of the scam cluster from the shared registrant/hosting patterns.

Detection Engineering

YAML
---
title: Miasma v3 npm Worm - Suspicious Package Install Network Beacon
id: 7f3a1c2e-9b4d-4e1f-a8c5-2d6b9e0f1a34
status: experimental
description: Detects Node.js/npm processes initiating outbound connections to known Miasma v3 C2 infrastructure or uncommon high ports shortly after package installation.
author: Security Arsenal Threat Intelligence
date: 2026/08/14
references:
    - https://research.jfrog.com/post/miasma-worm-returns-to-npm/
logsource:
    category: network_connection
    product: windows
detection:
    selection_image:
        Image|endswith:
            - '\node.exe'
            - '\npm.cmd'
            - '\npm.exe'
    selection_c2:
        DestinationIp: '85.137.53.71'
    selection_ports:
        DestinationPort:
            - 8080
            - 8081
            - 8091
    condition: selection_image and (selection_c2 or selection_ports)
falsepositives:
    - Legitimate local development servers on ports 8080/8081
level: high
tags:
    - attack.command_and_control
    - attack.t1071.001
    - attack.t1195.002
---
title: Miasma v3 - Developer Credential Store Access by Node Process
id: 4c8e2b1a-6d3f-4a9c-b7e2-1f5d8c0a3b67
status: experimental
description: Detects node/npm processes reading developer secret stores (npmrc, SSH keys, AWS/Azure/GCP credentials) consistent with Miasma worm credential harvesting behavior.
author: Security Arsenal Threat Intelligence
date: 2026/08/14
references:
    - https://research.jfrog.com/post/miasma-worm-returns-to-npm/
logsource:
    category: file_event
    product: windows
detection:
    selection_image:
        Image|endswith:
            - '\node.exe'
            - '\npm.exe'
            - '\npm.cmd'
    selection_target:
        TargetFilename|contains:
            - '\.npmrc'
            - '\.ssh\id_'
            - '\.aws\credentials'
            - '\.azure\'
            - '\gcloud\credentials'
    condition: selection_image and selection_target
falsepositives:
    - Legitimate npm publish/login operations; validate against change windows
level: critical
tags:
    - attack.credential_access
    - attack.t1552.001
    - attack.t1078
---
title: Tomorrowland Fraud Domain Resolution - Typosquat DNS Query
id: 9a1d5f3c-2e7b-4c8d-a6f1-3b9e4d2c7a15
status: experimental
description: Detects DNS queries for known Tomorrowland 2026 fraudulent ticketing domains used in credential and payment harvesting scams.
author: Security Arsenal Threat Intelligence
date: 2026/08/14
references:
    - https://www.cloudsek.com/blog/tomorrowland-2026-fake-ticket-scams-belgium
logsource:
    category: dns
detection:
    selection:
        query|contains:
            - 'tomorrowland-booking.com'
            - 'belgium-tomorrowlland.com'
            - 'belgium-tomorrowlland.info'
            - 'belgiumtomoorrowland.com'
            - 'festreisen.com'
            - 'jedemenatomorrowland.cz'
            - 'mcsdirect.tech'
            - 'tmrlnd.shop'
    condition: selection
falsepositives:
    - Threat research and sandbox detonation
level: high
tags:
    - attack.initial_access
    - attack.t1566
    - attack.t1583.001
KQL — Microsoft Sentinel / Defender
// Miasma v3 C2 + Tomorrowland fraud domain hunt - Microsoft Sentinel
let miasma_c2 = dynamic(["85.137.53.71"]);
let scam_domains = dynamic([
    "tomorrowland-booking.com", "belgium-tomorrowlland.com",
    "belgium-tomorrowlland.info", "belgiumtomoorrowland.com",
    "festreisen.com", "jedemenatomorrowland.cz",
    "mcsdirect.tech", "tmrlnd.shop"
]);
let c2_connections =
    DeviceNetworkEvents
    | where TimeGenerated > ago(90d)
    | where RemoteIP in (miasma_c2)
       or RemotePort in (8080, 8081, 8091) and InitiatingProcessFileName has_any ("node", "npm")
    | project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RemoteIP, RemotePort, RemoteUrl
    | extend HuntType = "Miasma C2 Beacon";
let scam_dns =
    DeviceNetworkEvents
    | where TimeGenerated > ago(90d)
    | where RemoteUrl has_any (scam_domains)
    | project TimeGenerated, DeviceName, InitiatingProcessFileName, RemoteUrl, RemoteIP
    | extend HuntType = "Tomorrowland Fraud Domain";
let secret_access =
    DeviceFileEvents
    | where TimeGenerated > ago(90d)
    | where InitiatingProcessFileName has_any ("node.exe", "npm.cmd", "npm.exe")
    | where FileName has_any (".npmrc", "id_rsa", "id_ed25519", "credentials")
       or FolderPath has_any ("\\.ssh\\", "\\.aws\\", "\\.azure\\", "gcloud")
    | project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, FolderPath, FileName
    | extend HuntType = "Developer Secret Access by Node";
union c2_connections, scam_dns, secret_access
| sort by TimeGenerated desc
PowerShell
# Security Arsenal - Miasma v3 + Tomorrowland Fraud IOC Hunt Script
# Run elevated on developer workstations / CI runners. Outputs findings to CSV.

$findings = @()
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"

Write-Host "[*] Security Arsenal IOC Hunt - Miasma v3 / Tomorrowland Scam Network" -ForegroundColor Cyan

# --- 1. Check for compromised AsyncAPI packages in node_modules and lockfiles ---
Write-Host "[1/5] Scanning for compromised AsyncAPI packages..." -ForegroundColor Yellow
$suspectPkgs = @("@asyncapi/generator", "@asyncapi/generator-helpers", "@asyncapi/generator-components", "@asyncapi/specs")
$searchRoots = @("$env:USERPROFILE", "C:\dev", "C:\projects", "C:\actions-runner", "C:\buildAgent")
foreach ($root in $searchRoots) {
    if (Test-Path $root) {
        foreach ($pkg in $suspectPkgs) {
            $hits = Get-ChildItem -Path $root -Recurse -Directory -Filter ($pkg.Split('/')[1]) -ErrorAction SilentlyContinue -Depth 6 |
                Where-Object { $_.FullName -like "*asyncapi*" }
            foreach ($hit in $hits) {
                $findings += [PSCustomObject]@{
                    Time = $timestamp; Type = "Suspect npm Package"
                    Detail = $hit.FullName; Severity = "CRITICAL - Verify version against JFrog advisory"
                }
            }
        }
    }
}

# --- 2. Check active and historical network connections to Miasma C2 ---
Write-Host "[2/5] Checking network connections to Miasma C2 (85.137.53.71)..." -ForegroundColor Yellow
$conns = Get-NetTCPConnection -ErrorAction SilentlyContinue | Where-Object { $_.RemoteAddress -eq "85.137.53.71" }
foreach ($c in $conns) {
    $proc = Get-Process -Id $c.OwningProcess -ErrorAction SilentlyContinue
    $findings += [PSCustomObject]@{
        Time = $timestamp; Type = "C2 Connection (LIVE)"
        Detail = "$($proc.ProcessName) (PID $($c.OwningProcess)) -> 85.137.53.71:$($c.RemotePort)"
        Severity = "CRITICAL - Isolate host immediately"
    }
}

# --- 3. Check DNS cache for Tomorrowland fraud domains ---
Write-Host "[3/5] Checking DNS cache for fraud domains..." -ForegroundColor Yellow
$fraudDomains = @("tomorrowland-booking.com","belgium-tomorrowlland.com","belgium-tomorrowlland.info",
                  "belgiumtomoorrowland.com","festreisen.com","jedemenatomorrowland.cz","mcsdirect.tech","tmrlnd.shop")
$dnsCache = Get-DnsClientCache -ErrorAction SilentlyContinue
foreach ($d in $fraudDomains) {
    $match = $dnsCache | Where-Object { $_.Entry -like "*$d*" }
    if ($match) {
        $findings += [PSCustomObject]@{
            Time = $timestamp; Type = "Fraud Domain in DNS Cache"
            Detail = $d; Severity = "HIGH - User may have visited scam site; check for card/credential entry"
        }
    }
}

# --- 4. Detect recent modification of developer credential stores (possible theft staging) ---
Write-Host "[4/5] Checking credential stores for recent anomalous access..." -ForegroundColor Yellow
$secretPaths = @("$env:USERPROFILE\.npmrc","$env:USERPROFILE\.ssh","$env:USERPROFILE\.aws\credentials","$env:USERPROFILE\.azure")
foreach ($p in $secretPaths) {
    if (Test-Path $p) {
        $item = Get-Item $p -ErrorAction SilentlyContinue
        if ($item.LastAccessTime -gt (Get-Date).AddDays(-14)) {
            $findings += [PSCustomObject]@{
                Time = $timestamp; Type = "Recent Secret Store Access"
                Detail = "$p last accessed $($item.LastAccessTime)"
                Severity = "MEDIUM - Correlate with node/npm process telemetry"
            }
        }
    }
}

# --- 5. Check for suspicious npm postinstall persistence (scheduled tasks / run keys spawned near install time) ---
Write-Host "[5/5] Checking persistence mechanisms..." -ForegroundColor Yellow
$runKeys = @("HKCU:\Software\Microsoft\Windows\CurrentVersion\Run","HKLM:\Software\Microsoft\Windows\CurrentVersion\Run")
foreach ($rk in $runKeys) {
    if (Test-Path $rk) {
        $vals = Get-ItemProperty $rk -ErrorAction SilentlyContinue
        $vals.PSObject.Properties | Where-Object { $_.Value -match "node|npm|\.js" } | ForEach-Object {
            $findings += [PSCustomObject]@{
                Time = $timestamp; Type = "Suspicious Run Key"
                Detail = "$rk :: $($_.Name) = $($_.Value)"; Severity = "HIGH - Possible npm-delivered persistence"
            }
        }
    }
}
Get-ScheduledTask -ErrorAction SilentlyContinue | Where-Object {
    $_.Actions.Execute -match "node|npm" -and $_.Date -gt (Get-Date).AddDays(-45)
} | ForEach-Object {
    $findings += [PSCustomObject]@{
        Time = $timestamp; Type = "Suspicious Scheduled Task"
        Detail = "$($_.TaskName) -> $($_.Actions.Execute)"; Severity = "HIGH"
    }
}

# --- Output ---
if ($findings.Count -gt 0) {
    $out = ".\arsenal_ioc_hunt_$(Get-Date -Format 'yyyyMMdd_HHmmss').csv"
    $findings | Export-Csv -Path $out -NoTypeInformation
    Write-Host "[!] $($findings.Count) findings written to $out" -ForegroundColor Red
    $findings | Format-Table -AutoSize
} else {
    Write-Host "[+] No IOC matches found on this host." -ForegroundColor Green
}

Response Priorities

Immediate (0-4 hours)

  • Block 85.137.53.71 at all egress points (firewall, proxy, EDR network indicators) — all ports, not just 8080/8081/8091.
  • Push all 18 Tomorrowland fraud domains to DNS sinkhole, web proxy deny lists, and email security gateways.
  • Query artifact registries, lockfiles, and SBOMs for the four compromised AsyncAPI packages; any CI runner or developer workstation that installed them is treated as compromised.
  • Run the KQL union hunt across the last 90 days to identify historical exposure.

24 Hours

  • Rotate every secret on any host that executed the malicious packages: npm tokens, SSH keys, AWS/Azure/GCP credentials, and CI/CD environment variables. Assume full theft.
  • Audit npm/GitHub publishing activity for unauthorized package publishes using stolen tokens — Miasma is a worm and self-propagates through maintainer accounts.
  • Force password resets and session invalidation for any user whose DNS/proxy logs show visits to the fraud domains; if corporate cards were entered, trigger card reissue.
  • Review GitHub Actions OIDC publishing workflows in your own org for equivalent hijack exposure (workflow permissions, branch protections, environment approval gates).

1 Week

  • Enforce npm provenance plus out-of-band version verification — this campaign proved provenance alone is insufficient when the pipeline itself is the delivery vehicle. Add registry allowlisting or a vetted internal npm mirror.
  • Deploy lifecycle-script blocking (--ignore-scripts) in CI builds where feasible and gate exceptions.
  • Implement secrets-scanning guardrails so developer credential stores cannot be read by build tooling without alerting.
  • Stand up brand/typosquat monitoring with fuzzy matching on double-letter and TLD-permutation patterns for major events relevant to your user base; feed results into DNS filtering automatically.
  • Brief employees on event-driven social engineering — ticket scarcity scams will recur for every sold-out event season.

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.

Miasma Worm v3 npm Supply-Chain Attack + Tomorrowland Credential-Harvesting Scam Network: OTX Pulse Analysis — Detection Pack | Security Arsenal | Security Arsenal