Les permissions système arrivent dans Node.js

Les permissions système arrivent dans Node.js

21 février 2023 1 Par Aschen
🇬🇧 English version

Lorsqu’un programme est exécuté avec Node.js, ce programme a accès à un ensemble de classes/fonctions pour manipuler directement le système.

Techniquement, n’importe quel programme Javascript lancé avec Node.js peut:

  • lire et écrire n’importe quel fichier (par exemple .config/chromium/Default/Login Data qui contient les mots de passes Chrome)
  • envoyer des requêtes réseau (hello DDOS my old friend)
  • démarrer de nouveaux processus (pour miner la cryptomonnaie Monero par exemple)

Ce genre de chose est déjà arrivé avec par exemple ce package NPM qui supprimait l’ensemble des fichiers lorsqu’il était installé sur des ordinateurs russes ou biélorusse.

Certains runtimes comme Deno propose déjà un système de restriction des permissions systèmes accordées aux programmes.

Permissions système avec Node.js

Une nouvelle fonctionnalité est en cours d’intégration à Node.js, elle permettra de restreindre certaines ressources systèmes sur un système de liste blanche.

La PR est disponible directement sur Github pour les plus curieux d’entre vous https://github.com/nodejs/node/pull/44004

Ce nouveau système de permissions permettra de restreindre les fonctionnalités suivantes:

  • système de fichier en écriture/lecture
  • processus enfants: permet de d’exécuter un programme sur le système (e.g. bash)
  • worker threads: permet de lancer un nouveau processus Node.js

Au niveau du système de fichier, il sera possible d’être précis et d’accorder des droits en lecture ou écriture sur un répertoire ou fichier en particulier.

Finalement, une nouvelle API a été ajoutée à l’objet process afin de:

  • vérifier quelles permissions ont été accordées
  • restreindre des permissions
process.permission.has('fs.out') # can I write?
process.permission.deny('fs.out') # now I can't

Performances

A priori, le système de permissions impact peu voir pas du tout les performances de Node.js.

C’est une bonne nouvelle pour une fonctionnalité omniprésente dans le coeur du moteur.

C’est pour quand?

Pour l’instant la fonctionnalité est toujours en attente sur Github. A priori elle ne devrait pas arriver dans Node.js avant quelques semaines donc on peut raisonnablement espérer pouvoir l’utiliser dans la prochaine LTS: Node.js 20.

Néanmoins, si vous êtes curieux de l’utiliser dès à présent alors vous pouvez clôner la branche et tester sur votre machine:

git clone --depth 1 git@github.com:RafaelGSS/node.git --branch feat/permission-system --single-branch

cd node/

./configure

make # be patient here

Si on essaye de lire le système de fichiers sans la permission alors on se prend une erreur ERR_ACCESS_DENIED


Image d’en-tête – Street art de Lionel Messi dans le quartier populaire de San Telmo à Buenos Aires