Open Source · · 2 days

Miasma poisoned LeoPlatform npm and jumped to a Go module

In late June 2026 the Miasma worm republished 23 LeoPlatform and RStreams npm packages with a malicious binding.gyp, then reached the Verana Blockchain Go module. It was the campaign's first move outside npm, though Socket notes the execution path is not Go-native.

Part of Miasma worm rode a build-config file through npm campaign

A late-June 2026 wave of the Miasma worm poisoned 23 npm packages belonging to the LeoPlatform and RStreams data-streaming projects, along with three packages published by the account llxlr. Socket, which analyzed the wave, also found compromise indicators in a Go module for the Verana Blockchain project. That made it the first time the campaign reached outside npm.

LeoPlatform and RStreams publish serverless data-streaming libraries for AWS. The malicious releases went out in a tight window, inserted as new patch versions across every supported major release series at once, so a project pinned to any maintained line would pick one up. The delivery reused the technique from the June 3 wave: a weaponized binding.gyp that runs during npm install when node-gyp evaluates it, rather than a lifecycle script that an install-time scanner would flag.

From there the chain ran through a ROT Caesar layer, AES-GCM decryption, and a downloaded Bun runtime used to execute the JavaScript payload outside Node's own security hooks. It collected npm tokens, GitHub secrets, SSH keys, and cloud credentials, and searched for GitHub Actions workflows with publishing permissions to extract more. The marker string RevokeAndItGoesKaboom tied the wave to earlier GitHub Actions compromises in the same family.

The persistence is what distinguishes this wave. Rather than relying on the package staying installed, the malware wrote hooks into developer tooling configuration for Claude, VS Code, Cursor, and Copilot, staging payloads in a .claude folder with a VS Code folder-open task that invokes node .claude/setup.mjs. A developer who merely opened a poisoned repository later would execute it, which extends the blast radius well past whoever ran the original install. Socket advised rotating exposed credentials from a clean machine and auditing repositories for injected workflows, unexpected branches, and .claude/ or .github/ configuration files. Researchers track the family under the overlapping names Mini Shai-Hulud, Miasma, and Hades.

Notes

  • This wave is the Miasma campaign's first move outside npm. Socket cautions that normal Go module resolution and build logic do not appear to execute the payload, so this is not a Go-native compromise.
  • Sources differ on timing. The Hacker News places the npm releases on 2026-06-24, while Socket describes all compromised versions being published within a 30-second window on 2026-06-26. Both dates are retained in the range.
  • 23 packages across LeoPlatform and RStreams are affected, plus three hexo, prism and solo-nav packages published by the llxlr account. Socket enumerated the names and the single malicious version for each.
  • Researchers use Mini Shai-Hulud, Miasma and Hades for overlapping parts of this family. The binding.gyp delivery matches the 2026-06-03 wave recorded at [[vapi-server-sdk]].

Appendix · Affected releases

1.0.4 sha256 92079d71…9d97b47a download unavailable
  • OSSF MAL-2026-6491 maps these checksums to the complete hexo-deployer-wrangler-1.0.4.tgz npm archive.
0.1.10 sha256 8f7e99a8…d0c4fa81 download unavailable
  • OSSF MAL-2026-6492 maps these checksums to the complete hexo-shoka-swiper-0.1.10.tgz npm archive.
leo-auth npm
4.0.6 sha256 a934a5bc…bcede343 download unavailable
  • OSSF MAL-2026-6417 maps these checksums to the complete leo-auth-4.0.6.tgz npm archive.
leo-aws npm
2.0.4 sha256 f7c47be3…cfe18f3d download unavailable
  • OSSF MAL-2026-6418 maps these checksums to the complete leo-aws-2.0.4.tgz npm archive.
leo-cache npm
1.0.2 sha256 b5950fef…e06460ff download unavailable
  • OSSF MAL-2026-6419 maps these checksums to the complete leo-cache-1.0.2.tgz npm archive.
0.0.2 sha256 8250b06f…9717274f download unavailable
  • OSSF MAL-2026-6420 maps these checksums to the complete leo-cdk-lib-0.0.2.tgz npm archive.
leo-cli npm
3.0.3 sha256 3da2ca12…007adad1 download unavailable
  • OSSF MAL-2026-6421 maps these checksums to the complete leo-cli-3.0.3.tgz npm archive.
1.1.1 sha256 df98e479…b4e8d1f6 download unavailable
  • OSSF MAL-2026-6422 maps these checksums to the complete leo-config-1.1.1.tgz npm archive.
