Npm lockdown: bereid je Node.js‑pijplijnen voor op GitHub’s nieuwe 2FA‑ en tokenregels

GitHub trekt de teugels aan rond npm: strengere 2FA‑eisen, fijnmazige tokens en bewezen herkomst van releases. Voor teams die nog publiceren met persoonlijke tokens of zonder enforced 2FA, liggen vastlopende releases en supply‑chainrisico’s in het verschiet. Het goede nieuws: met een gerichte migratie zet je je Node.js‑keten snel op orde.

Wat verandert er en waarom het telt

Accountovernames en malafide packages blijven een reëel risico. Daarom verschuift vertrouwen van “wie publiceert” naar “hoe is dit artefact tot stand gekomen”. Concreet: maintainers hebben 2FA nodig, publiceren gaat via CI met fijn afgebakende rechten, en releases kunnen voorzien worden van provenance (Sigstore) zodat herkomst cryptografisch is te verifiëren.

Van beleid naar praktijk: zo migreer je

Begin bij identiteit. Dwing 2FA af op je GitHub‑organisatie én je npm‑organisatie. Geef maintainers voorkeur voor hardware security keys en bewaar herstelcodes in een wachtwoordkluis. Voor automatisering gebruik je CI‑identiteiten; vermijd gedeelde persoonlijke tokens.

Publiceren hoort in de pipeline. Gebruik fine‑grained tokens met minimale scopes (bijvoorbeeld write:packages op één repository) of, liever nog, OpenID Connect (OIDC) vanuit GitHub Actions zodat je kortlevende, contextgebonden tokens krijgt. Zo verdwijnen langlevende secrets van runners en wordt misbruiklastig.

Beheer secrets alsof het sleutels zijn: centraliseer (GitHub Encrypted Secrets of een key vault), roteer periodiek en bij rolswijzigingen, en log wie wat gebruikt. Combineer dit met environment protection rules en verplichte reviewers voor release‑jobs.

Schakel npm provenance in om releases te tekenen met Sigstore. Gebruik Node 18+ en npm 9+, activeer id‑token in je workflow en publiceer met npm publish --provenance. Zet je organisatie als Verified Publisher en valideer downstream of het artefact provenance bevat voordat je het promoot naar productie.

Bouwveiligheid hoort in de gate. Laat SCA (Dependabot, npm audit, Snyk) vroeg in de pipeline draaien en faal bij kritieke CVE’s. Installeer met npm ci op basis van een vergrendelde package-lock.json en overweeg --ignore-scripts in CI om postinstall‑risico’s te beperken.

Denk ten slotte aan private registries (GitHub Packages, Artifactory, Nexus, Verdaccio). Scheid lees‑ en schrijfrechten, mirror upstreams met een allowlist van scopes, pin op vertrouwde namespaces en splits test‑ en productie‑registries. Dit verkleint blast radius en vereenvoudigt incidentrespons.

Snelle migratiechecklist

  • Handhaaf 2FA voor alle maintainers in GitHub en npm.
  • Publiceer alleen via CI met fine‑scoped tokens of OIDC.
  • Roteer en bewaak secrets; minimaliseer scopes en levensduur.
  • Activeer npm publish --provenance en controleer Sigstore‑verificatie.
  • Gate builds met SCA en npm audit; gebruik npm ci.
  • Hardeer private registries: rechten, mirroring, namespaces en segmentatie.

Praktische take‑away: verplaats publish naar CI met OIDC, dwing 2FA af en maak provenance verplicht. Met een proof‑of‑concept per repository en een geplande tokenrotatie ben je in één tot twee sprints klaar voor de nieuwe npm‑realiteit.