Skip to main content

Command Palette

Search for a command to run...

AI Found 29,000 Bugs in Open Source. Here's What Your MERN Stack Should Do About It

Updated
•7 min read•View as Markdown
AI Found 29,000 Bugs in Open Source. Here's What Your MERN Stack Should Do About It
N
Love to code, gaming. And I use vim btw.

I'll be honest — when I first saw the headline "Anthropic's AI scanner found 29,000 possible vulnerabilities in open source," my first reaction was somewhere between impressed and mildly terrified. Then I remembered how many node_modules I have on my laptop and landed fully on terrified.

Here's what actually happened, why it matters to you as a MERN developer, and — more importantly — what you can actually do about it today.


What Anthropic's Scanner Actually Did

In early October 2026, Anthropic quietly launched an opt-in vulnerability-finding service for open-source projects. The idea is simple enough: Claude — Anthropic's flagship model — scans source repositories on a recurring basis, and when it finds something that looks like a security flaw, it emails the project maintainers a report.

No human reviews these reports before they go out. That's intentional — the scale wouldn't work otherwise.

What makes it genuinely useful (and not just noise) is the quality of the reports. Each one can include a reproducer — a test case that actually triggers the bug. Some reports even point to the specific commit that introduced the vulnerability and include a proposed patch. That's more than most human bug reporters bother to do.

Out of 97 reports reviewed by security experts across 48 projects — all initially rated high or critical severity — 85 qualified for disclosure. Only 1 was outright invalid. Those are pretty solid numbers for an automated scanner running at this scale.

The bigger picture: Anthropic scanned broadly and identified over 29,000 candidate vulnerabilities across open-source projects. Of those, about 6,000 were manually reviewed. And of everything reported to maintainers so far? Only around 516 have actually been fixed.

That gap is the story. Let's talk about it.


Why MERN Developers Should Care More Than Most

You might be thinking: "Cool story, but these are C libraries or some ancient Perl code. My Express app is fine."

It's not that simple. The average Node.js project has somewhere north of 300 transitive dependencies. That means every npm install you run is quietly pulling in code from hundreds of people you've never heard of. Express middleware, JWT libraries, Mongoose plugins, validation utils, image processing packages — it's turtles all the way down.

Here's a quick reality check on what your stack actually looks like:

# See how deep your dependency tree goes
npm ls --depth=3 | wc -l

# Quick view of known vulnerabilities right now
npm audit

# Get a count without the noise
npm audit --json | node -e "
  const data = JSON.parse(require('fs').readFileSync('/dev/stdin','utf8'));
  const vulns = data.vulnerabilities;
  const counts = Object.values(vulns).reduce((acc, v) => {
    acc[v.severity] = (acc[v.severity] || 0) + 1;
    return acc;
  }, {});
  console.log(counts);
"

The point isn't to panic you. The point is that your app's actual attack surface extends well beyond the code you wrote. And with 29,000 potential vulnerabilities now being surfaced by AI — many in packages that maintainers won't get around to patching for months — you need a plan.


The Signal vs. Noise Problem (This is the Real Issue)

Here's the uncomfortable truth that this whole situation exposed: we don't have a fixing problem as much as we have a triage and capacity problem.

Only 516 of 29,000+ reported issues have been fixed. That's not because the bugs aren't real. It's because most open-source maintainers are doing this in their spare time, between their actual jobs, and an AI suddenly dumping a stack of "high severity" bug reports in your inbox is... a lot.

This creates a weird situation for everyone depending on those packages. The vulnerabilities are being surfaced faster than they can be fixed. Which means:

  • More known unknowns: There are CVEs being drafted for bugs that maintainers haven't even triaged yet.

  • Severity inflation anxiety: When everything is "high" or "critical," nothing is — maintainers start tuning out labels entirely.

  • Window of exposure: The time between "bug is found by AI and reported" to "fix is shipped and you've updated your lockfile" can be weeks or months.

For your MERN app, this translates to a period where you know something might be vulnerable in your dependency tree but can't do much about it yet except monitor and reduce blast radius.


What You Should Actually Do Right Now

This isn't a "rewrite everything in Rust" post. Here are practical things you can do in your existing Node/Express setup:

1. Lock your dependency versions and actually commit the lockfile

# Make sure package-lock.json is committed and not gitignored
git check-ignore -v package-lock.json

# Use exact versions in package.json instead of ranges
npm config set save-exact true

2. Set up automated dependency audits in CI

# .github/workflows/security.yml
name: Dependency Audit
on:
  schedule:
    - cron: '0 8 * * 1'  # every Monday morning
  push:
    paths:
      - 'package-lock.json'

jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '22'
      - run: npm ci
      - run: npm audit --audit-level=high

3. Consider a tool like Socket.dev or Snyk

npm audit only checks against the known CVE database. Services like socket.dev actually analyze package behavior — looking for things like new network calls in packages that never made them before. That's closer to what you actually want.

4. Reduce your dependency footprint

The fewer packages you depend on, the fewer potential vulnerabilities you expose. Before adding a new package, ask yourself: can I write this 15-line utility myself? Sometimes the answer is yes.

# Visualize what's actually taking up space in your node_modules
npx cost-of-modules --no-install

The Bigger Picture: AI Security Is the New Normal

What Anthropic did here isn't just a one-time scan. They've built a recurring service. Which means as their models get better at finding bugs, the rate of discovery will outpace human review even further.

This is genuinely good for the long-term health of open source. AI finding real bugs before attackers do is exactly what we want. But in the short term, it creates a messy middle period where known vulnerabilities pile up faster than they get fixed.

As a MERN developer, the best posture is: don't wait to be told something in your stack is broken. Audit regularly, lock your deps, monitor your transitive graph, and when a CVE drops for something you're using, patch fast.

The bugs are being found. Make sure you're the one fixing them in your app — before someone else finds a different use for them.


Wrap Up

Anthropic's scanner is a genuinely impressive piece of technology doing something useful for the broader ecosystem. The 29,000-bug haul isn't a scare tactic — it's a wake-up call about how much technical debt quietly lives in the open-source software all of us depend on.

Get npm audit into your CI pipeline. Lock your versions. Keep an eye on your dependency graph. And if you maintain an open-source package yourself, consider enrolling in Anthropic's program — the extra eyes can only help.

What's your current setup for catching vulnerable dependencies? Drop it in the comments, I'm always curious what people are actually using in production.

R

Good rundown. One thing I'd add: when the vulnerable package is three levels deep and the direct dependency hasn't shipped a patch yet, npm overrides (or pnpm overrides) lets you force the fixed transitive version without waiting on upstream. Saved me more than once. And enforcing npm ci instead of npm install in CI/deploy so the lockfile you audited is the one that actually ships — that one bites people quietly. For the transitive cases with no patch yet, do you pin-and-wait or swap the package out?