Skip to main content
Mallory
MalwareUsed by 1 actor

IronWorm

IronWorm is a custom Rust-based infostealer and self-propagating software supply-chain worm discovered by JFrog and distributed via malicious npm packages, including packages published from the compromised asteroiddao account. It targets software developers, with reporting indicating a particular focus on crypto and web3 developers. Infection occurs through trojanized npm package versions that execute a hidden Linux ELF binary via npm preinstall or postinstall hooks, often placed under paths such as tools/setup or .github/scripts/precheck. The malware steals a broad set of developer secrets, including API keys, cloud credentials, SSH keys, npm publishing tokens, CI/CD secrets, cryptocurrency wallet data, and other credentials from 86 environment variables and more than 20 credential file paths such as ~/.aws/credentials, ~/.kube/config, ~/.docker/config.json, ~/.claude/.credentials.json, ~/.codex/auth.json, ~/Cursor/auth.json, and ~/.gemini/settings.json. Reported targets include AWS, GCP, Azure, Vault, Kubernetes, Docker, GitHub, npm, and multiple AI providers, and it also contains dedicated modules for Exodus wallet credential and seed capture plus Kubernetes and Vault secret harvesting. IronWorm communicates with its operator over Tor, beaconing to an /api/agent endpoint, and supports secret upload, file download, and remote shell execution. For stealth and persistence, it uses a modified UPX-packed Linux ELF with overwritten UPX markers, per-call-site string decryption, and an embedded eBPF rootkit that hides processes and TCP connections, rewrites /proc and netlink-derived views, and kills ptrace attempts with SIGKILL. The malware propagates by reusing stolen credentials to push malicious, backdated commits into accessible GitHub repositories and to publish trojanized package updates to npm; observed spoofed identities included claude, dependabot, renovate, and github-actions. In CI environments it can abuse npm Trusted Publishing OIDC flows to mint short-lived publish tokens without stored npm credentials. Reporting linked the campaign to at least 36-37 malicious npm packages and 57 malicious code changes across repositories in nine GitHub organizations including ocrybit, asteroid-dao, alisista, warashibe, kakedashi-hacker, weavedb, ArweaveOasis, arthursimao, and mlebjerg. Notable indicators mentioned in the reporting include the fake commit author email claude@users.noreply.github.com, the Tor C2 path /api/agent, and the Ethereum address 0x7e28D9889f414B06c19a22A9Bd316f0AC279a4d6 derived from a hardcoded wallet recovery phrase embedded in the malware.

Share:
For your environment

Hunt this family in your stack

Mallory pivots from this family to the IOCs, detections, and named campaigns that touch your stack, and pages you when something new lands.

THREAT ACTORS

Groups observed using it

1 distinct threat actor attributed by public researchers. Open in Mallory to see the full evidence chain and overlapping campaigns.

View more details
TeamPCP

A new supply-chain attack has infected 36 packages on the Node Package Manager (npm) index with infostealer malware called IronWorm. The malware targets 86 environment variables and 20 credential files... According to researchers at JFrog, IronWorm is written in Rust, hides behind an eBPF kernel rootkit, and communicates with the operator over the Tor network.

via bleeping computerbleepingcomputer.com
MITRE ATT&CK

Techniques & procedures

30 distinct techniques documented for this family, organized by ATT&CK tactic.

Initial Access

3 techniques
T1078Valid AccountsEvidence2

JFrog identified the activity while investigating suspicious behavior linked to a developer account within the Arweave/WeaveDB open source ecosystem.

T1195Supply Chain CompromiseEvidence4

The campaign, which JFrog has dubbed "IronWorm," targets developers through compromised npm publishing workflows and malicious package updates.

T1199Trusted RelationshipEvidence1

The attack is built to spread itself through trusted developer workflows... When the malware runs inside a CI environment, it uses npm’s own Trusted Publishing flow to get short-lived publish credentials.

Execution

4 techniques
T1059Command and Scripting InterpreterEvidence2
TacticExecution

