ProBackend
cloud security incidents
2 hours ago7 min read

IronWorm’s Rust Engine Is Rewriting the Rules of Open Source Supply Chain Attacks

A newly discovered Rust-based malware campaign, IronWorm, is hijacking npm packages to steal credentials, self-propagate via Trusted Publishing, and exfiltrate data through GitHub Actions—turning developer workflows into attack vectors.

Gray Sentinel

I’ve seen a lot of supply chain attacks. The usual suspects: typosquatted packages, compromised maintainers, dependency confusion. But IronWorm? This isn’t just another script kiddie play. This is a surgical strike on the very infrastructure developers trust.

JFrog didn’t just "find" this. They watched it evolve. And what they saw was a malware that doesn’t just steal—it learns. It doesn’t just spread—it reproduces using the same tools developers use to ship code.

This isn’t a bug. It’s a feature—of the attacker’s design.

I’m not saying this is the end of open source. But if you’re still treating your package.json like a grocery list, you’re already behind.

The Rust Engine Behind the Attack

Let’s talk about Rust. Not because it’s trendy. But because it’s perfect for this.

Rust gives you memory safety without garbage collection. It compiles to native binaries. It’s fast. It’s small. And most importantly—it’s invisible to traditional AV tools that still think in terms of Python scripts and PowerShell one-liners.

IronWorm’s core is a Rust ELF binary, packed into a preinstall hook. No shellcode. No obfuscated JS. Just clean, compiled code that runs with the same permissions as your build pipeline.

And here’s the kicker: it hides behind an eBPF rootkit. Not because it needs to. But because it wants to. It’s not trying to hide from you. It’s trying to hide from your tools.

This isn’t malware that slips in through a backdoor. It walks in the front door—wearing your badge.

How It Targets Your Dev Environment

IronWorm doesn’t scan your whole disk. It doesn’t waste time.

It goes straight for the 86 environment variables that developers actually use.

Not just AWS keys. Not just SSH certs.

But:

  • OpenAI API tokens
  • Anthropic credentials
  • npm Trusted Publishing secrets
  • Vault configs
  • Exodus wallet private keys
  • CI/CD service account tokens

These aren’t random. These are the keys to the kingdom.

And it doesn’t just read them. It serializes them into a single file—named something like .lint-cache or build-report.json—and drops it right into your CI/CD workspace.

Why? Because GitHub Actions has no reason to block a file named .lint-cache.

It’s not exfiltrating over a C2 server. It’s uploading it as a build artifact.

Think about that.

Your CI pipeline is now a data exfiltration channel.

And the attacker? They just need read access to your repository.

No outbound connections. No DNS lookups. No C2 domains.

Just a GitHub repo. And a build log.

The Self-Replicating Nightmare

Here’s where it gets scary.

IronWorm doesn’t just steal credentials. It uses them.

Once it grabs an npm Trusted Publishing secret? It publishes a new version of your package. A "fixed" version. A "security update."

And because you trust the publisher? You update.

Now your package is infected.

And your users? They download it. And the cycle continues.

This isn’t a worm. It’s a supply chain virus.

It’s not spreading through phishing emails. It’s spreading through npm install.

And it’s not just targeting end users. It’s targeting maintainers.

The initial infection vector? A compromised account named asteroiddao. That account had Trusted Publishing enabled. That’s how the malware got the keys to publish.

The attacker didn’t brute force. They didn’t phish. They waited.

They waited for someone to enable Trusted Publishing. And then they took it.

The Ghost Commits and the Fake Timestamps

Here’s the detail that still gives me chills.

The malware’s commits show an author named "claude"—like the AI. And the timestamps? They point to years ago.

Why?

Because the attacker knows: if your audit trail looks ancient, you’ll assume it’s old noise.

You’ll skip it.

You’ll say: "That’s from 2021. Not relevant."

But those commits were pushed last week.

This isn’t just malware. It’s psychological warfare.

It’s exploiting your fatigue.

Your belief that "if it’s old, it’s not a threat."

It’s not just code. It’s a lie.

Why This Is Worse Than Log4j

I know. I know. You’re thinking: "We survived Log4j. We can handle this."

But Log4j was a mistake. A vulnerability.

IronWorm isn’t a vulnerability.

