InstaTunnel
Basculer le menu de navigation
Tutorial
11 min read
61 views

La Provenance n'est pas une Preuve : Ce qu'il faut vérifier avant d'exécuter `npm install -g` pour un Tunnel CLI

La provenance de npm n'est pas une garantie de sécurité. Découvrez comment évaluer un tunnel CLI avant `npm install -g` : verrouiller les versions, `ignore-scripts`, vérifier les sommes de contrôle, limiter les sorties réseau.

IT
InstaTunnel Team
Published by the InstaTunnel team | Editorial policy
La Provenance n'est pas une Preuve : Ce qu'il faut vérifier avant d'exécuter `npm install -g` pour un Tunnel CLI

Quick answer

La Provenance npm suffit-elle ? Sécurisez l'installation de votre Tunnel CLI: quick comparison answer

Choose the tunnel tool based on the network model: public HTTPS URLs for webhooks and demos, private mesh access for internal apps, and managed infrastructure when policy controls matter most.

Which tunnel tool is best for public webhook testing?

Use a public HTTPS localhost tunnel with stable URLs. InstaTunnel focuses on webhook testing, demos, OAuth callbacks, and MCP endpoint workflows.

When should I choose a private network tool instead?

Choose a private mesh or Zero Trust tool when every user and service should stay inside a controlled private network.

Deux choses sont vraies en novembre 2026. npm 12 refuse désormais d’exécuter par défaut les scripts d’installation des dépendances, ce qui ferme le chemin de livraison le plus courant de la chaîne d’approvisionnement. Et dans la même année, des attaquants ont diffusé des versions malveillantes de npm qui portaient des attestations de provenance valides, plus des charges utiles qui ne touchent même pas à un script d’installation.

Si vous êtes sur le point d’exécuter npm install -g sur un client Tunnel, les deux faits comptent. Un tunnel CLI est un processus longue durée qui détient un jeton d’authentification, hérite des variables d’environnement de votre shell et relaie le trafic entre l’internet public et votre localhost. Ce guide couvre ce que npm 12 change, ce que la provenance prouve et ne prouve pas, et une liste de vérification pré-install : verrouillage des versions, ignore-scripts, binaires autonomes vérifiés par somme de contrôle et des listes d’autorisation d’egress.

Pourquoi un client tunnel est une cible de grande valeur

Un client tunnel s’exécute pendant des heures ou des jours, avec les privilèges de votre utilisateur, sur la machine où vivent vos fichiers de code, vos clés et vos fichiers .env, et sur un chemin réseau où une copie modifiée pourrait lire tout ce qu’elle relaie. Le compte rendu de Palo Alto Networks sur la libération piratée de @bitwarden/cli énumère les cibles : clés SSH, tokens .npmrc, fichiers .env, identifiants AWS, configurations Git, tokens GitHub CLI, jetons d’authentification npm et configurations IA/MCP. Le jeton d’authentification du client tunnel serait naturellement adjacent à ces éléments, et un processus déjà doté d’une connectivité sortante est bien placé pour l’envoyer quelque part.

Ce que npm 12 a changé, et ce qu’il n’a pas changé

GitHub a annoncé npm 12 en juillet 2026, avec allowScripts désactivé par défaut. Selon The Hacker News, les scripts preinstall, install et postinstall des dépendances, et les builds implicites node-gyp ne s’exécutent plus à moins d’être explicitement autorisés. Les dépendances Git et les tarballs URL distants sont aussi désactivés sauf si vous activez avec --allow-git ou --allow-remote. L’avis de modification du changelog de GitHub date du 9 juin 2026.

Trois conséquences pratiques pour les tunnels CLIs :

  • Les paquets wrapper qui téléchargent un binaire au moment de l’installation cessent de le faire. Le wrapper Node.js pour ngrok indique que npm install télécharge le binaire de la plateforme à partir de l’hébergement de ngrok lors de l’étape postinstall. Sous npm 12, ce téléchargement est bloqué jusqu’à ce que vous l’approuviez. C’est une fonctionnalité : elle vous force à décider si vous faites confiance à ce chemin de téléchargement.
  • Les installations globales nécessitent un drapeau, pas une liste d’autorisation. Des rapports sur le tracker CLI npm montrent que pour npm install -g, l’avertissement vous dirige vers npm install -g --allow-scripts=<pkg>, ou npm config set allow-scripts=<pkg> --location=user pour le persister. Un article communautaire note aussi que npm approve-scripts échoue pour les installations globales, une lacune connue.
  • Les versions plus anciennes de npm nécessitent toujours ignore-scripts. La demande de tirage npm qui a inversé le comportement par défaut conserve ignore-scripts=true comme solution de repli pour les versions plus anciennes. Gardez-le dans votre configuration jusqu’à ce que chaque appareil de votre parc exécute npm 12.

