Open Source · · 2 days

IronWorm backdoored Arweave ecosystem npm packages

JFrog found a Rust-built npm worm in 36 packages published from the compromised asteroiddao account, carrying an eBPF kernel rootkit and a Tor C2. It backdated commits across nine GitHub organizations and republished via npm trusted publishing.

JFrog Security Research disclosed in early June 2026 that a self-propagating worm it named IronWorm had backdoored 36 npm packages, most of them in the Arweave and WeaveDB ecosystem, after compromising the asteroiddao publishing account. Unlike the JavaScript droppers that dominated npm attacks that year, IronWorm was a native Rust implant with a kernel-level rootkit.

The delivery was conventional enough. A preinstall hook executed a 976 KB Linux ELF binary before dependency resolution finished. Everything after that was not. The binary was packed with a modified UPX stub carrying altered magic values, which defeats signature-based unpackers, and every internal string was encrypted with a key unique to its call site, so recovering one string does not help with the next. Bundled with it was an eBPF program that hid the malware's processes and network connections from the kernel's own accounting, and a Tor client that wrapped plain HTTP command-and-control traffic in an onion circuit.

The collector targeted 86 environment variables and more than 20 credential file paths across AWS, GCP, Azure, Kubernetes, Docker, npm, and GitHub, together with a sweep for 2026-era AI provider keys covering Anthropic, OpenAI, Google Gemini, Cohere, Mistral, Groq, and xAI. Separate modules went after cryptocurrency wallets. JFrog noted that the operator had hardcoded his own wallet recovery phrase into the malware's skip list so that it would not rob him, which is how researchers came to have it.

Propagation ran two ways. The worm committed binaries into victims' GitHub repositories as build hooks, attributing the commits to "claude" so they read as AI tooling output, and it carried logic, which JFrog never observed fire in the wild, to replace GitHub Actions workflows with versions that exfiltrated ${{ toJSON(secrets) }}, attributing those to bot identities such as dependabot. It then abused npm's trusted publishing through OIDC to release poisoned versions under the compromised developers' names. JFrog counted 57 backdated commits across nine compromised GitHub organizations and said it could not match the implant, the rootkit, or the C2 tooling to any known family, indicating a custom-built operation.

Notes

  • JFrog enumerated 37 packages with one malicious version each, published from the compromised asteroiddao account and from other maintainer accounts reached with stolen credentials. Reported counts vary between 36 and 37 by source.
  • JFrog reported 57 backdated commits across nine compromised GitHub organizations, concentrated in the Arweave and WeaveDB ecosystem, and found no match to any known infostealer, rootkit framework or C2 toolkit.
  • The implant is a 976 KB Rust ELF run from a preinstall hook, with per-call-site string encryption that slowed analysis. The operator's own wallet recovery phrase is hardcoded into its skip list.
  • OSSF records preserve npm checksums for 31 releases; with four from npm and hbsig 0.3.2 from npmmirror, 36 of 37 artifacts have whole-file hashes. wdb-core 0.1.2 is reconstructed in the samples manifest and stays unhashed here.

Appendix · Affected releases

0.1.1 sha256 e657d883…8a0f5b4b download unavailable
  • OSSF MAL-2026-4720 maps these checksums to the complete weavedb-lite-0.1.1.tgz npm archive.
0.21.1 sha256 2ae2fdfb…251f53a8 download unavailable
  • OSSF MAL-2026-4724 maps these checksums to the complete weavedb-sdk-base-0.21.1.tgz npm archive.
1.1.1 sha256 40040939…d402cb48 download unavailable
  • OSSF MAL-2026-4690 maps these checksums to the complete test-weavedb-sdk-1.1.1.tgz npm archive.
1.0.11 sha256 7b7fa80f…9813fedf download unavailable
  • OSSF MAL-2026-4727 maps these checksums to the complete weavedb-warp-contracts-plugin-deploy-1.0.11.tgz npm archive.
0.0.2 sha256 f57139fe…bcbb65d5 download unavailable
  • OSSF MAL-2026-4483 maps these checksums to the complete arnext-arkb-0.0.2.tgz npm archive.