The supported command set is intentionally small: upload extracted credentials, drop a file from the attacker-controlled server, or execute a remote shell command on the infected host. | The developer or CI runner executes npm install ... The preinstall script ./tools/setup fires before npm resolves dependencies. No build step, no manual confirmation, no user interaction.

T1059.004Unix ShellEvidence1
TacticExecution

The package.json gave away the trick: { "scripts" : { "preinstall" : "./tools/setup" } } preinstall runs before npm even starts resolving dependencies.

T1059.007JavaScriptEvidence2
TacticExecution

The package.json gave away the trick: { "name" : "weavedb-sdk" , "version" : "0.45.3" , "scripts" : { "preinstall" : "./tools/setup" } } preinstall runs before npm even starts resolving dependencies. Type npm install , and the binary executes

T1574Hijack Execution FlowEvidence1

If the repository shipped a package -npm, PyPI, Cargo, Conan, or vcpkg(C++) - the malware took a more direct route: it dropped a binary into the project and modified the build system to execute it.

Persistence

2 techniques
T1078Valid AccountsEvidence2

JFrog identified the activity while investigating suspicious behavior linked to a developer account within the Arweave/WeaveDB open source ecosystem.

T1556Modify Authentication ProcessEvidence1

One of them targets the Exodus desktop wallet by injecting a JavaScript hook into the application... Its goal is not subtle: capture the wallet password and seed mnemonic.

T1078Valid AccountsEvidence2

JFrog identified the activity while investigating suspicious behavior linked to a developer account within the Arweave/WeaveDB open source ecosystem.

Stealth

10 techniques
T1014RootkitEvidence3
TacticStealth

The security vendor's analysis showed IronWorm uses a rootkit that abuses the Linux kernel's extended Berkeley Packet Filter (eBPF) to hide malicious processes, files, network activity, and other behavior from security systems.

T1027Obfuscated Files or InformationEvidence2
TacticStealth

The sample was a Linux ELF executable packed with a lightly modified UPX stub... The sample also hid most of its useful strings... each call site used its own parameters.

T1036MasqueradingEvidence2
TacticStealth

This was committed under the author name claude <claude@users.noreply.github.com> , mimicking an AI coding assistant... Workflow commits are using a rotating cast of familiar automation identities - dependabot , renovate , github-actions | The payload was placed under an innocuous-looking path such as tools/setup or .github/scripts/precheck . This was committed under the author name claude <claude@users.noreply.github.com> ... Workflow commits are using a rotating cast of familiar automation identities - dependabot , renovate , github-actions.

T1070.006TimestompEvidence1
TacticStealth

the disassembly confirmed the trick: the malware copies the timestamp of the repository's most recent real commit, so the malicious change appears to have been made whenever the project was last legitimately touched.

T1078Valid AccountsEvidence2

JFrog identified the activity while investigating suspicious behavior linked to a developer account within the Arweave/WeaveDB open source ecosystem.

T1564Hide ArtifactsEvidence3
TacticStealth

The rootkit parses /proc/net/tcp as it is read and removes rows belonging to hidden sockets. Similar filtering applies to the netlink interface used by ss, so the implant’s Tor connections disappear | The rootkit hides processes by rewriting /proc directory listings in place, removing PIDs on a hidden-set watchlist before userland tools can see them.

T1564.001Hidden Files and DirectoriesEvidence1
TacticStealth

The same hiding strategy extended to the network. The rootkit parsed /proc/net/tcp as it was read and removed rows belonging to hidden sockets. It also applied similar filtering to the netlink interface used by tools like ss | When anything in /proc was listed , the rootkit rewrote the results in place, removing hidden PIDs before userland tools could see them.

T1564.008Email Hiding RulesEvidence1
TacticStealth

The rootkit parsed /proc/net/tcp as it was read and removed rows belonging to hidden sockets. It also applied similar filtering to the netlink interface used by tools like ss

T1574Hijack Execution FlowEvidence1

