security supply-chain npm vibe-coding dependencies

Axios Just Got Hacked on NPM — Here's Why Vibe Coders Should Be Terrified

This morning, the internet woke up to a nightmare: Axios — the HTTP client library used by virtually every JavaScript project on the planet — was compromised on npm. An attacker hijacked a maintainer’s credentials and published malicious versions that installed a cross-platform remote access trojan on every system that pulled the update.

100 million weekly downloads. A RAT dropper that targets macOS, Windows, and Linux. Live on npm for two to three hours before anyone caught it.

If you vibe-coded your app, this should scare the hell out of you.

What Happened

An attacker compromised the npm credentials of Axios’s primary maintainer. They bypassed the project’s CI/CD pipeline entirely — no GitHub Actions needed — and published two poisoned versions directly to the npm registry:

  • axios@1.14.1
  • axios@0.30.4

Both versions injected a fake dependency called plain-crypto-js that ran a postinstall script. That script contacted a command-and-control server and downloaded platform-specific malware capable of:

  • Remote shell execution — full command-line access to your machine
  • Binary injection — dropping additional malware
  • Directory browsing and file access — reading your source code, .env files, credentials
  • Process listing and system reconnaissance — mapping your entire environment

Within three hours, 3% of environments that pulled the update had confirmed execution. Npm yanked the versions, and the safe axios@1.14.0 is now the latest tag.

Why Vibe Coders Are Uniquely Exposed

Here’s the thing about vibe coding: AI tools install dependencies for you. Cursor, Bolt, Copilot — they all npm install packages without thinking twice. And neither do you.

When you tell ChatGPT “build me an API that fetches data from this endpoint,” it’s going to use Axios. Or Fetch. Or Got. Or whatever it feels like. And it’s going to install the latest version. No lockfile auditing. No version pinning. No npm audit in your CI pipeline — because you probably don’t have a CI pipeline.

This creates a perfect storm:

1. You Don’t Know Your Dependency Tree

Run npm ls --all in your project right now. How many packages are in there? 200? 500? 1,000? Can you name even 10% of them? Your AI tool installed most of them, and you have no idea what they do or who maintains them.

2. You Don’t Have a Lockfile Strategy

A package-lock.json protects you from surprise version bumps — but only if you commit it, use npm ci in production, and don’t casually delete it when something breaks (which AI tools love to suggest). If you’re running npm install in production, you were pulling whatever was latest at deploy time. Including the poisoned version.

3. You Have No Security Scanning

Professional teams run npm audit, Snyk, Socket, or Dependabot to catch known vulnerabilities and suspicious packages. Vibe-coded projects have none of this. Zero automated scanning. Zero alerts. You find out about compromises from Hacker News — hours or days after the damage is done.

4. Your Secrets Are Accessible

Remember that .env file with your Stripe keys, database passwords, and API tokens? The RAT can read it. And if you hardcoded secrets directly in your source (which, let’s be honest, AI probably did), those are exposed too. The attacker doesn’t just get access to your machine — they get access to your entire infrastructure.

What You Need to Do Right Now

If you have any JavaScript project — vibe-coded or otherwise — do this today:

Check your lockfile:

grep "axios" package-lock.json

If you see version 1.14.1 or 0.30.4, assume you’re compromised. Rotate every credential accessible on that machine. Rebuild from a known-good state.

Pin your dependency:

npm install axios@1.14.0

Run an audit:

npm audit

Add npm audit to your build process. If you don’t have a build process, that’s its own problem.

The Bigger Picture

This isn’t an Axios problem. This is an ecosystem problem. npm’s security model trusts maintainers, and maintainers are human. They reuse passwords. They get phished. They lose access to MFA devices.

When you vibe-code an app, you’re inheriting the entire trust chain of every dependency your AI tool decided to install. You’re trusting thousands of individual humans you’ve never met to keep their credentials safe. And as of this morning, we have fresh proof that they can’t always do that.

The fix isn’t to stop using dependencies — that’s impractical. The fix is to know what you’re shipping. Audit your dependency tree. Pin versions. Use lockfiles correctly. Run security scans. And for the love of everything, stop deploying npm install in production.

Your AI tool built your app fast. It didn’t build it safe.

Think your vibe-coded app might have hidden dependency risks? Drop your URL for a free surface scan — we’ll show you what’s lurking under the hood.