0.2.1 sha256 48e854d1…e7ac7877 download unavailable
  • OSSF MAL-2026-4717 maps these checksums to the complete weavedb-console-0.2.1.tgz npm archive.
arnext npm
0.1.5 sha256 2d31df07…cfcad3f0 download unavailable
  • OSSF MAL-2026-4482 maps these checksums to the complete arnext-0.1.5.tgz npm archive.
roidjs npm
0.1.7 sha256 48305b85…1897542e download unavailable
  • OSSF MAL-2026-4663 maps these checksums to the complete roidjs-0.1.7.tgz npm archive.
0.7.4 sha256 287eb33a…86d3e977 download unavailable
  • OSSF MAL-2026-4718 maps these checksums to the complete weavedb-exm-sdk-0.7.4.tgz npm archive.
0.0.10 sha256 59ab51cc…bcb84f8b download unavailable
  • OSSF MAL-2026-4538 maps these checksums to the complete create-arnext-app-0.0.10.tgz npm archive.
0.45.3 sha256 783ef7a6…d4921266 download unavailable
  • OSSF MAL-2026-4726 maps these checksums to the complete weavedb-tools-0.45.3.tgz npm archive.
wdb-core npm
0.1.2 sha256 8a805641…53d2c465 download unavailable
0.3.1 sha256 1a9e5f1d…ea1c4eac download unavailable
  • OSSF MAL-2026-4545 maps these checksums to the complete cwao-tools-0.3.1.tgz npm archive.
test-ajs npm
0.1.19 sha256 d6772035…24581956 download unavailable
  • OSSF MAL-2026-4689 maps these checksums to the complete test-ajs-0.1.19.tgz npm archive.
monade npm
0.0.7 sha256 e4f5e14e…048dcc29 download unavailable
  • OSSF MAL-2026-4613 maps these checksums to the complete monade-0.0.7.tgz npm archive.
0.7.4 sha256 0b661999…0ed35e96 download unavailable
  • OSSF MAL-2026-4719 maps these checksums to the complete weavedb-exm-sdk-web-0.7.4.tgz npm archive.
1.0.21 sha256 2b617bb0…2ad3bdb1 download unavailable
  • OSSF MAL-2026-4691 maps these checksums to the complete testnpmnmp-1.0.21.tgz npm archive.
3.0.1 sha256 2b6506f5…096f195e download unavailable
  • OSSF MAL-2026-4712 maps these checksums to the complete warp-contracts-plugin-deploy-test-3.0.1.tgz npm archive.
wdb-cli npm
0.1.1 sha256 51fa8b8e…8c29d52d download unavailable
  • OSSF MAL-2026-4713 maps these checksums to the complete wdb-cli-0.1.1.tgz npm archive.
ai3 npm
0.3.5 sha256 efc9e2a7…49223b6b download unavailable
  • OSSF MAL-2026-4476 maps these checksums to the complete ai3-0.3.5.tgz npm archive.
0.8.3 sha256 0f726029…629f2a00 download unavailable
  • OSSF MAL-2026-4546 maps these checksums to the complete cwao-units-0.8.3.tgz npm archive.
0.5.3 sha256 69c1035c…6eb98f72 download unavailable
  • OSSF MAL-2026-4486 maps these checksums to the complete atomic-notes-0.5.3.tgz npm archive.
cwao npm
0.5.6 sha256 a49a3c1b…c1b0e1f2 download unavailable
  • The SHA-256 identifies the complete 0.5.6 tarball retained by the official npm registry; its bytes also match npm's signed SHA-512 integrity record.
  • OSSF MAL-2026-4544 maps the SHA-1 and SHA-512 checksums to the complete cwao-0.5.6.tgz npm archive.
0.45.3 sha256 52bf78f1…edec0531 download unavailable
  • OSSF MAL-2026-4716 maps these checksums to the complete weavedb-client-0.45.3.tgz npm archive.
wdb-sdk npm
0.1.2 sha256 9a7218d7…351d365e download unavailable
  • OSSF MAL-2026-4714 maps these checksums to the complete wdb-sdk-0.1.2.tgz npm archive.