If the repository shipped a package -npm, PyPI, Cargo, Conan, or vcpkg(C++) - the malware took a more direct route: it dropped a binary into the project and modified the build system to execute it.

T1622Debugger EvasionEvidence2

Then came the anti-debugging logic. Attempts to ptrace a protected process were answered with SIGKILL . In practice, trying to strace the malware could kill the shell running the command.

T1556Modify Authentication ProcessEvidence1

One of them targets the Exodus desktop wallet by injecting a JavaScript hook into the application... Its goal is not subtle: capture the wallet password and seed mnemonic.

Credential Access

6 techniques
T1528Steal Application Access TokenEvidence1

The credential sweep is exhaustive. The binary reaches for 86 environment variables spanning every major platform... source-control and package-registry tokens, CI/CD systems, messaging platforms, Vault and Kubernetes. | If the repository already had GitHub Actions workflows... it replaced an existing one -swapping a real workflow for a secret-exfiltration job... The ${{ toJSON(secrets) }} expression serializes the secrets available to the workflow run into a single value

T1552Unsecured CredentialsEvidence1

The malware scans for 86 different environment variables covering cloud platforms, databases, CI/CD systems, source control tokens, and AI service API keys. It also reads more than 20 credential file paths from disk, including wallet configs and authentication files.

T1552.001Credentials In FilesEvidence1

The binary reaches for 86 environment variables spanning every major platform a developer touches: the cloud providers, object storage, databases, source-control and package-registry tokens, CI/CD systems

T1555Credentials from Password StoresEvidence2

The credential sweep is exhaustive... It goes after files, too: more than twenty credential paths, including... ~/.aws/credentials , ~/.kube/config , and ~/.docker/config.json | It goes after files, too: more than twenty credential paths, including ones for tools that barely existed a year ago ... alongside the classics like ~/.aws/credentials , ~/.kube/config , and ~/.docker/config.json .

T1556Modify Authentication ProcessEvidence1

One of them targets the Exodus desktop wallet by injecting a JavaScript hook into the application... Its goal is not subtle: capture the wallet password and seed mnemonic.

T1649Steal or Forge Authentication CertificatesEvidence4

The malware, written in Rust, harvests a wide range of developer secrets, including API keys, cloud credentials, SSH keys, and npm publishing tokens, and reuses them to spread further across the software supply chain.

Discovery

3 techniques
T1526Cloud Service DiscoveryEvidence1
TacticDiscovery

Another, running inside a Kubernetes pod, reads the service-account token, walks the namespaces, and dumps every Secret it can reach and if it finds a Vault instance, it logs in with that same token and enumerates the secret backends.

T1613Container and Resource DiscoveryEvidence2
TacticDiscovery

Another, running inside a Kubernetes pod, reads the service-account token, walks the namespaces, and dumps every Secret it can reach

T1622Debugger EvasionEvidence2

Then came the anti-debugging logic. Attempts to ptrace a protected process were answered with SIGKILL . In practice, trying to strace the malware could kill the shell running the command.

Collection

1 technique
T1119Automated CollectionEvidence1

The ${{ toJSON(secrets) }} expression serializes the secrets available to the workflow run into a single value; the next step writes it to a file with a harmless-looking name.

T1071Application Layer ProtocolEvidence1

Then it beacons out to an endpoint called /api/agent , and waits for orders. The conversation itself is plain HTTP wrapped inside the Tor tunnel

T1071.001Web ProtocolsEvidence1

Then it beacons out to an endpoint called /api/agent ... The conversation itself is plain HTTP wrapped inside the Tor tunnel

T1090.003Multi-hop ProxyEvidence2

For its command channel, the malware downloads the Tor expert bundle and its libraries, writes its own torrc , starts the daemon, and waits for the circuit to come up.

T1105Ingress Tool TransferEvidence1

The commands are limited: uploading extracted secrets, drop the file from the malicious controlled server or running a remote shell on the infected machine.

Exfiltration

2 techniques
T1041Exfiltration Over C2 ChannelEvidence2

