Une vulnérabilité a été identifiée dans la bibliothèque async-tar, écrite en Rust, qui offre des fonctions pour lire et écrire des archives tar (CVE-2025-62518, nom de code TARmageddon). Cette vulnérabilité permet, lors de l'extraction d'une archive tar spécifiquement conçue, non seulement d'extraire les fichiers qu'elle contient, mais aussi des fichiers présents dans une archive tar imbriquée. La vulnérabilité peut être exploitée pour contourner les systèmes de vérification des archives et extraire des fichiers sans vérification préalable.
La vulnérabilité se manifeste également dans les forks de la bibliothèque async-tar, comme tokio-tar, krata-tokio-tar et astral-tokio-tar, ainsi que dans les utilitaires basés sur celles-ci, comme le gestionnaire de paquets uv, développé comme un remplacement haute performance de « pip » pour les projets en Python. Parmi les projets populaires utilisant les bibliothèques vulnérables, on note également l'outil testcontainers pour exécuter des conteneurs docker et le runtime WebAssembly wasmCloud. Au cours des 90 derniers jours, la bibliothèque async-tar a enregistré 1,3 million de téléchargements sur le dépôt crates.is, tokio-tar 2,2 millions, et testcontainers 2,9 millions.
La vulnérabilité est causée par un choix incorrect de position lors de l'analyse des différentes valeurs de taille dans les en-têtes ustar et PAX. Dans les archives tar au format PAX, pour chaque fichier à l'intérieur de l'archive, deux en-têtes sont spécifiés : l'en-tête classique ustar et l'en-tête étendu PAX. Le problème découle du fait que les bibliothèques vulnérables, lors de l'extraction de fichiers, prenaient la taille à partir de l'en-tête ustar obsolète au lieu de calculer le décalage basé sur la taille fournie par l'en-tête PAX étendu. En cas de valeur de taille nulle dans l'en-tête ustar, le contenu qui suit était traité comme un bloc d'en-tête TAR valide pour le fichier suivant.


Pour mener une attaque, il suffit de créer une archive TAR dans laquelle l'en-tête ustar spécifie une taille nulle, tandis que l'en-tête pour le format PAX spécifie la taille appropriée, ce qui entraîne le traitement du contenu d'un fichier contenant une autre archive tar comme faisant partie de l'archive principale. Un exemple de code pour créer de telles archives est disponible sur GitHub. La vulnérabilité a été corrigée dans les versions tokio-tar 0.5.6 et uv 0.9.5. Pour les autres bibliothèques, les correctifs n'ont pas encore été publiés, mais des patchs ont été préparés séparément pour astral-tokio-tar, async-tar et krata-tokio-tar.
Les vulnérabilités dans les bibliothèques ont été attribuées à un niveau de dangerosité de 8.1 sur 10, car le problème peut être utilisé pour écraser des fichiers décompressés (les implémentations vulnérables décompresseront des fichiers autres que ceux visibles dans l'archive). En revanche, la vulnérabilité dans le gestionnaire de paquets uv est marquée comme non dangereuse, car si un attaquant peut influencer le contenu de l'archive source, il n'est pas nécessaire de compliquer l'attaque et d'exploiter la vulnérabilité via une archive imbriquée, lorsqu'il est possible d'obtenir l'exécution de code via des scripts de construction dans l'archive principale.
Les chercheurs ayant identifié la vulnérabilité ont proposé plusieurs scénarios hypothétiques d'attaques permettant de contourner les vérifications de sécurité et d'obtenir l'exécution de code par le biais du remplacement des fichiers de configuration ou de l'ingérence dans le processus de construction. Il est sous-entendu que l'archive envoyée pourra passer une vérification automatisée par un scanner de sécurité et un audit manuel, au cours duquel l'auditeur ne prêtera pas attention à une étrange archive imbriquée avec d'autres fichiers, puis lors de la décompression à l'aide des bibliothèques Rust, un contenu différent de celui attendu sera extrait de l'archive.
Par exemple, un attaquant peut télécharger une archive modifiée dans le dépôt PyPI, qui passera la vérification basée sur l'analyse du contenu de l'archive principale contenant un fichier légitime pyproject.toml. Lors du traitement de ce paquet à l'aide de l'utilitaire uv, le pyproject.toml légitime sera remplacé par une version malveillante de l'archive imbriquée, contenant des commandes qui seront exécutées lors de la construction sur l'ordinateur du développeur ou dans le système d'intégration continue. De même, il est possible d'organiser l'écrasement de fichiers de conteneur lors de l'extraction d'une image de conteneur à l'aide de l'outil testcontainers.
Source : opennet.ru