0.45.4 sha256 9b0726c6…fd02553f download unavailable
  • OSSF MAL-2026-4722 maps these checksums to the complete weavedb-offchain-0.45.4.tgz npm archive.
0.1.7 sha256 6ca4cb1b…f3723492 download unavailable
  • OSSF MAL-2026-4566 maps these checksums to the complete fpjson-lang-0.1.7.tgz npm archive.
0.45.2 sha256 bc2a3141…e6608422 download unavailable
  • OSSF MAL-2026-5192 maps these checksums to the complete weavedb-contracts-0.45.2.tgz npm archive.
0.45.3 sha256 ba224ee9…4c3eb05e download unavailable
  • OSSF MAL-2026-4721 maps these checksums to the complete weavedb-node-client-0.45.3.tgz npm archive.
arjson npm
0.1.4 sha256 7afae58a…41865930 download unavailable
  • The SHA-256 identifies the complete 0.1.4 tarball retained by the official npm registry; its bytes also match npm's signed SHA-512 integrity record.
  • OSSF MAL-2026-5189 maps the SHA-1 and SHA-512 checksums to the complete arjson-0.1.4.tgz npm archive.
hbsig npm
0.3.2 sha256 e7a4e87b…81e6f993 download unavailable
  • npmmirror retained npm's complete 0.3.2 version record and tarball. The 1,088,239-byte archive matches both the retained SHA-1 shasum and the signed SHA-512 integrity value; SHA-256 was measured over those verified bytes.
zkjson npm
0.8.5 sha256 3dcae297…2036c6ab download unavailable
  • The SHA-256 identifies the complete 0.8.5 tarball retained by the official npm registry; its bytes also match npm's signed SHA-512 integrity record.
  • OSSF MAL-2026-4739 maps the SHA-1 and SHA-512 checksums to the complete zkjson-0.8.5.tgz npm archive.
aonote npm
0.11.1 sha256 504dec1e…7348507a download unavailable
  • OSSF MAL-2026-4480 maps these checksums to the complete aonote-0.11.1.tgz npm archive.
0.45.3 sha256 3dc59672…787b197f download unavailable
  • OSSF MAL-2026-4715 maps these checksums to the complete weavedb-base-0.45.3.tgz npm archive.
0.45.3 sha256 9a099b92…c7aca210 download unavailable
  • OSSF MAL-2026-4725 maps these checksums to the complete weavedb-sdk-node-0.45.3.tgz npm archive.
wao npm
0.41.2 sha256 de20e219…75208011 download unavailable
  • OSSF MAL-2026-4711 maps these checksums to the complete wao-0.41.2.tgz npm archive.
0.45.3 sha256 0c16ee8a…67ddbf5f download unavailable
  • The SHA-256 identifies the complete 0.45.3 tarball retained by the official npm registry; its bytes also match npm's signed SHA-512 integrity record.
  • OSSF MAL-2026-4723 maps the SHA-1 and SHA-512 checksums to the complete weavedb-sdk-0.45.3.tgz npm archive.

Indicators

  • malware_familyIronWorm
  • commit_authorclaude
  • commit_authordependabot

References

  1. IronWorm: Shai-Hulud's rustier cousin - JFrog Security Researchresearch.jfrog.com
  2. IronWorm and New Miasma Worm Variant Hit npm in Supply Chain Attacks - The Hacker Newsthehackernews.com
  3. Rust-Written IronWorm Hits NPM Supply Chain - Dark Readingdarkreading.com
  4. IronWorm campaign - SafeDep Threat Intelligencesafedep.io
  5. OSSF malicious-packages databasegithub.com
  6. OSSF MAL-2026-4544 package-integrity record for cwao 0.5.6raw.githubusercontent.com
  7. OSSF MAL-2026-5189 package-integrity record for arjson 0.1.4raw.githubusercontent.com
  8. OSSF MAL-2026-4739 package-integrity record for zkjson 0.8.5raw.githubusercontent.com
  9. OSSF MAL-2026-4723 package-integrity record for weavedb-sdk 0.45.3raw.githubusercontent.com
  10. npmmirror retained npm metadata and dist integrity for hbsig 0.3.2registry.npmmirror.com

Source record: oss/attacks/ironworm-npm/meta.yaml