Vivre des modules complémentaires Node.js
Les modules natifs sont des fichiers Node.js compilés qui permettent aux applications Node.js d'interagir avec du code natif écrit dans des langages tels que C, C++ ou Objective-C. Ces fichiers sont des binaires compilés qui peuvent contenir du code machine et s'exécuter avec les mêmes privilèges que le processus Node.js qui les charge. Contrairement aux fichiers JavaScript, les fichiers .node ne sont pas lisibles et peuvent appeler directement des API système et effectuer des opérations que le code JavaScript pur ne peut pas. Ces extensions peuvent utiliser Objective-C++ pour exploiter les API natives de macOS directement depuis Node.js, permettant une exécution de code arbitraire en dehors de la sandbox normale. Les applications Electron utilisent souvent le format de fichier ASAR pour empaqueter le code source de l'application, mais la vérification de l'intégrité ASAR est désactivée par défaut. Lorsqu'elle est activée, la vérification de l'intégrité ASAR vérifie le hachage de l'en-tête de l'archive ASAR à l'exécution et empêche la falsification des fichiers dans l'archive. Cependant, de nombreuses applications s'exécutent en dehors de l'archive vérifiée, sous app.asar.unpacked, car les fichiers .node compilés ne peuvent pas être exécutés directement depuis une archive ASAR. Cela permet à un attaquant local de modifier ou de remplacer les fichiers .node dans le répertoire décompressé, similaire au détournement de DLL sous Windows. Pour résoudre ce problème, deux outils ont été développés : Electron ASAR Scanner, qui évalue si les applications Electron implémentent la protection de l'intégrité ASAR, et NodeLoader, un simple compilateur d'extensions Node.js natif. Les outils Electron ASAR Scanner et NodeLoader peuvent aider à identifier et à atténuer les vulnérabilités de sécurité potentielles dans les applications Electron qui utilisent des modules natifs.