Une étude récente menée par Snyk sur l'état de la sécurité open-source a donné des résultats alarmants: pour les packages NPM, 86% des failles de sécurité résident dans secondaire dépendances que vous avez souvent peu de contrôle.
Que sont les dépendances secondaires?
Lorsque vous installez quelque chose à partir de NPM, vous n’installez pas seulement un package, vous installez également ce package, ainsi que ses dépendances requises. Vous pouvez afficher cet arbre de dépendances pour vos propres projets avec npm ls --depth = 10
. Même un projet de base avec deux packages installés contient en fait quatre niveaux de dépendances totalisant 10 packages réels:
Le problème est donc évident. Vous extrayez du code de beaucoup plus de packages que votre package.json
suggérerait. Et, chacun de ces packages est un bogue de sécurité potentiel.
Selon le rapport de Snyk, c'est exactement ce qui se passe dans les environnements open source comme NPM et Ruby Gems. Le problème est généralisé et la plupart des bogues proviennent de packages indirects que vous n'avez pas installés manuellement.
Le bon côté: ce problème n'est pas aussi grave qu'il y paraît. NPM a un outil d'audit intégré qui va attraper la plupart des méchants et vous dire de mettre à jour. En raison de la prévalence de l'audit, ces bogues de sécurité attirent davantage l'attention et sont corrigés lorsqu'ils se produisent, avec des mises à jour diffusées rapidement aux utilisateurs concernés.
La majorité des bogues détectés par Snyk étaient des attaques XSS potentielles, et bien que ce ne soit pas grand, leur impact dans le monde réel est assez faible. Les principaux bugs impactants se résumaient à quelques dizaines prototype d'attaques de pollution—Exécution potentielle de code arbitraire — ainsi que certains packages malveillants ou piratés conçus spécifiquement pour essayer de se faufiler dans des chemins sans méfiance package.json
«S.
Le problème s'améliore également, ou du moins attire davantage l'attention. Le nombre de bogues signalés dans NPM a diminué de 20% par rapport à l'année dernière, et la même tendance s'applique aux autres écosystèmes du gestionnaire de paquets.
Le principal point à retenir de tout cela: vous devez penser à la provenance de votre code. Avec la montée en puissance des logiciels FOSS, il est facile de se laisser entraîner dans l'enfer des dépendances avec du code que vous n'aviez pas prévu d'ajouter.
La solution: l'audit
Il y a forcément des bogues dans des morceaux aléatoires de code open-source, et bien que vous ne puissiez pas vraiment corriger certains des petits sans tout développer en interne, vous pouvez en détecter certains particulièrement méchants avec des audits réguliers.
Le problème n'est cependant pas particulièrement nouveau, et npm
a un outil intégré pour cela …audit npm
. Vous l'avez certainement déjà vu, car il s'exécute automatiquement à chaque installation:
L'audit intégré de NPM vérifie principalement les mises à jour des packages qui corrigent certains bogues, il y a donc toujours une mise à niveau que vous pouvez faire (mais potentiellement casser) qui peut résoudre le problème. Il existe cependant d'autres scanners de sécurité, comme Snyk eux-mêmes, qui gère un service de vérification des projets GitHub et gère un base de données accessible au public des bogues connus que vous pouvez vérifier.