En septembre 2022, Trellix a publié un rapport sur une vulnérabilité du module tarfile, qui fait partie de la bibliothèque standard du langage de programmation Python et que n’importe qui peut utiliser. La vulnérabilité permet l’écriture d’un fichier arbitraire dans un dossier arbitraire sur le disque dur et, dans certains cas, l’exécution d’un code malveillant. Cette étude est remarquable puisque ce problème avec tarfile a été découvert en août 2007, il y a 15 ans ! À cette époque, cette faille n’était pas aussi dangereuse. Découvrons pourquoi ce n’était pas une menace et quels problèmes les développeurs de Python et les utilisateurs pourraient rencontrer.
Tarfile en détail
Tarfile contient un code qui permet de travailler les archives tar. Ce format est largement utilisé dans les systèmes d’exploitation comme Unix, et son histoire commence en 1979. Tar est un logiciel d’archivage qui permet de regrouper simplement un grand nombre de fichiers et de dossiers. Au début, il était utilisé pour enregistrer des sauvegardes sur bande magnétique. De nos jours, les archives tar peuvent utiliser la compression des fichiers, même si cette fonction est optionnelle. Le module tarfile est responsable de la création et de la décompression des archives, et les développeurs Python s’en servent comme outil tout prêt pour effectuer ces tâches.
La vulnérabilité de tarfile est assez simple. Elle a été décrite en détail en 2007 lors de la publication du rapport original sur ce bug. De plus, il ne s’agit pas vraiment d’une vulnérabilité en tant que telle. Le module tarfile reproduit la structure exacte du dossier contenue dans l’archive lorsqu’il est décompressé. Dans certains cas, cela se passe lorsque le nom du fichier dans l’archive ressemble à « ../../../../../etc/passwd ». Si vous décompressez une archive de ce genre comme administrateur système, le fichier passwd n’est pas écrit dans le répertoire où l’archive se trouve. Lorsque vous parcourez les éléments /../ du chemin, le fichier décompressé atteint d’abord le répertoire racine, puis écrase le fichier passwd dans le directoire /etc. Sous Linux, cela signifie que le fichier normal qui contient les données de tous les utilisateurs système est effacé.
Une attente de 15 ans
À la suite d’une conversation sur cet éventuel bug découvert en 2007, les chercheurs ont décidé de… ne rien faire pour deux raisons. Tout d’abord, le traitement d’un dossier de ce genre est parfaitement conforme à la norme Unix POSIX (nous pouvons le confirmer). Ensuite, cette vulnérabilité ne peut pas être exploitée en pratique. Les responsables ont considéré qu’un avertissement dans le guide utilisateur était suffisant puisqu’il n’est pas conseillé de décompresser les fichiers de sources non fiables avec le module tarfile.
Il a fallu attendre 2022 pour que cet argument soit invalidé, lorsque Trellix a démontré que cette vulnérabilité peut très bien être exploitée en pratique. Non seulement les cybercriminels peuvent écrire les données n’importe où, mais en plus ils peuvent exécuter un code arbitraire. N’oublions pas que cette bibliothèque s’adresse aux programmeurs. En d’autres termes, la possibilité d’être victime d’une attaque dépend du logiciel utilisé par le module tarfile. Trellix donne deux exemples.
Le premier est Universal Radio Hacker, un programme
utilisé pour analyser les protocoles sans fil inconnus. Le programme sauvegarde les données sous la forme de projets, qui consiste à avoir plusieurs fichiers tar compressés. Les chercheurs ont démontré comment, en essayant d’ouvrir une archive prédéfinie, le fichier exécutable a été écrit dans le directoire autorun de Windows. Ainsi, le code est exécuté lorsque le système est relancé. Cette vulnérabilité peut, entre autres, être exploitée sur différentes plateformes.
Le deuxième exemple mentionné dans la vidéo est un peu plus compliqué. L’environnement de développement Spyder IDE stocke les données dans des archives tar. Lorsque ces données ont été importées, les chercheurs ont d’abord reproduit l’expérience en insérant le fichier dans le système, puis ils ont fait autre chose : ils ont programmé un code arbitraire qui devait s’exécuter la prochaine fois que Spyder serait lancé. Ce test a débouché sur une demande afin d’exécuter un code arbitraire avec des privilèges d’administrateur système.
Des conséquences imprévisibles
L’histoire de ce bug vieux de 15 ans montre, encore une fois, que vous ne devez jamais sous-estimer les vulnérabilités qui permettent d’écrire des données n’importe où, même si le registre effectue cette action et que les chemins d’exploitation ne sont pas évidents.
Tarfile fait partie de la bibliothèque standard de Python et se trouve dans pratiquement tous les systèmes basés sur Linux (entre autres). Pourtant, la menace vient de l’utilisation d’une fonction vulnérable spécifique. De façon générale, tout projet développé sur Python qui se sert d’un module tarfile est une vulnérabilité. Du point de vue de l’utilisateur final, cette situation est délicate : l’utilisateur pourrait exécuter un programme potentiellement vulnérable sans savoir qu’il utilise tar. Les experts de Kaspersky vous conseillent de :
- Limiter le traitement de fichiers qui proviennent de sources non fiables ;
- Exécuter les programmes tiers avec un minimum de privilèges afin de réduire le risque d’attaque ;
- Réaliser un audit des programmes utilisés sur les systèmes les plus critiques afin d’identifier ceux qui ont une fonction vulnérable.
Pour les développeurs, ce problème devrait les inciter à réaliser un audit de leur code afin de vérifier s’il fait appel à une fonction vulnérable, et à effectuer les modifications nécessaires.