The commands are limited: uploading extracted secrets... Another piece of code suggests a possible fallback path... The agent uploads it to temp.sh ... and reports the resulting link back over C2.

T1567Exfiltration Over Web ServiceEvidence1

The agent uploads it to temp.sh , a public file host, which is tunneled through the same Tor circuit, and reports the resulting link back over C2. | the final step uploads that file as a build artifact, where it can be downloaded by anyone with sufficient access... Another piece of code suggests a possible fallback path... The agent uploads it to temp.sh , a public file host

INDICATORS OF COMPROMISE

IOCs tracked for this family

9 indicators attributed across vendor reports, sandbox runs, and researcher write-ups. Full values are available in Mallory.

View more in app
Network
1 tracked

IPs, domains, and DNS infrastructure linked to this family.

Hashes
7 tracked

File hashes (MD5, SHA-1, SHA-256) from samples and reports.

Other
1 tracked

Other indicator types observed in public reporting.

TypeValueLatest sighting
email●●●●●●●●●●●●View more in apptoday
domain●●●●●●●●●●●●View more in apptoday
hash.sha1●●●●●●●●●●●●View more in app2 days ago
hash.sha1●●●●●●●●●●●●View more in app2 days ago
hash.sha1●●●●●●●●●●●●View more in app2 days ago
hash.sha1●●●●●●●●●●●●View more in app2 days ago
ACTIVITY FEED

Recent activity

6 sources tracked across advisories, community write-ups, and news. New activity surfaces here as Mallory finds it.

cyber security newsNews
Jun 4, 2026
IronWorm Supply Chain Attack Uses Malicious npm Packages to Steal Developer Secrets

A custom Rust-based infostealer delivered through poisoned npm packages that targets software developers. It steals credentials, API keys, wallet recovery phrases, Kubernetes secrets, and Exodus wallet data; uses an eBPF kernel-level rootkit for stealth; communicates over Tor; and self-replicates by abusing compromised GitHub repositories and npm Trusted Publishing workflows to spread trojanized packages.

Read more
phoenix security blogNews
Jun 4, 2026
npm Supply Chain Worm IronWorm: Rust, eBPF Rootkit, Tor C2

A Rust-built npm supply chain worm delivered via malicious package preinstall hooks. It steals credentials from environment variables and files, deploys an embedded eBPF rootkit for stealth, uses Tor for C2, self-replicates through npm Trusted Publishing OIDC flows in CI, poisons GitHub repositories with malicious commits/workflows, and includes an Exodus wallet theft module plus Kubernetes/Vault secret harvesting.

Read more
bleeping computerNews
Jun 4, 2026
New IronWorm malware hits 36 packages in npm supply-chain attack

Rust-based infostealer used in an npm supply-chain attack. It steals environment variables, credential files, SSH keys, wallet files, and publishing secrets, self-propagates by abusing stolen npm credentials to publish trojanized packages, and uses an eBPF kernel rootkit plus Tor communications for stealth.

Read more
dark readingNews
Jun 4, 2026
Rust-Written IronWorm Hits NPM Supply Chain

A custom Rust-written malware implant targeting developers and npm supply chains. It steals developer secrets, uses them to propagate through trusted software workflows, employs an eBPF-based rootkit for stealth, and uses Tor-based C2 for covert communications.

Read more
What this page doesn’t show

The version that knows your environment.

This page is what’s public. Mallory adds the parts that aren’t: which of your assets match these IOCs, which detections are missing, which campaigns to expect next, and what to do in the next 30 minutes.
IOC matching9

Match every observed IP, domain, and hash against your live telemetry.

Threat actor attribution1

Named campaigns wielding this family, with evidence pinned to each claim.

Exploited vulnerabilities

CVEs this family uses for access and lateral movement.

Detection signatures

YARA, Sigma, Snort, and vendor rules, auto-deployed to your SIEM.

MITRE ATT&CK mapping30

Every documented technique, ranked by evidence weight.

Researcher chatter

Reddit, Mastodon, and CTI community discussion around this family.

IronWorm | Mallory