2.0.6 sha256 8187a62d…42daeed3 download unavailable
  • OSSF MAL-2026-6423 maps these checksums to the complete leo-connector-elasticsearch-2.0.6.tgz npm archive.
3.0.8 sha256 9417acf8…e0c1d39e download unavailable
  • OSSF MAL-2026-6424 maps these checksums to the complete leo-connector-mongo-3.0.8.tgz npm archive.
3.0.3 sha256 b7016b38…7c22d341 download unavailable
  • OSSF MAL-2026-6425 maps these checksums to the complete leo-connector-mysql-3.0.3.tgz npm archive.
2.0.1 sha256 fbe03c09…faab24d7 download unavailable
  • OSSF MAL-2026-6426 maps these checksums to the complete leo-connector-oracle-2.0.1.tgz npm archive.
3.0.6 sha256 f59f262b…a091e304 download unavailable
  • OSSF MAL-2026-6427 maps these checksums to the complete leo-connector-redshift-3.0.6.tgz npm archive.
leo-cron npm
2.0.2 sha256 3dcc20fe…e354dc01 download unavailable
  • OSSF MAL-2026-6428 maps these checksums to the complete leo-cron-2.0.2.tgz npm archive.
1.0.8 sha256 3967738a…db301304 download unavailable
  • OSSF MAL-2026-6429 maps the SHA-1 and SHA-512 to the complete leo-logger-1.0.8.tgz npm archive. Both match the StepSecurity-captured bytes; the SHA-256 was measured from that verified archive.
leo-sdk npm
6.0.19 sha256 f565988f…1729cf81 download unavailable
  • OSSF MAL-2026-6430 maps these checksums to the complete leo-sdk-6.0.19.tgz npm archive.
2.0.1 sha256 c63d7ef8…98927d7a download unavailable
  • OSSF MAL-2026-6431 maps these checksums to the complete leo-streams-2.0.1.tgz npm archive.
1.0.1 sha256 6451cf14…c42d9ce4 download unavailable
  • OSSF MAL-2026-6493 maps these checksums to the complete prism-silq-1.0.1.tgz npm archive.
2.0.2 sha256 6fa3ead4…d0512ddb download unavailable
  • OSSF MAL-2026-6432 maps these checksums to the complete rstreams-metrics-2.0.2.tgz npm archive.
1.0.1 sha256 3a8a36c1…05e98e0e download unavailable
  • OSSF MAL-2026-6433 maps these checksums to the complete rstreams-shard-util-1.0.1.tgz npm archive.
2.0.4 sha256 74b5a190…930a9daf download unavailable
  • OSSF MAL-2026-6434 maps these checksums to the complete serverless-convention-2.0.4.tgz npm archive.
3.0.14 sha256 d7961536…5c5de147 download unavailable
  • OSSF MAL-2026-6435 maps these checksums to the complete serverless-leo-3.0.14.tgz npm archive.
solo-nav npm
1.0.1 sha256 fc86af77…316ee9d8 download unavailable
  • OSSF MAL-2026-6436 maps these checksums to the complete solo-nav-1.0.1.tgz npm archive.
  • Socket staged payloads in a .claude folder with a VS Code folder-open task invoking node .claude/setup.mjs. The recorded SHA-256 is the module archive.

Indicators

  • malware_familyMiasma
  • filebinding.gyp
  • file.claude/setup.mjs
  • stringRevokeAndItGoesKaboom
  • accountnpm: llxlr

References

  1. Miasma Mini Shai-Hulud Hits LeoPlatform npm Packages and Go Ecosystem - Socketsocket.dev
  2. Miasma Malware Targets npm Packages and GitHub Actions in Supply Chain Attack - The Hacker Newsthehackernews.com
  3. Mini Shai-Hulud Worm Poisons LeoPlatform npm Packages to Steal Developer and CI/CD Secrets - GBHackersgbhackers.com
  4. Shai-Hulud Miasma Supply Chain Attack On LeoPlatform - CyberSecureFoxcybersecurefox.com
  5. OSSF malicious-packages databasegithub.com
  6. Immutable StepSecurity workflow that captured leo-logger 1.0.8 with npm packgithub.com
  7. Successful StepSecurity leo-logger capture rungithub.com
  8. GitHub Actions metadata for the retained leo-logger-tarballs artifactapi.github.com

Source record: oss/attacks/leoplatform-rstreams/meta.yaml