Miasma Mini Shai-Hulud Hits LeoPlatform npm Packages and GitHub Actions, Expands to the Go Ecosystem

Miasma Mini Shai-Hulud Hits LeoPlatform npm Packages and GitHub Actions, Expands to the Go Ecosystem
Socket Threat Research is tracking a new supply chain attack wave tied to the Mini Shai-Hulud, Miasma, and Hades malware family, affecting LeoPlatform/RStreams npm packages, three llxlr-published npm packages, and the Verana Blockchain Go module. The campaign abuses npm poisoning, GitHub Actions, binding.gyp execution, Bun-staged payloads, and developer-tool hooks to steal secrets and spread across repositories and CI/CD workflows. #LeoPlatform #RStreams #VeranaBlockchain #MiniShaiHulud #Miasma #Hades #RevokeAndItGoesKaboom

Keypoints

  • Malicious npm releases hit LeoPlatform and RStreams packages in a tight burst on June 24, 2026.
  • Three additional malicious npm packages published by llxlr were also identified: hexo-deployer-wrangler, hexo-shoka-swiper, and prism-silq.
  • The campaign uses binding.gyp and node-gyp to trigger code execution during installation, even without obvious preinstall or postinstall scripts.
  • Payloads use ROT-style decoding, AES-GCM decryption, JavaScript obfuscation, and Bun-based staging to run the main malware.
  • The malware targets developer, CI/CD, cloud, and AI-tool credentials, including GitHub tokens, npm tokens, AWS, Azure, GCP, Vault, SSH keys, and Slack tokens.
  • GitHub Actions is a major focus, with secret theft, artifact uploads, repository poisoning, and workflow abuse, including the RevokeAndItGoesKaboom marker.
  • Socket also found the same family in a Verana Blockchain Go module/source archive, showing the campaign extends beyond npm into source-repository and IDE-triggered execution.

MITRE Techniques

  • [T1195.002 ] Compromise Software Supply Chain – The attackers poisoned npm packages and a Go module to distribute malicious payloads through trusted developer dependencies. (‘malicious npm releases’ and ‘source-repository compromise’)
  • [T1059.007 ] JavaScript – The payload is delivered as obfuscated JavaScript and executed through index.js, eval(), and Bun. (‘executes JavaScript during the build configuration phase’ and ‘immediate eval() execution’)
  • [T1055 ] Process Injection – No direct process injection is described in the article.
  • [T1059.006 ] Command and Scripting Interpreter: JavaScript – The malware uses JavaScript loaders and hooks to execute staged code. (‘a large one-line JavaScript loader’)
  • [T1106 ] Native API – The malicious binding.gyp leverages node-gyp and shell expansion to invoke commands during install/build steps. (‘npm automatically invokes node-gyp’ and ‘command expansion’)
  • [T1027 ] Obfuscated Files or Information – The payload uses Caesar-style shifts, AES-GCM-encrypted blobs, lookup tables, and string hiding. (‘JavaScript-obfuscator-style string hiding’ and ‘obfuscated payload’)
  • [T1027.009 ] Embedded Payloads – The malware decrypts embedded stages from within the loader. (‘decrypted AES-GCM payloads’)
  • [T1059.001 ] PowerShell – No PowerShell activity is described in the article.
  • [T1059.004 ] Unix Shell – The malware relies on shell expansion and command execution in the install path. (‘invokes a shell expansion’)
  • [T1105 ] Ingress Tool Transfer – The malware attempts to download or install Bun if it is missing. (‘attempts to download or install it’)
  • [T1021 ] Remote Services – The campaign abuses GitHub Actions, GitHub API behavior, and trusted developer workflows for spread and exfiltration. (‘GitHub Actions secret theft’ and ‘GitHub API behavior for staging and exfiltration’)
  • [T1078 ] Valid Accounts – Stolen GitHub, npm, cloud, and CI/CD credentials are used for further access and propagation. (‘Package registry credentials allow malicious republishes’)
  • [T1552 ] Unsecured Credentials – The payload collects secrets from .env files, tokens, SSH keys, cloud credentials, and CI secrets. (‘collects .env files, npm and PyPI tokens, GitHub tokens’)
  • [T1560 ] Archive Collected Data – The campaign uploads artifacts containing stolen secrets from GitHub Actions runs. (‘dumping GitHub Actions secrets into an uploaded artifact’)
  • [T1213 ] Data from Information Repositories – The malware searches repositories and GitHub commits for operational markers and dead-drop content. (‘GitHub commit search results’ and ‘dead-drop channel’)
  • [T1098 ] Account Manipulation – The attackers alter repositories, add workflows, poison branches, and plant persistence hooks. (‘it can alter repositories, add workflows, poison branches’)
  • [T1546 ] Event Triggered Execution – The malware uses folder-open tasks, Claude hooks, Cursor rules, and workflow hooks to trigger execution. (‘VS Code folder-open task’ and ‘Claude SessionStart hook’)
  • [T1053.005 ] Scheduled Task/Job: Scheduled Task – The article does not describe Windows scheduled tasks, but it does mention workflow and folder-open execution triggers.
  • [T1611 ] Escape to Host – Not explicitly described.
  • [T1133 ] External Remote Services – The campaign targets cloud, CI/CD, and third-party service credentials such as AWS, Azure, GCP, Vault, Slack, and Twilio. (‘AWS credentials, Azure credentials, GCP credentials, Vault data’)

