During DEF CON conference, one of the presentation talked about security in JavaScript package managers.

The researcher explained they focuses on 2 things: integrity and scripts.

Integrity means how easily the packages can be tampered with.

Scripts means that during installation, the package manager has a feature to run JS / shell script on pre-install and/or post-install. One of the use case: displaying a sponsorship link after package installation.

Originally, the researcher found that only Yarn has a good integrity check and while the checking for scripts, the researcher found that none of the package managers are immune to the Supply Chain Attacks.

PackageGate slide: Scoreboard

Scoreboard

Package ManagerIntegrityScripts
vltPWNED!PWNED!
BunPWNED!PWNED!
pnpmPWNED!PWNED!
Yarn馃憣PWNED!
npmPWNED!PWNED!

After the researcher reported all of the issues, only vlt, bun, and pnpm patches all of the issues.

PackageGate slide: Disclosure Status

Disclosure Status

Package ManagerIntegrityScriptsReferences
vltPATCHEDPATCHEDPatched 路 ~8 days
pnpmPATCHEDPATCHEDPatched 路 ~2 weeks
CVE-2025-69263 路 CVE-2025-69264
BunPATCHEDPATCHEDPatched 路 ~3 months
Bun 1.3.5 路 Bun 1.3.10
Yarn馃憣VULNERABLEScripts: Architectural 路 won鈥檛 fix
npmPWNED!VULNERABLEScripts: Out of scope 路 H1 #3442684

What Can We Do?

  • Migrate from NPM and Yarn to vlt, bun, or pnpm
  • commit the lockfiles. Lock files pin the exact version and integrity hash of every dependency including transitive ones

Recommendation

Between vlt, pnpm and bun, I recommend to use pnpm, it鈥檚 more mature (first released in 2016) and easy to migrate npm or yarn. vlt is still new and it is too early to adopt for production. Bun is fast but introduces runtime risk if you rely on full Node.js compatibility.

# Install pnpm
npm install -g pnpm

# In root project folder
pnpm import   # converts yarn.lock / package-lock.json to pnpm-lock.yaml
pnpm install