It’s a workflow.

It’s not about a bad line of code. It’s about trusting the process.

You trust your CI pipeline.

You trust your npm registry.

You trust your maintainers.

IronWorm exploits all three.

And here’s the worst part: there’s no patch.

You can’t patch trust.

What You Need to Do—Right Now

I’m not going to give you a checklist. Because a checklist won’t save you.

You need to change how you think.

Here’s what actually works:

  1. Disable Trusted Publishing for all packages unless absolutely necessary. If you don’t need it, turn it off. Now.
  2. Audit your CI/CD artifacts. Who can download them? What’s in them? Are you storing secrets in build outputs? Stop.
  3. Require 2FA for every npm maintainer. Not just the owner. Every contributor.
  4. Use npm audit—and then verify the results. Automated tools miss this. You need eyes on the logs.
  5. Monitor for commits with "claude" as author. Seriously. That’s not a real person. That’s a red flag.
  6. Rotate all credentials exposed in CI/CD environments. Every single one. Even if you think they’re "safe."

And if you’re a maintainer?

Stop publishing packages with npm publish and no 2FA.

Stop.

Just stop.

The Bigger Picture

This isn’t about IronWorm.

It’s about what happens when we treat open source like a utility.

We use it. We trust it. We forget who built it.

IronWorm didn’t come from a nation-state. It came from someone who understood the system.

And they didn’t break it.

They used it.

If you think this is the last of its kind? You’re wrong.

The next one won’t use Rust.

It’ll use Go.

Or Python.

Or maybe it won’t even be code.

Maybe it’ll be a GitHub Action that "optimizes" your dependencies.

And you’ll install it.

Because you’re tired.

Because you’re busy.

Because you trust the process.

Don’t.

Not anymore.

IronWorm isn’t malware.

It’s a warning.

And we’re running out of time to listen.

IronWorm Isn’t Just Malware—It’s a Supply Chain Weapon

The Real Threat Isn’t the Code—It’s the Trust

Let me be blunt: if you’re still using npm without 2FA enabled for every maintainer, you’re not just risky—you’re negligent.

This isn’t a "maybe." It’s not a "should." It’s a "must."

And it’s not enough to just enable it. You need to enforce it.

GitHub Actions? Same thing. If you’re allowing unverified workflows to run on pull requests from forks? You’re handing the attacker a remote shell.

I’ve seen teams that still allow pull_request triggers to run npm install on untrusted code. That’s not a CI/CD pipeline. That’s a suicide pact.

And don’t get me started on preinstall scripts.

They’re a relic from 2015. No one checks them. No one audits them. And they run as root.

IronWorm didn’t invent them. But it weaponized them.

And here’s the truth no one wants to admit: we built this.

We built a system where speed matters more than security.

Where "it works on my machine" is the standard.

Where we install packages from GitHub because "it’s faster than waiting for npm."

We didn’t just open the door.

We handed the attacker the key.

And now we’re surprised when they walk in.

What JFrog Saw That No One Else Did

JFrog didn’t just analyze the code.

They analyzed the pattern.

They noticed the same commit names.

The same artifact naming.

The same timing.

And they connected it to other attacks.

Not because they had more data.

But because they were looking.

Most teams are still running npm audit and calling it a day.

JFrog? They were watching the logs.

They were checking commit authors.

They were digging into build artifacts.

And they found the ghost.

The one that didn’t leave a trace.

Because it didn’t need to.

It used your own tools to hide.

That’s the real lesson here.

It’s not about the malware.

It’s about the blind spots.

And we all have them.

The Future Is Already Here

The next attack won’t be in Rust.

It’ll be in a GitHub Action.

Or a Dockerfile.

Or a Terraform module.

Or a Helm chart.

It’ll be something you need.

Something that makes your life easier.

And you’ll install it.

Because you’re tired.

Because you’re behind.

Because you think it’s safe.

It won’t be.

And when it happens?

Don’t say you weren’t warned.

I’m not saying stop using open source.

I’m saying: stop trusting it.

Verify.

Audit.

Question.

Every. Single. Package.

Because the next IronWorm? It’s already in your pipeline.

You just haven’t looked yet.

The Real Threat Isn’t the Code—It’s the Trust

More blogs