Indicators of Compromise

  • [Package names/version ] Malicious npm packages published in the campaign – [email protected], [email protected], and 2 more packages
  • [Package names/version ] Additional malicious packages published by llxlr – [email protected], [email protected], and 1 more package
  • [File names ] Infected package and repository payloads – binding.gyp, _index.js, and other injected config files
  • [File names ] AI/IDE persistence and execution hooks – .claude/setup.mjs, .github/setup.js, and other setup files
  • [File names ] Developer-tool workflow artifacts – .vscode/tasks.json, .claude/settings.json, and .gemini/settings.json
  • [File names ] Verana Blockchain source archive artifacts – verana-blockchain-v0.10.1-dev.20.zip, .claude/index.js, and .vscode/setup.mjs
  • [SHA-256 hashes ] Confirmed LeoPlatform/RStreams artifacts – 32d1bc728d8e504952083a6adc488c309a401c7df4dc8f47b382ce32e4aebe21, 57ba86f6f0caaa580c1dccdf4ed7873d1470e5ea2f8e9ca7a989dc04899f13c0, and 4a0aa78757958683155a7b9289427fb829abcad1bf5ee6399eb73e8409b0bc11
  • [SHA-256 hashes ] Verana Blockchain archive and payload hashes – b3e217f4354e8a4383038b99b0bcaeaff191a79df58e7a1f2355a79aac2faf13, 15b415ae41df72acf1f7e9e67569531d41dee62d089d34b4c0fab0c7fe5cc14f, and 6cb3fc3650355973b8a1ed86619a3f412fb0700f29c1c3a736cada4c2c76a9f7
  • [Campaign strings ] Operational markers linked to the cluster – RevokeAndItGoesKaboom, Alright Lets See If This Works, and TheBeautifulSandsOfTime

MITRE Techniques

  • [T1195.002 ] Compromise Software Supply Chain – The attackers poisoned npm packages and a Go module to distribute malicious payloads through trusted developer dependencies. (‘malicious npm releases’ and ‘source-repository compromise’)
  • [T1059.007 ] JavaScript – The payload is delivered as obfuscated JavaScript and executed through index.js, eval(), and Bun. (‘executes JavaScript during the build configuration phase’ and ‘immediate eval() execution’)
  • [T1059.006 ] Command and Scripting Interpreter: JavaScript – The malware uses JavaScript loaders and hooks to execute staged code. (‘a large one-line JavaScript loader’)
  • [T1106 ] Native API – The malicious binding.gyp leverages node-gyp and shell expansion to invoke commands during install/build steps. (‘npm automatically invokes node-gyp’ and ‘command expansion’)
  • [T1027 ] Obfuscated Files or Information – The payload uses Caesar-style shifts, AES-GCM-encrypted blobs, lookup tables, and string hiding. (‘JavaScript-obfuscator-style string hiding’ and ‘obfuscated payload’)
  • [T1027.009 ] Embedded Payloads – The malware decrypts embedded stages from within the loader. (‘decrypted AES-GCM payloads’)
  • [T1105 ] Ingress Tool Transfer – The malware attempts to download or install Bun if it is missing. (‘attempts to download or install it’)
  • [T1552 ] Unsecured Credentials – The payload collects secrets from .env files, tokens, SSH keys, cloud credentials, and CI secrets. (‘collects .env files, npm and PyPI tokens, GitHub tokens’)
  • [T1560 ] Archive Collected Data – The campaign uploads artifacts containing stolen secrets from GitHub Actions runs. (‘dumping GitHub Actions secrets into an uploaded artifact’)
  • [T1213 ] Data from Information Repositories – The malware searches repositories and GitHub commits for operational markers and dead-drop content. (‘GitHub commit search results’ and ‘dead-drop channel’)
  • [T1098 ] Account Manipulation – The attackers alter repositories, add workflows, poison branches, and plant persistence hooks. (‘it can alter repositories, add workflows, poison branches’)
  • [T1546 ] Event Triggered Execution – The malware uses folder-open tasks, Claude hooks, Cursor rules, and workflow hooks to trigger execution. (‘VS Code folder-open task’ and ‘Claude SessionStart hook’)
  • [T1133 ] External Remote Services – The campaign targets cloud, CI/CD, and third-party service credentials such as AWS, Azure, GCP, Vault, Slack, and Twilio. (‘AWS credentials, Azure credentials, GCP credentials, Vault data’)


Read more: https://socket.dev/blog/miasma-mini-shai-hulud-hits-leoplatform-npm-packages-go-ecosystem