Dépendances
pip-audit
pip-audit analyse les dépendances Python à la recherche de paquets présentant des vulnérabilités connues. Il provient de la Python Packaging Authority et fonctionne sur des environnements, des fichiers requirements et des fichiers de projet. Python ne dispose d'aucun équivalent de npm audit intégré à pip : c'est donc la méthode standard pour en avoir un.
Mis à jour le
Comment exécuter pip-audit
pip install pip-audit
pip-audit # the current environment
pip-audit -r requirements.txt # a requirements file
pip-audit . # a local project
pip-audit --fix --dry-run # show what would be upgraded
pip-audit --fix # upgrade vulnerable packages
pip-audit -s osv # use OSV instead of PyPI
pip-audit -f cyclonedx-json # write a CycloneDX SBOM
Par défaut, il recherche les paquets via l'API JSON de PyPI, qui s'appuie sur la Python Packaging Advisory Database, et il peut utiliser OSV à la place. Consultez la page du projet pour la liste complète des options.
Faites attention à ce que vous auditez
Ce point surprend beaucoup de monde. Auditer un fichier requirements résout ses dépendances, et le projet avertit que
pip-audit -r INPUT équivaut fonctionnellement à pip install -r INPUT. L'installation d'un paquet
peut exécuter du code : un paquet malveillant pourrait donc s'exécuter pendant l'audit. La règle du projet lui-même est simple : ce que vous ne soumettriez pas à
pip install, ne le soumettez pas à pip audit.
Cela signifie aussi que ce contrôle ne peut pas vous protéger d'un paquet qui n'a pas encore d'avis de sécurité, comme un nouveau typosquat ou un paquet de slopsquatting.
Exécuter pip-audit en CI
Il existe une GitHub Action officielle, pypa/gh-action-pip-audit, ou vous pouvez lancer la commande vous-même. Elle
se termine avec un code non nul lorsqu'elle trouve une vulnérabilité : un nouvel avis de sécurité peut donc faire échouer un build sans aucun changement de code.
- run: pip install -r requirements.txt pip-audit
- run: pip-audit
Auditez le même ensemble de dépendances que celui que vous livrez. Des requirements avec des versions exactes et des hashes donnent un résultat stable. Pour voir comment cela s'articule avec les autres contrôles, consultez où exécuter les scans SCA.
Ce que pip-audit ne couvre pas
- Votre code. Il analyse les arbres de dépendances, pas le code source. Pour cela, voir SAST vs SCA.
- Les bibliothèques natives. Les wheels Python embarquent souvent des bibliothèques C, et le projet indique qu'il ne détecte pas les vulnérabilités transitives dans les bibliothèques partagées non Python.
- Tout le reste du build. Votre image de base, les paquets système et les actions CI sont hors de son champ de vision.
- Les nouveaux paquets malveillants. Il se fonde sur les avis de sécurité connus.
- Le build qui a été livré. La résolution Python varie selon l'environnement : un audit sur une autre machine peut donc voir des versions différentes de celles de la release. Sans lockfile, l'ordre de résolution peut lui aussi varier.
pip-audit vs autres scanners Python
| Outil | Idéal pour | Remarque |
|---|---|---|
| pip-audit | Les dépendances Python, gratuitement | Python uniquement |
| Trivy, Grype | Les paquets Python dans une image de conteneur | Couvrent aussi les paquets du système d'exploitation |
| Outils SCA commerciaux | La politique et le workflow à l'échelle de nombreux langages et équipes | Voir les meilleurs outils SCA |
pip-audit et CRACI
pip-audit est un contrôle judicieux sur les pull requests. CRACI travaille de l'autre côté : en tant que runner GitHub Actions, il enregistre chaque paquet qu'un job a récupéré depuis PyPI et toute autre source, à tous les niveaux de l'arbre, dans une SBOM du build qui a produit la release. Il continue ensuite de vérifier cette SBOM à mesure que de nouvelles vulnérabilités sont publiées : vous savez donc si la release de l'an dernier est touchée. Voir les SBOM générées au build et la génération de SBOM au build.
pip-audit : questions fréquentes
Qu'est-ce que pip-audit ?
Un outil de la Python Packaging Authority qui analyse les environnements Python, les fichiers requirements et les projets à la recherche de paquets présentant des vulnérabilités connues.
Existe-t-il un npm audit pour Python ?
pip-audit est l'équivalent le plus proche, mais c'est un outil distinct et non une commande pip : vous devez donc l'installer vous-même.
Comment corriger les vulnérabilités trouvées par pip-audit ?
Lancez pip-audit --fix pour mettre à niveau les paquets vulnérables, ou d'abord --fix --dry-run pour voir ce qui changerait. Lancez ensuite vos tests et mettez à jour vos requirements épinglés.
Peut-on exécuter pip-audit sans risque sur du code non fiable ?
Non. Auditer un fichier requirements équivaut fonctionnellement à l'installer, et l'installation peut exécuter du code. N'auditez pas un paquet que vous n'installeriez pas.
pip-audit peut-il générer une SBOM ?
Oui. Il peut écrire du CycloneDX en JSON ou en XML. La SBOM décrit les dépendances Python qu'il a résolues, pas le reste de votre build.
Quelle base de vulnérabilités pip-audit utilise-t-il ?
Par défaut, l'API JSON de PyPI, qui s'appuie sur la Python Packaging Advisory Database. Il peut aussi utiliser OSV.
Voyez ce que votre build Python a récupéré
Exécutez un workflow GitHub Actions sur CRACI et obtenez une SBOM de chaque paquet que le job a réellement récupéré.
Réserver une démo