On April 22, 2026, the npm ecosystem had one of its worst days of the year — and it was not because of a single zero-day. Two separate but related incidents unfolded within hours of each other: a self-propagating worm was found in Namastex Labs npm packages under the campaign name CanisterWorm, and the widely-used @bitwarden/cli package was backdoored for 93 minutes via a compromised GitHub Actions pipeline. Both attacks are attributed to the same threat actor: TeamPCP.
These are not isolated incidents. They are the latest chapters in an 18-month escalation of self-propagating npm worms — malware that steals your npm publish token and uses it to infect every package you can publish. This guide covers the full technical breakdown, the campaign history, and the concrete defenses every Node.js team must implement today. Every statistic is verified from primary sources.
What Is a Self-Propagating npm Worm?
A self-propagating npm worm is a category of supply chain malware with a specific behavior that makes it categorically more dangerous than a standard backdoored package:
- Install-time execution: The malicious payload runs automatically on
npm installvia apreinstallorpostinstallhook — requiring zero user interaction. - Credential theft: It scans the developer's environment for npm authentication tokens, typically stored in
~/.npmrc, environment variables, or CI/CD secrets. - Package enumeration: Using the stolen token, it calls the npm registry API to list every package that token can publish.
- Self-injection: For each package, it downloads the tarball, bumps the patch version, injects its own malicious postinstall hook, and republishes it to npm.
- Cross-ecosystem propagation: If PyPI credentials are found, the worm generates a Python
.pth-based payload and uploads malicious Python packages usingtwine.
⚠️ Why this is different: A classic backdoored package infects everyone who installs it. A self-propagating worm turns every compromised developer into a new propagation vector. One infected machine can backdoor dozens of packages across multiple ecosystems within minutes.
Source: Socket.dev, "Namastex.ai npm Packages Hit with TeamPCP-Style CanisterWorm Malware", April 2026
The Shai-Hulud Lineage: 18 Months of Escalation
To understand CanisterWorm, you need to understand where it came from. This family of self-propagating npm malware has a documented history that Socket, Sysdig, Unit 42, and SecurityWeek have traced since September 2024:
September 2024 — Shai-Hulud v1 (First Wave)
ReversingLabs researchers detected the first-of-its-kind self-replicating worm on the npm registry on September 15, 2024. Named "Shai-Hulud" after the sandworms of Dune, it spread via cascading compromise of npm accounts, inserting malicious worm code into legitimate public and private npm packages belonging to compromised developers. More than 180 packages were infected in this first wave. (Source: SecurityWeek, Sysdig)
November 2024 — Shai-Hulud 2.0 (Second Wave)
A second, more sophisticated wave followed in November 2024. Shai-Hulud 2.0 successfully backdoored 796 unique npm packages, with 640 infected in a single wave. The worm added encrypted C2 communication via a dead-drop mechanism. Datadog Security Labs published a full technical breakdown of the new variant. (Source: SecurityWeek, Datadog Security Labs)
February 2026 — SANDWORM_MODE Campaign
The threat actor relaunched with a new campaign named SANDWORM_MODE, targeting AI developer tools. 19 packages explicitly named Claude Code, Cursor, and Windsurf as targets — a deliberate attempt to compromise developer machines through their AI coding assistants. (Source: Socket.dev, SecurityWeek)
March 20–23, 2026 — CanisterWorm (First Wave)
The campaign rebranded as CanisterWorm, named for its use of Internet Computer Protocol (ICP) canister infrastructure as a dead-drop for delivering follow-on binaries — making the C2 channel resistant to domain seizure. Between March 20–23, 141 packages were infected in 3 days, across at least 64 unique packages and 140+ package artifacts. (Source: Socket.dev, SC World)
April 8–22, 2026 — CanisterSprawl / Namastex Wave
The latest wave, now tracked by Socket as "CanisterSprawl," hit Namastex Labs — an agentic AI company. Two packages (@automagik/genie and @pgserve) were compromised, with 22 total packages affected since April 8. The ICP canister used was different from earlier CanisterWorm attacks, but Socket assessed it as likely part of the same campaign based on code lineage and tradecraft. (Source: Socket.dev)
April 22, 2026: Bitwarden CLI Backdoored for 93 Minutes
The same day as the Namastex disclosure, Bitwarden's security team identified and contained a malicious version of @bitwarden/cli. Version 2026.4.0 was published to npm at 5:57 PM ET and pulled at 7:30 PM ET — a window of exactly 93 minutes.
How Attackers Bypassed Bitwarden's Trusted Publishing
This was not a compromised developer account. Attackers infected the CI/CD pipeline itself. They modified publish-ci.yml in the github.com/bitwarden/clients repository, injecting malicious code into the GitHub Actions workflow that handles npm publishing. Because the attack originated inside Bitwarden's own trusted CI/CD infrastructure, standard npm token controls offered no protection. (Source: Endor Labs, Unit 42 Palo Alto Networks)
The Payload: Shai-Hulud, Third Coming
The malware explicitly identified itself in its code as "Shai-Hulud: The Third Coming" — a deliberate callback to the earlier Shai-Hulud campaigns, attributed to TeamPCP by multiple research teams. The payload was sophisticated and multi-stage:
- A malicious
preinstallhook inbw_setup.jsactivated automatically onnpm install - It checked for the Bun runtime, downloading and installing it silently if absent
- A multi-cloud credential harvester targeted six distinct secret surfaces: GitHub tokens, npm publish tokens, AWS credentials, GCP service accounts, SSH private keys, and MCP/AI agent configuration files
- Data was exfiltrated to the domain
audit.checkmarx[.]cx(a lookalike of the legitimate Checkmarx brand) with a GitHub commit as encrypted fallback - A self-propagation module found all packages publishable by the stolen npm token, bumped the patch version, injected the worm payload, and republished them
- Shell RC persistence was established (
~/.bashrc,~/.zshrc) to survive package removal
⚠️ If you installed @bitwarden/cli@2026.4.0: Treat the event as a confirmed credential exposure. Immediately rotate: GitHub tokens, npm publish tokens, AWS/GCP credentials, SSH keys, and any API keys present in environment variables at install time. The malware also targeted MCP configurations used by AI coding tools (Cursor, Claude Code).
Source: Bitwarden Community Security Statement, April 2026
TeamPCP: The Threat Actor Behind the Campaigns
All three waves — CanisterWorm, Bitwarden CLI, and the earlier Shai-Hulud attacks — have been attributed to TeamPCP, a financially motivated hacking group active since at least 2024. The group is also tracked under the aliases DeadCatx3, PCPcat, and ShellForce. (Source: JFrog Security Research, OX Security)
TeamPCP's prior high-profile targets include:
- March 2026: Trivy (security scanner) — 82 tags force-pushed on GitHub Actions, 10,000+ CI/CD pipelines exposed
- March 2026: LiteLLM on PyPI — 95M downloads/month, credential theft within 40 minutes of infection
- March 2026: Checkmarx CLI on PyPI — compromised via the same GitHub Actions pipeline vector
The group demonstrates a consistent modus operandi: target high-trust packages used by developers and security tools, compromise via CI/CD rather than direct account takeover, and use self-propagation to maximize ecosystem spread without requiring additional infrastructure per victim. The use of AI agent tooling as a target vector (MCP configs, Cursor, Claude Code) suggests a deliberate strategy to harvest credentials from developer machines with broad cloud access.
Scale: Key Statistics
How the Self-Propagation Works — Technical Deep-Dive
The self-propagation logic documented in CanisterWorm and the Bitwarden CLI payload follows a consistent pattern across all variants. Here is the step-by-step mechanism, based on Socket.dev's and Endor Labs' technical analyses:
# Simplified pseudocode of the self-propagation logic
# (as documented by Socket.dev and Endor Labs — not original malware code)
1. Read ~/.npmrc or process.env.NPM_TOKEN → steal publish token
2. Call npm registry: GET /-/whoami → get authenticated username
3. Call npm registry: GET /-/v1/search?text=maintainer:[username] → list publishable packages
4. For each package:
a. Download current tarball: npm pack [package-name]
b. Extract tarball, inject malicious postinstall hook into package.json
c. Bump patch version (1.2.3 → 1.2.4)
d. Re-pack tarball, publish: npm publish --tag latest
5. If ~/.pypirc or TWINE_PASSWORD found:
→ Generate Python .pth payload, upload via twine to PyPI
The result: a single compromised developer machine can infect every npm package they maintain within minutes, expanding the attack surface by orders of magnitude without requiring the attacker to compromise additional accounts. This is why Socket.dev describes it as "turning one compromised developer environment into additional package compromises."
The ICP Canister Dead-Drop
What distinguishes CanisterWorm from earlier Shai-Hulud variants is its command-and-control infrastructure. Instead of a traditional HTTP server or domain, the malware uses an Internet Computer Protocol (ICP) canister as a dead-drop to deliver follow-on binaries. Because ICP canisters are hosted on a decentralized blockchain network, they cannot be taken down via traditional domain seizure or law enforcement requests — making the infrastructure highly resilient. (Source: Socket.dev, SC World)
Concrete Defenses for Node.js Teams
1. Audit your npm token scope — immediately
The self-propagating mechanism depends entirely on having a publish token. Granular publish access tokens (available in npm settings) restrict a token to specific packages. A token that can only publish my-widget cannot be used to spread malware to your other 30 packages. For CI/CD, use npm's OIDC-based provenance attestation instead of long-lived tokens — this prevents token theft from being exploitable for publishing. (Source: npm Documentation)
# Create a granular access token scoped to a specific package
npm token create --scope=@your-org/specific-package --type=publish
# List and audit all active tokens
npm token list
# Revoke a compromised token immediately
npm token revoke [token-id]
2. Enable npm package provenance
npm provenance links a published package to its specific source commit and CI/CD run, creating a cryptographically verifiable chain. When enabled, the npm registry shows a "Provenance" badge on the package page and any publish attempt outside the attested workflow fails. The Bitwarden CLI attack succeeded despite Bitwarden using GitHub Actions — if mandatory provenance had been enforced on the consumer side, organizations could have detected the unsigned publish before installation.
# In your GitHub Actions publishing workflow:
- name: Publish to npm with provenance
run: npm publish --provenance --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
3. Monitor postinstall hook execution in CI
The entire self-propagating mechanism relies on postinstall hooks. You can disable them for installs in CI environments where you trust your lockfile:
# Install without running lifecycle scripts (postinstall, preinstall)
npm ci --ignore-scripts
# For production Docker builds
npm ci --omit=dev --ignore-scripts
Caveat: Some packages require postinstall scripts for native bindings compilation. Audit your package.json to identify which packages use install hooks before disabling globally.
4. Use Socket.dev or similar dependency security tooling
Socket.dev detected the CanisterWorm Namastex packages within hours of publication by analyzing package behavior at install time, not just comparing against a known-CVE database. Traditional npm audit only catches CVEs that have been formally assigned and indexed — it would not catch a freshly published malicious package. Socket's behavioral analysis flagged the suspicious postinstall hook before the campaign was publicly attributed.
5. Treat CI/CD credentials with the same rigor as production secrets
The Bitwarden CLI attack did not compromise a developer's personal machine — it compromised the GitHub Actions workflow. This means secrets stored in GitHub Actions environment variables (NPM_TOKEN, AWS_ACCESS_KEY_ID, cloud credentials) were accessible to the injected payload. Recommendations:
- Use OIDC-based short-lived credentials for cloud providers (AWS, GCP) from GitHub Actions — tokens expire after each workflow run
- Enable required reviewers for environment deployments so the publish step cannot run without human approval
- Audit GitHub Actions workflow files for unexpected changes — especially
publish*.ymlfiles — as part of your standard code review process - Monitor outbound connections from CI runners — CanisterWorm's exfiltration to
audit.checkmarx[.]cxwould have been caught by network egress monitoring
6. Rotate credentials immediately after any suspicious install
If you installed any package later found to be part of the CanisterWorm or Bitwarden CLI campaigns, the remediation steps are:
- Revoke all npm publish tokens and reissue with minimal scope
- Rotate GitHub personal access tokens and GitHub Actions secrets
- Rotate AWS/GCP credentials present in environment variables
- Rotate SSH keys (check
~/.ssh/for any new authorized keys) - Check shell configuration files (
~/.bashrc,~/.zshrc) for persistence mechanisms - Audit all packages you can publish for unexpected version bumps in the past 7 days
Frequently Asked Questions
How do I know if I installed a compromised package?
For the Bitwarden CLI attack specifically: check if you installed @bitwarden/cli@2026.4.0 between 5:57 PM and 7:30 PM ET on April 22, 2026. Run npm ls @bitwarden/cli in your projects. For CanisterWorm, check if any of the Namastex packages (@automagik/genie, @pgserve) appear in your lockfiles. Socket.dev maintains an up-to-date list of affected packages.
Does npm audit detect CanisterWorm or the Bitwarden CLI attack?
No. npm audit only flags packages that have a CVE in the npm advisory database. Freshly published malicious packages — even if they contain a self-propagating worm — will not appear in npm audit until a formal advisory is issued. Behavioral security tools like Socket.dev or Aikido Security detected the anomalous behavior at install time without waiting for a CVE assignment.
Why did Bitwarden's trusted publishing fail to prevent the attack?
Because the attacker compromised the GitHub Actions workflow file itself (publish-ci.yml), not an individual developer's npm token. The publish came from Bitwarden's own legitimate CI/CD infrastructure, so npm's provenance system saw it as coming from an authorized source. This is why mandatory multi-party approval for publish workflows — where a second human must approve the workflow change before it can run — would have added a critical detection layer.
Is CanisterWorm the same as Shai-Hulud?
They are from the same threat actor family (TeamPCP) but technically distinct variants. The ICP canister dead-drop infrastructure is new to the CanisterWorm variant; earlier Shai-Hulud campaigns used different C2 mechanisms. Socket.dev tracks the Namastex wave specifically as "CanisterSprawl" — the ICP canister used was not the same as in the original CanisterWorm March 2026 wave, but the code lineage, tradecraft, and targeting patterns are consistent with the same campaign.
Can the worm really spread to PyPI from an npm infection?
Yes, if the compromised developer has PyPI credentials in their environment. The CanisterWorm payload contains logic to check for ~/.pypirc or TWINE_PASSWORD environment variables, generate a Python .pth-based persistent payload (which executes every time Python starts), and upload malicious packages to PyPI using twine. This cross-ecosystem propagation is documented by Socket.dev and JFrog Security Research as a confirmed capability of the current CanisterWorm variant.
How can I protect my npm publish tokens from being stolen?
The most effective approach is eliminating long-lived publish tokens entirely. Use npm's OIDC-based trusted publishing (available via GitHub Actions with provenance attestation) to generate short-lived, single-use publish credentials. For tokens you must use, apply granular scoping (restrict to specific packages), store them only in GitHub Actions secrets (not in .npmrc files committed to repos), and enable mandatory provenance attestation so publishing outside the attested workflow fails automatically.
Protect Your npm Dependencies Before the Next Wave
TeamPCP is actively escalating. CVE OptiBot monitors your lockfiles daily, scans against OSV.dev's database, and alerts you the moment a dependency is flagged — before npm audit even knows about it. Works with package-lock.json, yarn.lock, pnpm-lock.yaml, and cross-ecosystem (pip, composer, cargo).
Start free monitoringLe 22 avril 2026, l'écosystème npm a vécu l'une de ses pires journées de l'année — non pas à cause d'un unique zero-day, mais de deux incidents liés qui se sont déroulés à quelques heures d'intervalle. Un ver auto-propagant a été découvert dans les packages npm de Namastex Labs sous le nom de campagne CanisterWorm, et le package @bitwarden/cli a été backdooré pendant 93 minutes via un pipeline GitHub Actions compromis. Les deux attaques sont attribuées au même acteur malveillant : TeamPCP.
Ces incidents ne sont pas isolés. Ils représentent les derniers chapitres d'une escalade de 18 mois de vers npm auto-propagants — des malwares qui voléent votre token de publication npm et l'utilisent pour infecter chaque package que vous pouvez publier. Ce guide couvre l'analyse technique complète, l'historique de la campagne, et les défenses concrètes que toute équipe Node.js doit implémenter. Chaque statistique est vérifiée depuis des sources primaires.
Qu'est-ce qu'un ver npm auto-propagant ?
Un ver npm auto-propagant est une catégorie de malware supply chain avec un comportement spécifique qui le rend fondamentalement plus dangereux qu'un package backdooré classique :
- Exécution à l'installation : La payload malveillante s'exécute automatiquement lors de
npm installvia un hookpreinstalloupostinstall— sans aucune interaction utilisateur. - Vol de credentials : Il scanne l'environnement du développeur à la recherche de tokens npm, typiquement dans
~/.npmrc, les variables d'environnement ou les secrets CI/CD. - Enumération des packages : Avec le token volé, il interroge l'API du registre npm pour lister tous les packages que ce token peut publier.
- Auto-injection : Pour chaque package, il télécharge le tarball, incrémente la version patch, injecte son propre hook postinstall malveillant et republie sur npm.
- Propagation cross-écosystème : Si des credentials PyPI sont trouvés, le ver génère une payload Python via
.pthet uploade des packages malveillants sur PyPI.
⚠️ Ce qui rend cela différent : Un package backdooré classique infecte tous ceux qui l'installent. Un ver auto-propagant transforme chaque machine compromise en nouveau vecteur de propagation. Une seule machine infectée peut backdooréer des dizaines de packages en quelques minutes.
Source : Socket.dev, "Namastex.ai npm Packages Hit with TeamPCP-Style CanisterWorm Malware", avril 2026
La lignée Shai-Hulud : 18 mois d'escalade
Pour comprendre CanisterWorm, il faut retracer son historique. Cette famille de malwares npm auto-propagants a une histoire documentée que Socket, Sysdig, Unit 42 et SecurityWeek ont retracie depuis septembre 2024 :
Septembre 2024 — Shai-Hulud v1 (première vague)
Les chercheurs de ReversingLabs ont détecté le premier ver auto-réplicant sur le registre npm le 15 septembre 2024. Nommé "Shai-Hulud" d'après les vers des sables de Dune, il s'est propagé via compromission en cascade de comptes npm, infectant des packages publics et privés. Plus de 180 packages ont été infectés dans cette première vague. (Source : SecurityWeek, Sysdig)
Novembre 2024 — Shai-Hulud 2.0 (deuxième vague)
Une deuxième vague plus sophistiquée a suivi en novembre 2024. Shai-Hulud 2.0 a backdooré 796 packages npm uniques, avec 640 infectés en une seule vague. Le ver ajoutait une communication C2 chiffrée via un mécanisme dead-drop. (Source : SecurityWeek, Datadog Security Labs)
Février 2026 — Campagne SANDWORM_MODE
L'acteur malveillant a relancé avec une nouvelle campagne nommée SANDWORM_MODE, ciblant les outils de développement IA. 19 packages ciblaient explicitement Claude Code, Cursor et Windsurf. (Source : Socket.dev)
20-23 mars 2026 — CanisterWorm (première vague)
La campagne s'est rebaptisée CanisterWorm, d'après son utilisation de l'infrastructure ICP (Internet Computer Protocol) comme dead-drop, résistante aux saisies de domaines. Entre le 20 et le 23 mars, 141 packages ont été infectés en 3 jours. (Source : Socket.dev)
8-22 avril 2026 — CanisterSprawl / Vague Namastex
La dernière vague, trackée par Socket comme "CanisterSprawl", a frappé Namastex Labs. Les packages @automagik/genie et @pgserve ont été compromis, avec 22 packages total affectés depuis le 8 avril. (Source : Socket.dev)
22 avril 2026 : Bitwarden CLI backdooré pendant 93 minutes
Le même jour que la divulgation Namastex, l'équipe de sécurité de Bitwarden a identifié et contenu une version malveillante de @bitwarden/cli. La version 2026.4.0 a été publiée sur npm à 17h57 ET et retirée à 19h30 ET — une fenêtre de exactement 93 minutes.
Comment les attaquants ont contourné la publication de confiance
Ce n'était pas un compte développeur compromis. Les attaquants ont infecté le pipeline CI/CD lui-même. Ils ont modifié publish-ci.yml dans le dépôt github.com/bitwarden/clients, injectant du code malveillant dans le workflow GitHub Actions gérant la publication npm. (Source : Endor Labs, Unit 42)
La payload : Shai-Hulud, Troisième Avènement
Le malware s'identifiait explicitement dans son code comme "Shai-Hulud: The Third Coming". La payload était sophistiquée et multi-étape :
- Un hook
preinstallmalveillant dansbw_setup.jss'activait automatiquement à l'installation - Un harvester multi-cloud ciblait six surfaces de secrets distinctes : tokens GitHub, tokens npm, credentials AWS, comptes de service GCP, clés SSH, et fichiers de configuration MCP/agents IA
- Les données étaient exfiltrées vers le domaine
audit.checkmarx[.]cx(lookalike de Checkmarx) avec un commit GitHub comme fallback chiffré - Un module d'auto-propagation trouvait tous les packages publiables avec le token volé, incrémentait la version patch, injectait le ver et republiait
- Une persistance shell RC était établie dans
~/.bashrcet~/.zshrc
Mesures de protection immédiates
1. Auditez vos tokens npm — maintenant
Le mécanisme d'auto-propagation dépend entièrement d'un token de publication. Les tokens d'accès granulaires npm restreignent un token à des packages spécifiques. Un token limité à mon-widget ne peut pas être utilisé pour propager un malware à vos 30 autres packages. Pour le CI/CD, utilisez la publication de confiance OIDC de npm — les tokens expirent après chaque run de workflow.
# Lister et auditer tous les tokens actifs
npm token list
# Révoquer un token compromis immédiatement
npm token revoke [token-id]
# Créer un token granulaire limité à un package
npm token create --scope=@votre-org/mon-package --type=publish
2. Désactiver les scripts postinstall en CI
Tout le mécanisme d'auto-propagation repose sur l'exécution des hooks postinstall. En environnement CI où vous faites confiance à votre lockfile, désactivez-les :
# Installer sans exécuter les scripts lifecycle
npm ci --ignore-scripts
3. Activer la provenance npm
La provenance npm lie un package publié à son commit source spécifique, créant une chaîne vérifiable cryptographiquement. Toute tentative de publication en dehors du workflow attested échoue automatiquement.
4. Révoquer les credentials si vous avez installé un package compromis
Si vous avez installé @bitwarden/cli@2026.4.0 ou l'un des packages Namastex affectés, traitez l'événement comme une exposition de credentials confirmée et révoquez immédiatement : tokens npm, tokens GitHub, credentials AWS/GCP, clés SSH, et clés API présentes dans les variables d'environnement.
Questions fréquentes
Comment savoir si j'ai installé un package compromis ?
Pour Bitwarden CLI : vérifiez si vous avez installé @bitwarden/cli@2026.4.0 entre 17h57 et 19h30 ET le 22 avril 2026. Exécutez npm ls @bitwarden/cli dans vos projets. Pour CanisterWorm, vérifiez si @automagik/genie ou @pgserve apparaissent dans vos lockfiles. Socket.dev maintient une liste à jour des packages affectés.
Est-ce que npm audit détecte CanisterWorm ?
Non. npm audit ne signale que les packages ayant une CVE dans la base de données advisory npm. Un package malveillant fraîchement publié — même contenant un ver auto-propagant — n'apparaîtra pas dans npm audit tant qu'un advisory formel n'est pas émis. Les outils de sécurité comportementale comme Socket.dev ont détecté l'anomalie au moment de l'installation.
Pourquoi la publication de confiance de Bitwarden a-t-elle échoué à prévenir l'attaque ?
Parce que les attaquants ont compromis le fichier de workflow GitHub Actions lui-même (publish-ci.yml), pas un token individuel de développeur. La publication provenait de la propre infrastructure CI/CD légitime de Bitwarden. C'est pourquoi une approbation multi-parties obligatoire pour les modifications de workflow de publication — où un deuxième humain doit approuver le changement — aurait ajouté une couche de détection critique.
Est-ce que le ver peut vraiment se propager de npm vers PyPI ?
Oui, si la machine compromise a des credentials PyPI dans son environnement. La payload CanisterWorm vérifie la présence de ~/.pypirc ou TWINE_PASSWORD, génère une payload Python persistante via .pth, et uploade des packages malveillants sur PyPI via twine. Cette propagation cross-écosystème est documentée par Socket.dev et JFrog comme une capacité confirmée.
Comment protéger mes tokens npm contre le vol ?
L'approche la plus efficace est d'éliminer entièrement les tokens de publication à longue durée de vie. Utilisez la publication de confiance OIDC de npm (disponible via GitHub Actions avec attestation de provenance) pour générer des credentials de publication à usage unique. Pour les tokens que vous devez utiliser, appliquez un scope granulaire, stockez-les uniquement dans les secrets GitHub Actions et activez l'attestation de provenance obligatoire.
Protégez vos dépendances npm avant la prochaine vague
TeamPCP est en escalade active. CVE OptiBot surveille vos lockfiles quotidiennement, les scanne contre la base OSV.dev et vous alerte dès qu'une dépendance est signalée — avant même que npm audit le sache. Compatible avec package-lock.json, yarn.lock, pnpm-lock.yaml et multi-écosystème (pip, composer, cargo).
Démarrer le monitoring gratuit