La société GitHub a révélé des détails sur sept vulnérabilités dans les paquets tar et @npmcli/arborist, qui fournissent des fonctionnalités pour travailler avec des archives tar et calculer les arbres de dépendances dans Node.js. Les vulnérabilités permettent, lors de l'extraction d'une archive spécialement conçue, d'écraser des fichiers en dehors du répertoire racine dans lequel l'extraction est effectuée, dans la mesure où les droits d'accès actuels le permettent. Ces problèmes offrent la possibilité d'exécuter du code arbitraire sur le système, par exemple, en ajoutant des commandes dans ~/.bashrc ou ~/.profile lors de l'exécution de l'opération par un utilisateur non privilégié, ou en remplaçant des fichiers systèmes lors d'un lancement avec les droits root.
Le danger des vulnérabilités est aggravé par le fait que le code problématique est utilisé dans le gestionnaire de paquets npm lors des opérations avec des paquets npm, ce qui permet d'organiser une attaque contre les utilisateurs en plaçant un paquet npm spécialement conçu dans le référentiel, dont le traitement dans le système exécutera le code de l'attaquant. L'attaque est possible même lors de l'installation de paquets en mode « --ignore-scripts », qui désactive l'exécution des scripts intégrés. En tout, npm est affecté par quatre vulnérabilités (CVE-2021-32804, CVE-2021-37713, CVE-2021-39134 et CVE-2021-39135) sur les sept. Les deux premiers problèmes concernent le paquet tar, tandis que les deux autres concernent le paquet @npmcli/arborist.
La vulnérabilité la plus critique, CVE-2021-32804, est causée par le fait qu'au moment de nettoyer les chemins absolus spécifiés dans l'archive tar, les caractères répétitifs « / » sont mal traités : seul le premier caractère est supprimé, tandis que les autres restent. Par exemple, le chemin « /home/user/.bashrc » sera converti en « home/user/.bashrc », tandis que le chemin « //home/user/.bashrc » deviendra « /home/user/.bashrc ». La seconde vulnérabilité, CVE-2021-37713, se manifeste uniquement sur la plateforme Windows et est liée à un nettoyage incorrect des chemins relatifs, incluant un caractère de disque non délimité (« C:some\path ») et une séquence pour revenir au répertoire précédent (« C:../foo »).
Les vulnérabilités CVE-2021-39134 et CVE-2021-39135 sont spécifiques au module @npmcli/arborist. Le premier problème n'apparaît que sur les systèmes qui ne tiennent pas compte de la casse dans le système de fichiers (macOS et Windows) et permet d'écrire des fichiers dans une partie arbitraire du système de fichiers en spécifiant dans les dépendances deux modules ‘»foo»: «file:/some/path»‘ et ‘FOO: «file:foo.tgz»‘, dont le traitement entraînera la suppression du contenu du répertoire /some/path et l'écriture du contenu de foo.tgz à cet endroit. Le deuxième problème permet de réécrire des fichiers via la manipulation de liens symboliques.
Les vulnérabilités ont été corrigées dans les versions Node.js 12.22.6 et 14.17.6, npm CLI 6.14.15 et 7.21.0, ainsi que dans des versions spécifiques du paquet tar 4.4.19, 5.0.11 et 6.1.10. Suite à des informations sur le problème dans le cadre de l'initiative «bug bounty», GitHub a versé 14 500 $ aux chercheurs et a scanné le contenu du dépôt, où aucune tentative d'exploitation des vulnérabilités n'a été détectée. Pour se protéger contre ces problèmes, GitHub a également mis en place une interdiction de publication dans le dépôt de paquets NPM incluant des liens symboliques, des liens durs et des chemins absolus.
Source : opennet.ru