Le vide : les charges utiles qui s’exécutent lorsque le code s’exécute

Bloquer les scripts d’installation ne fait rien contre le code qui s’exécute lorsque le paquet est utilisé. L’analyse de Microsoft de juillet 2026 sur la compromission AsyncAPI a trouvé une charge utile déclenchée au chargement du module, et elle indiquait que --ignore-scripts ne neutralisait pas ce schéma. Les rapports sur l’incident indiquent que quatre paquets @asyncapi ont été trojanisés, y compris @asyncapi/specs, qui compte environ 2,66 millions de téléchargements hebdomadaires.

Le cas Bitwarden CLI illustre le même angle mort. La version malveillante 2026.4.0, publiée le 22 avril 2026, a réorienté à la fois un hook preinstall et l’entrée binaire bw vers un script de chargement. Une analyse OpenReplay souligne que l’entrée bin signifiait que la charge utile s’exécutait encore chaque fois que quelqu’un invoquait la commande, même avec --ignore-scripts activé.

Appliquez cela à un CLI global. Vous l’installez précisément pour pouvoir l’exécuter. Pour un client tunnel, la frontière entre « installé » et « exécuté » est d’une commande, donc le blocage des scripts vous apporte moins que pour un arbre de dépendances frontal. Cela reste utile à avoir. Ce n’est pas suffisant.

Provenance : ce qu’elle prouve et ce qu’elle ne prouve pas

La provenance npm lie un paquet publié au dépôt source et aux instructions de build qui l’ont produit. La documentation propre de npm est explicite sur la limite : la provenance ne garantit pas l’absence de code malveillant. Elle vous donne un enregistrement vérifiable à auditer, pas un verdict.

En 2026, trois démonstrations claires ont été fournies.

