Python : améliorer la sécurité et l'intégrité des packages d'archives en Python
mar, 04/11/2025 - 09:10
Depuis plusieurs mois, les vulnérabilités et les attaques sur les paquets Python, notamment via les archives, se sont multipliées. PyPI a subi de multiples attaques. Seth Larson, avec le soutien de la Python Software Foundation et du programme Alpha-Omega, publie un livre blanc intitulé "Slippery ZIPs and Sticky Tar-Pits: Security & Archives". L'une des préoccupations de la fondation est la sécurité des mécanismes d’archives, ce qui améliore de facto la sécurité des packages dédiés aux formats ZIP ou TAR.

Ce document est avant tout une proposition d’amélioration des implémentations des formats ZIP et TAR, notamment par rapport à zipfile et tarfile, deux modules de la bibliothèque standard. L’auteur rappelle que ces formats d’archives sont des standards anciens, mais que leur implémentation n’est pas des plus simples. De plus, les archives sont des vecteurs d’attaque, comme ces dernières semaines l’ont prouvé. L’écosystème Python a subi de multiples CVE depuis 2024 : 12 vulnérabilités recensées sur CPython, pip, PyPI et uv.
Seth rappelle, avec justesse, que le format d’archive est complexe, même si, pour le développeur, tout est fait pour lui simplifier le travail. Pour assurer la compatibilité avec les anciennes archives, certains mécanismes n’ont pas été modifiés depuis des dizaines d’années.
« Les archives ZIP et TAR permettent d’ajouter des fichiers optionnels dits entries à l’archive sans supprimer les entrées précédentes portant le même nom, tout en produisant une archive valide. Il en résulte des archives pouvant contenir des entrées dupliquées avec un contenu, des permissions ou des types différents. Le format ZIP permet même de supprimer des fichiers au sein d’une archive en réécrivant le répertoire central pour supprimer la référence à un fichier local. Les implémentations doivent traiter ces instructions de manière cohérente afin de se prémunir contre les attaques par confusion. » explique Seth.
Seth évoque également le mécanisme de build reproducibility, qui aide à la détection des packages compromis ou du code malveillant. Mais, dans le cas des archives, ce mécanisme est difficile à utiliser à cause des instructions spécifiques à l’archivage. Un autre problème survient : les implémentations ne sont pas forcément identiques, par exemple dans la manière d’extraire le contenu d’une archive, ce qui peut provoquer une attaque de type ZIP Slip. Cette attaque permet de manipuler des contenus et des fichiers durant l’extraction. Une autre attaque possible est la ZIP bomb, une forme de déni de service exploitant la décompression d’archives ZIP. Une archive de 10 Mo, apparemment anodine, peut se transformer en plusieurs téraoctets de données lors de l’extraction, provoquant une saturation. Heureusement, la ZIP bomb n’est pas une attaque courante.
Quelles solutions ? Seth propose plusieurs pistes :
Restreindre les fonctionnalités non nécessaires ou peu utilisées, afin d’éviter des fonctions « obscures » et des failles potentielles dues à une mauvaise implémentation.
Rejeter les liens symboliques et mieux tester les implémentations.
Mettre en place des couches d’archives dites canoniques et des options de reproductibilité pour mieux détecter les compromissions et les changements non autorisés.
Établir un mécanisme cohérent de gestion des répertoires pour les packages, utilisé par toute la communauté.
Document : https://alpha-omega.dev/wp-content/uploads/sites/22/2025/10/ao_wp_102725a.pdf

