Learn

How malicious packages get in, and how to refuse them at install.

Plain answers on package firewalls, npm hardening, typosquatting and slopsquatting, honest comparisons, and teardowns of real 2026 attacks.

Questions and answers

What is a package firewall, and do I need one?

A package firewall is a registry proxy between your package managers and the public registries, which refuses a malicious, typosquatted or policy-violating package before the package installs. A team needs one when developers, CI jobs or coding agents install open-source packages straight from npm, PyPI, Maven, Go, Cargo or Docker registries. The reason is timing: an install script runs the moment a package lands, before any vulnerability scanner reads the code. The March 2026 axios compromise was a maintainer-account takeover with an install-time dropper, so the damage happened at install. A scanner reports on packages already installed, while a package firewall decides on the install request itself. Chainsaw, the package firewall from Chain305, covers 16 ecosystems and checks up to 25 supply-chain signals per package. What is a package firewall? explains how a package firewall works, what one catches and what one misses, with our measured block and false-block rates.

How do I stop malicious packages today?

You stop malicious packages today by hardening the package-manager settings you already have, then adding a package firewall for what the settings miss. On npm, ignore-scripts stops install scripts from running and min-release-age holds brand-new versions. On Python, pip, uv and Poetry can require wheels, hashes and a release-age cutoff. No setting judges what a package does, which is the gap a firewall covers. The guides below give the exact settings per ecosystem:

  • How to block malicious npm packages: ignore-scripts, min-release-age, npm ci, scoped registries and signature checks, and where a firewall fits on top.
  • Typosquatting: how lookalike package names work, two real cases, and how detection catches them.
  • Slopsquatting: package names that AI coding tools invent and attackers then register.
  • How to block malicious PyPI packages: pip, uv and Poetry settings: wheels only, hashes, release-age cutoffs and index order.
  • Dependency confusion: how a public package takes the place of a private one, and the fixes per ecosystem.
  • Maven, Go and Cargo settings: mirrors and checksums, the Go checksum database, Cargo.lock and source replacement.
  • Install script attacks: where npm, PyPI, Cargo and Composer run code at install time, the 2026 attacks that used each hook, and what the settings miss.
  • Maintainer account takeover: how hijacked accounts, stolen tokens and trusted publishing shipped malicious releases in 2026, and the signals and holds that buy time against them.

Can I run it inside my own network?

Yes. Chainsaw runs inside your own network as a paid self-hosted deployment: in your VPC, on-premises or fully air-gapped, from the same binary as the SaaS version. In air-gapped mode, CHAINSAW_OFFLINE=1 makes no outbound connections, and threat data arrives as an intelligence bundle whose digest is verified at start. Policy bundles are verified with Sigstore when they load. Audit rows, exceptions and policy versions live in your own Postgres, so install decisions never leave your boundary. Self-hosted and air-gapped deployment is part of the Enterprise plan, which starts at $36,000 a year and is the same software as the hosted plans. The free Chainsaw CLI also runs locally with no account and refuses known-malicious packages and typosquats offline. Self-hosted package firewall covers running Chainsaw in your VPC, on-premises or fully air-gapped.

How does Chainsaw compare with other tools?

What did real attacks look like?

Real package attacks in 2026 were mostly hijacked maintainer accounts, stolen publish tokens and lookalike names, and the malicious code ran at install, import or build time. The pattern is the same across npm, PyPI, crates.io and Composer: an attacker gains publish rights or registers a near-copy of a real name, ships a version with a dropper or credential stealer, and waits for installs. We analyzed 17 of those attacks in depth. Each teardown covers how the malicious package got in and whether Chainsaw would have stopped the package.

For the whole year at once, 58 attacks from 2026 tested against Chainsaw gives the outcome for each one, including the 16 it does not stop.

New teardowns go out by email. Subscribe on the teardowns page.

See it on your own dependencies

Find out what Chainsaw would refuse this week

Start a free org in monitor mode. Nothing is blocked until you switch a rule to enforce.