Date Incident Ce qui portait une provenance valide
11 mai 2026 TanStack worm : 84 versions malveillantes réparties sur 42 paquets @tanstack/* Publié à partir du pipeline de publication de confiance réel après le vol d’un jeton OIDC
9 septembre 2026 GHAPPIER : @dforge-core/dforge-mcp@0.2.21 Construit par GitHub Actions via publication de confiance OIDC ; l’attestation nomme le commit de l’attaquant
Octobre 2026 faille “Slugfest” de publication de confiance : 1 500+ paquets exposés Une release d’un dépôt revendiquant un nom abandonné transporterait aussi une attestation valide

Dans l’incident TanStack, Unit 42 de Palo Alto le décrit comme le premier ver documenté à publier des paquets malveillants avec une provenance SLSA Build Level 3 valide, et résume le problème ainsi : la provenance confirme quel pipeline a construit un paquet, non si ce pipeline était propre. Son analyse ajoute que l’association publisher de confiance couvrait l’ensemble du dépôt plutôt qu’un seul workflow sur une branche protégée.

GHAPPIER fait le même point par une porte différente. CloudSEK rapporte qu’un attaquant a utilisé l’accès d’un mainteneur pendant environ 105 minutes, modifié le workflow de publication pour que les pushes soient publiés automatiquement, et livré la version 0.2.21, qui est restée la dernière version pendant environ 35 minutes. Comme le registre a fait confiance à l’identité CI du référentiel, la release aurait passé les npm audit signatures.

Les recherches Slugfest de Bloom Security ont montré que toute personne qui enregistrait un nom de dépôt GitHub qu’un mainteneur avait abandonné pouvait publier vers des paquets qui lui faisaient encore confiance. GitHub affirme avoir publié des correctifs, et les configurations non validées expirent désormais après 48 heures. Le conseil de Bloom aux consommateurs : vérifiez que l’attestation nomme le dépôt d’où provient le projet.

L’absence de provenance demeure un signal

Rien de tout cela ne rend la provenance inutile. Un article sur l compromission axios du 31 mars 2026 note que les versions malveillantes manquaient de la provenance GitHub Actions que les versions légitimes avaient, ce qui était un signal de détection clé. Une analyse de sécurité de Mondoo ajoute une mise en garde connexe : rien n’empêche d’installer une version qui a perdu la provenance. Donc la règle est : une attestation manquante ou mal assortie est une raison d’arrêter ; une attestation valide est une raison de continuer à vérifier.

La liste de vérification pré-installation

1. Confirmer l’identité et verrouiller une version exacte

Vérifiez le nom du paquet, l’étendue et la version par rapport à la documentation du fournisseur. L’analyse de JFrog indique que la version hijackée Bitwarden, 2026.4.0, n’existe pas dans l’historique réel des versions, malgré des métadonnées qui semblent légitimes. Puis verrouillez ce que vous avez vérifié au lieu d’installer @latest :

npm install -g some-tunnel-cli@1.2.3

3. Ajouter une porte d’âge de version

npm 11.10 (février 2026) a ajouté min-release-age, mesuré en jours. Les versions malveillantes sont souvent détectées et retirées en quelques heures. La version défectueuse de GHAPPIER était la plus récente pendant environ 35 minutes, et la fenêtre Bitwarden a été signalée à environ une heure et demie. Une porte d’âge de sept jours aurait permis d’éviter les deux.

# ~/.npmrc
min-release-age=7
ignore-scripts=true

Deux particularités documentées par les utilisateurs : npm config get min-release-age peut afficher null parce que npm le convertit en interne à une marque temporelle before, et vous ne pouvez pas le combiner avec --before. Pour installer rapidement un correctif critique, override par commande avec --min-release-age=0.

4. Inspecter le manifeste sans installer

Regardez ce que le paquet déclare avant de toucher votre système :

npm view some-tunnel-cli@1.2.3 scripts bin dependencies --json
npm pack some-tunnel-cli@1.2.3   # télécharge uniquement le tarball
tar -tzf some-tunnel-cli-1.2.3.tgz

Les signaux d’alerte : tout preinstall/install/postinstall qu’un CLI pur n’a aucune raison d’utiliser, une entrée bin pointant vers un fichier d’installation ou de chargement au lieu du point d’entrée réel, et des dépendances nouvellement ajoutées. Les deux signaux sont apparus dans le manifeste Bitwarden.

5. Vérifier dans un répertoire éphémère, puis vérifier les attestations

npm audit signatures vérifie les signatures du registre et les attestations de provenance, mais il opère sur les dépendances installées dans un projet, il ne vérifie pas directement une installation globale. Installez dans un répertoire scratch avec les scripts désactivés, puis auditez :

mkdir /tmp/vet  cd /tmp/vet  npm init -y
npm install --ignore-scripts some-tunnel-cli@1.2.3
npm audit signatures

La documentation de npm exige npm 9.5.0 ou plus récent pour cela. Puis lisez l’attestation elle-même. Le registre expose les attestations à registry.npmjs.org/-/npm/v1/attestations/<package>@<version>. Confirmez que le dépôt source et le workflow correspondent au dépôt officiel du fournisseur, et que la version comporte une attestation, même si des versions antérieures en avaient.

6. Décider quels scripts peuvent être exécutés

Sur npm 12, n’approuvez que ce que vous comprenez. Pour un outil global qui nécessite réellement un postinstall :

npm install -g --allow-scripts=some-tunnel-cli some-tunnel-cli@1.2.3

7. Si le seul script du paquet est un téléchargeur binaire, c’est le signal pour la prochaine section.

Préférer des binaires autonomes vérifiés par somme de contrôle

De nombreux clients tunnel se diffusent sous forme de binaires statiques uniques. Installer directement le binaire supprime l’arbre de dépendances npm, le téléchargement postinstall de l’enveloppe et la surface d’attaque à l’importation en une seule étape.

Cloudflare publie des sommes de contrôle SHA-256 pour chaque actif cloudflared dans ses notes de version GitHub. Une installation pinée et vérifiée ressemble à ceci :

VERSION=<reviewed-release-tag>
curl -fsSLO "https://github.com/cloudflare/cloudflared/releases/download/${VERSION}/cloudflared-linux-amd64"
echo "<sha256-you-recorded-at-review-time>  cloudflared-linux-amd64" | sha256sum -c -
install -m 0755 cloudflared-linux-amd64 /usr/local/bin/cloudflared

Soyez honnête sur ce que cela prouve. Une somme de contrôle copiée depuis la même page de release que le binaire protège contre la corruption et les chemins de téléchargement compromis, pas une release compromise. Enregistrez le hash dans votre propre dépôt ou dans votre code d’infrastructure lorsque quelqu’un revoit la release, et faites que votre script de provisioning le compare.

Lorsque un projet publie des attestations d’artéfacts GitHub, ajoutez gh attestation verify ./some-binary --repo owner/repo. L’outil gh doit être authentifié même pour les dépôts publics, et certains installateurs ignorent la vérification lorsque une release n’a pas d’attestation (la documentation Foundry indique que son installateur le fait), alors faites échouer votre propre script. Ces attestations partagent la limite de la provenance npm : elles identifient la construction, pas l’intention de l’auteur.

Verrouiller les sorties

Un client tunnel a besoin de très peu d’accès sortant. La plupart des charges malveillantes nécessitent davantage : quelque part pour envoyer des fichiers volés et parfois pour récupérer une seconde étape. Le chargeur Bitwarden a téléchargé le runtime Bun depuis GitHub, et son point de fuite était conçu pour ressembler au domaine de télémétrie d’un fournisseur de sécurité.

Exigences documentées pour deux clients populaires :

  • cloudflared se connecte en sortant sur le port 7844, TCP pour HTTP/2 ou UDP pour QUIC, et ouvre quatre connexions sortantes vers au moins deux centres de données Cloudflare. Le guide firewall de Cloudflare liste region1.v2.argotunnel.com et region2.v2.argotunnel.com, ajoute des noms d’hôtes tels que cftunnel.com pour les firewalls à SNI et considère les destinations sur le port 443 comme optionnelles (pour les mises à jour). Il recommande de bloquer tout ingress.
  • ngrok agents établissent une connexion TLS sortante sur le port 443 vers connect.ngrok-agent.com. La documentation de ngrok indique que ses adresses IP tournent et doivent être autorisées par nom d’hôte, et que la famille *.ngrok-agent.com peut être nécessaire en raison du routage basé sur la latence. Vous pouvez aussi white-labeler l’URL de connexion et exécuter ngrok diagnose pour tester la connectivité.

Puisque les destinations sont des noms d’hôtes, les règles basées sur des IP simples ne suffisent pas. Utilisez un pare-feu conscient du FQDN, un proxy ou une politique style Cilium toFQDNs, et appliquez-la à l’utilisateur ou au conteneur qui exécute le tunnel, pas seulement à tout l’hôte.

Une liste d’autorisation réduit l’étendue des dégâts mais ne l’efface pas : les points de terminaison du fournisseur du tunnel restent nécessairement autorisés.

Exécutez-le comme s’il pouvait être compromis

Supposez que le client puisse un jour être la mauvaise release que vous n’avez pas repérée. Exécutez-le en tant qu’utilisateur dédié ou dans un conteneur sans identifiants cloud, clés SSH ou tokens de publication en accès, démarrez-le dans un environnement propre plutôt que dans un shell chargé de secrets exportés, et utilisez un jeton d’authentification à périmètre étroit que vous pouvez faire tourner. N’exposez que le seul port dont vous avez besoin.

Tout ce qui précède porte sur la confiance envers le client. Détecter des tunnels que vous n’avez pas autorisés est un problème distinct, abordé dans notre post précédent sur la détection des tunnels SSH inverses frauduleux.

FAQ

Est-ce que npm 12 rend npm install -g sûr ? Non. Il bloque par défaut les scripts d’installation des dépendances, ce qui retire une des grandes voies d’attaque. Le code qui s’exécute lorsque vous importez un module ou invoquez le CLI reste inchangé.

La provenance npm suffit-elle pour faire confiance à un paquet ? Non. La provenance indique où et comment un paquet a été construit. Plusieurs incidents en 2026 ont diffusé des versions malveillantes via des pipelines légitimes avec des attestations valides, il faut donc vérifier que l’attestation correspond au dépôt attendu et la combiner avec le pinning des versions et l’examen des manifestes.

La conclusion

npm 12 a relevé le niveau et les attaquants ont migré vers des endroits non couverts. Considérez la provenance comme un indice parmi d’autres sur l’origine d’une release, pas comme une réponse sur le fait de savoir s’il faut l’exécuter. Pour un client Tunnel longue durée, authentifié et exposé au réseau : verrouillez une version examinée, laissez passer les jours initiaux d’une release, privilégiez des binaires vérifiés par hash, et laissez le processus n’atteindre que les hôtes dont il a besoin.

Sources

Continue from this article into the most relevant product guides and workflows.

Related Topics

#npm provenance#npm provenance is not proof#npm supply chain security#npm install -g security#tunnel CLI security#localhost tunneling security#secure tunnel client#ngrok security#cloudflared security#localtunnel security#tunneling tools comparison#npm v12 install scripts#npm install scripts blocked#npm ignore-scripts#ignore-scripts flag#malicious npm packages#npm malware#npm supply chain attack#import-time attack npm#npm package provenance attestation#Sigstore npm#SLSA provenance#verify npm package integrity#npm version pinning#pin npm dependencies#package-lock.json security#npm ci vs npm install#checksum verified binaries#SHA256 checksum verification#standalone binary install#verify binary signature#egress allowlist#egress filtering#outbound traffic allowlist#network egress control#developer environment security#protect environment variables#env var secrets leak#secrets in .env files#long-lived process security#local traffic interception#third-party CLI risk#CLI tool trust#software supply chain security#dependency confusion#typosquatting npm#compromised npm maintainer#npm audit#DevSecOps best practices#developer workstation security#zero trust developer tools#reverse proxy tunnel#expose localhost to internet#webhook testing tunnel#secure localhost sharing#cloud-native security#DevOps security checklist#developer infrastructure security#npm security best practices 2026#tunnel CLI install checklist

Keep building with InstaTunnel

Read the docs for implementation details or compare plans before you ship.

Share this article

More InstaTunnel Insights

Discover more tutorials, tips, and updates to help you build better with localhost tunneling.

Browse All Articles