Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
pip-audit — Audite les environnements Python, les fichiers requirements et les arbres de dépendances pour les vulnérabilités de sécurité connues, et peut les corriger automatiquement | Kitploit
Outils/GitHubGitHub/pypa/pip-audit
Scanners de VulnérabilitésDevSecOpsDétection de SecretsSécurité de la Chaîne Logistique
GitHubpypa/pip-audit

pip-audit

Audite les environnements Python, les fichiers requirements et les arbres de dépendances pour les vulnérabilités de sécurité connues, et peut les corriger automatiquement

Voir le dépôt
1.3k1198il y a 7h 26mVérifié par Kitploit
Site web

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

pip-audit

CI PyPI version Packaging status OpenSSF Scorecard License

pip-audit est un outil pour analyser les environnements Python à la recherche de paquets présentant des vulnérabilités connues. Il utilise la Base de données d'avis Python Packaging Advisory Database (https://github.com/pypa/advisory-database) via l'API JSON PyPI comme source de rapports de vulnérabilité.

Ce projet est maintenu en partie par Trail of Bits avec le soutien de Google. Il ne s'agit pas d'un produit officiel de Google ou de Trail of Bits.

Index

  • Fonctionnalités
  • Installation
    • Paquets tiers
    • Actions GitHub
    • Support pre-commit
  • Utilisation
    • Variables d'environnement
    • Codes de sortie
    • Exécutions à blanc
  • Exemples
  • Dépannage
  • Astuces et conseils
  • Modèle de sécurité
  • Licence
  • Contribution
  • Code de conduite

Fonctionnalités

  • Prise en charge de l'audit des environnements locaux et des fichiers de type requirements
  • Prise en charge de multiples services de vulnérabilités (PyPI, OSV)
  • Prise en charge de l'émission de SBOMs au format XML ou JSON CycloneDX
  • Prise en charge de la correction automatique des dépendances vulnérables (--fix)
  • Formats de sortie lisibles par l'humain et par machine (colonne, Markdown, JSON)
  • Réutilisation transparente de vos caches pip locaux existants

Installation

pip-audit nécessite Python 3.10 ou plus récent, et peut être installé directement via pip :```bash python -m pip install pip-audit

root@kitploit:~
### Paquets tiers

Il existe plusieurs paquets **tiers** pour `pip-audit`. Les matrices et badges ci-dessous en listent quelques-uns :

[![Packaging status](https://repology.org/badge/vertical-allrepos/python:pip-audit.svg)](https://repology.org/project/python:pip-audit/versions)
[![Packaging status](https://repology.org/badge/vertical-allrepos/pip-audit.svg)](https://repology.org/project/pip-audit/versions)
[![Conda - Platform](https://img.shields.io/conda/pn/conda-forge/pip-audit?logo=anaconda&style=flat)][#conda-forge-package]
[![Conda (channel only)](https://img.shields.io/conda/vn/conda-forge/pip-audit?logo=anaconda&style=flat&color=orange)][#conda-forge-package]

[#conda-forge-package]: https://anaconda.org/conda-forge/pip-audit

En particulier, `pip-audit` peut être installé via `conda` :```bash
conda install -c conda-forge pip-audit

Les paquets tiers ne sont pas directement supportés par ce projet. Veuillez consulter la documentation de votre gestionnaire de paquets pour des instructions d'installation plus détaillées.

GitHub Actions

pip-audit a une action GitHub officielle !

Vous pouvez l'installer depuis le GitHub Marketplace, ou l'ajouter manuellement à votre CI :```yaml jobs: pip-audit: steps: - uses: pypa/[email protected] with: inputs: requirements.txt

root@kitploit:~
Voir la
[documentation de l'action](https://github.com/pypa/gh-action-pip-audit/blob/main/README.md)
pour plus de détails et des exemples d'utilisation.

### Support de `pre-commit`

`pip-audit` prend en charge [`pre-commit`](https://pre-commit.com/).

Par exemple, utiliser `pip-audit` via `pre-commit` pour auditer un fichier requirements :```yaml
  - repo: https://github.com/pypa/pip-audit
    rev: v2.10.1
    hooks:
      -   id: pip-audit
          args: ["-r", "requirements.txt"]

ci:
  # Leave pip-audit to only run locally and not in CI
  # pre-commit.ci does not allow network calls
  skip: [pip-audit]

Tous les arguments pip-audit documentés ci-dessous peuvent être passés.

Utilisation

Vous pouvez exécuter pip-audit en tant que programme autonome, ou via python -m:```bash pip-audit --help python -m pip_audit --help

root@kitploit:~
<!-- @begin-pip-audit-help@ -->```
usage: pip-audit [-h] [-V] [-l] [-r REQUIREMENT] [--locked] [-f FORMAT]
                 [-s SERVICE] [--osv-url OSV_URL] [-d] [-S]
                 [--desc [{on,off,auto}]] [--aliases [{on,off,auto}]]
                 [--cache-dir CACHE_DIR] [--progress-spinner {on,off}]
                 [--timeout TIMEOUT] [--path PATH] [-v] [--fix]
                 [--require-hashes] [--index-url INDEX_URL]
                 [--extra-index-url URL] [--skip-editable] [--no-deps]
                 [-o FILE] [--ignore-vuln ID] [--disable-pip]
                 [project_path]

audit the Python environment for dependencies with known vulnerabilities

positional arguments:
  project_path          audit a local Python project at the given path
                        (default: None)

options:
  -h, --help            show this help message and exit
  -V, --version         show program's version number and exit
  -l, --local           show only results for dependencies in the local
                        environment (default: False)
  -r REQUIREMENT, --requirement REQUIREMENT
                        audit the given requirements file; this option can be
                        used multiple times (default: None)
  --locked              audit lock files from the local Python project. This
                        flag only applies to auditing from project paths
                        (default: False)
  -f FORMAT, --format FORMAT
                        the format to emit audit results in (choices: columns,
                        json, cyclonedx-json, cyclonedx-xml, markdown)
                        (default: columns)
  -s SERVICE, --vulnerability-service SERVICE
                        the vulnerability service to audit dependencies
                        against (choices: osv, pypi, esms) (default: pypi)
  --osv-url OSV_URL     URL to use for the OSV API instead of the default
                        (default: https://api.osv.dev/v1/query)
  -d, --dry-run         without `--fix`: collect all dependencies but do not
                        perform the auditing step; with `--fix`: perform the
                        auditing step but do not perform any fixes (default:
                        False)
  -S, --strict          fail the entire audit if dependency collection fails
                        on any dependency (default: False)
  --desc [{on,off,auto}]
                        include a description for each vulnerability; `auto`
                        defaults to `on` for the `json` format. This flag has
                        no effect on the `cyclonedx-json` or `cyclonedx-xml`
                        formats. (default: auto)
  --aliases [{on,off,auto}]
                        includes alias IDs for each vulnerability; `auto`
                        defaults to `on` for the `json` format. This flag has
                        no effect on the `cyclonedx-json` or `cyclonedx-xml`
                        formats. (default: auto)
  --cache-dir CACHE_DIR
                        the directory to use as an HTTP cache for PyPI; uses
                        the `pip` HTTP cache by default (default: None)
  --progress-spinner {on,off}
                        display a progress spinner (default: on)
  --timeout TIMEOUT     set the socket timeout (default: 15)
  --path PATH           restrict to the specified installation path for
                        auditing packages; this option can be used multiple
                        times (default: [])
  -v, --verbose         run with additional debug logging; supply multiple
                        times to increase verbosity (default: 0)
  --fix                 automatically upgrade dependencies with known
                        vulnerabilities (default: False)
  --require-hashes      require a hash to check each requirement against, for
                        repeatable audits; this option is implied when any
                        package in a requirements file has a `--hash` option.
                        (default: False)
  --index-url INDEX_URL
                        base URL of the Python Package Index; this should
                        point to a repository compliant with PEP 503 (the
                        simple repository API); this will be resolved by pip
                        if not specified (default: None)
  --extra-index-url URL
                        extra URLs of package indexes to use in addition to
                        `--index-url`; should follow the same rules as
                        `--index-url` (default: [])
  --skip-editable       don't audit packages that are marked as editable
                        (default: False)
  --no-deps             don't perform any dependency resolution; requires all
                        requirements are pinned to an exact version (default:
                        False)
  -o FILE, --output FILE
                        output results to the given file (default: stdout)
  --ignore-vuln ID      ignore a specific vulnerability by its vulnerability
                        ID; this option can be used multiple times (default:
                        [])
  --disable-pip         don't use `pip` for dependency resolution; this can
                        only be used with hashed requirements files or if the
                        `--no-deps` flag has been provided (default: False)

Variables d'environnement

pip-audit permet aux utilisateurs de configurer certains indicateurs via des variables d'environnement plutôt :

OptionÉquivalent en variable d'environnementExemple
--formatPIP_AUDIT_FORMATPIP_AUDIT_FORMAT=markdown
--vulnerability-servicePIP_AUDIT_VULNERABILITY_SERVICEPIP_AUDIT_VULNERABILITY_SERVICE=osv
--descPIP_AUDIT_DESCPIP_AUDIT_DESC=off
--progress-spinnerPIP_AUDIT_PROGRESS_SPINNERPIP_AUDIT_PROGRESS_SPINNER=off
--outputPIP_AUDIT_OUTPUTPIP_AUDIT_OUTPUT=/tmp/example

Codes de sortie

À la fin, pip-audit se termine avec un code indiquant son état.

Les codes actuels sont :

  • 0 : Aucune vulnérabilité connue détectée.
  • 1 : Une ou plusieurs vulnérabilités connues ont été trouvées.

Le code de sortie de pip-audit ne peut pas être supprimé. Voir Supprimer les codes de sortie de pip-audit pour des alternatives prises en charge.

Exécutions à blanc

pip-audit prend en charge l'option --dry-run, qui peut être utilisée pour contrôler si une étape d'audit (ou de correction) est réellement effectuée.

  • Seul, pip-audit --dry-run ignore l'étape d'audit et affiche le nombre de dépendances qui auraient été auditées.
  • En mode correction, pip-audit --fix --dry-run effectue l'étape d'audit et affiche le comportement de correction (c'est-à-dire quelles dépendances seraient mises à niveau ou ignorées) qui aurait été effectué.

Exemples

Auditer les dépendances pour l'environnement Python actuel :```console $ pip-audit No known vulnerabilities found

root@kitploit:~
Auditer les dépendances pour un fichier requirements donné :```console
$ pip-audit -r ./requirements.txt
No known vulnerabilities found

Auditer les dépendances pour un fichier requirements, à l'exclusion des paquets système :```console $ pip-audit -r ./requirements.txt -l No known vulnerabilities found

root@kitploit:~
Auditer les dépendances d'un projet Python local :```console
$ pip-audit .
No known vulnerabilities found

Auditer les lockfiles pour un projet Python local :```console $ pip-audit --locked . No known vulnerabilities found

root@kitploit:~
`pip-audit` recherche divers fichiers de « projet » Python dans le chemin fourni.
Pour l'instant, seuls `pyproject.toml` et `pylock.*.toml` sont pris en charge.

Auditez les dépendances lorsque des vulnérabilités sont présentes :```console
$ pip-audit
Found 2 known vulnerabilities in 1 package
Name  Version ID             Fix Versions
----  ------- -------------- ------------
Flask 0.5     PYSEC-2019-179 1.0
Flask 0.5     PYSEC-2018-66  0.12.3

Auditer les dépendances, y compris les alias :```console $ pip-audit --aliases Found 2 known vulnerabilities in 1 package Name Version ID Fix Versions Aliases


Flask 0.5 PYSEC-2019-179 1.0 CVE-2019-1010083, GHSA-5wv5-4vpf-pj6m Flask 0.5 PYSEC-2018-66 0.12.3 CVE-2018-1000656, GHSA-562c-5r94-xh97

root@kitploit:~
Auditer les dépendances incluant les descriptions:```console
$ pip-audit --desc
Found 2 known vulnerabilities in 1 package
Name  Version ID             Fix Versions Description
----  ------- -------------- ------------ --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Flask 0.5     PYSEC-2019-179 1.0          The Pallets Project Flask before 1.0 is affected by: unexpected memory usage. The impact is: denial of service. The attack vector is: crafted encoded JSON data. The fixed version is: 1. NOTE: this may overlap CVE-2018-1000656.
Flask 0.5     PYSEC-2018-66  0.12.3       The Pallets Project flask version Before 0.12.3 contains a CWE-20: Improper Input Validation vulnerability in flask that can result in Large amount of memory usage possibly leading to denial of service. This attack appear to be exploitable via Attacker provides JSON data in incorrect encoding. This vulnerability appears to have been fixed in 0.12.3. NOTE: this may overlap CVE-2019-1010083.

Auditer les dépendances au format JSON :```console $ pip-audit -f json | python -m json.tool Found 2 known vulnerabilities in 1 package [ { "name": "flask", "version": "0.5", "vulns": [ { "id": "PYSEC-2019-179", "fix_versions": [ "1.0" ], "aliases": [ "CVE-2019-1010083", "GHSA-5wv5-4vpf-pj6m" ], "description": "The Pallets Project Flask before 1.0 is affected by: unexpected memory usage. The impact is: denial of service. The attack vector is: crafted encoded JSON data. The fixed version is: 1. NOTE: this may overlap CVE-2018-1000656." }, { "id": "PYSEC-2018-66", "fix_versions": [ "0.12.3" ], "aliases": [ "CVE-2018-1000656", "GHSA-562c-5r94-xh97" ], "description": "The Pallets Project flask version Before 0.12.3 contains a CWE-20: Improper Input Validation vulnerability in flask that can result in Large amount of memory usage possibly leading to denial of service. This attack appear to be exploitable via Attacker provides JSON data in incorrect encoding. This vulnerability appears to have been fixed in 0.12.3. NOTE: this may overlap CVE-2019-1010083." } ] }, { "name": "jinja2", "version": "3.0.2", "vulns": [] }, { "name": "pip", "version": "21.3.1", "vulns": [] }, { "name": "setuptools", "version": "57.4.0", "vulns": [] }, { "name": "werkzeug", "version": "2.0.2", "vulns": [] }, { "name": "markupsafe", "version": "2.0.1", "vulns": [] } ]

root@kitploit:~
Auditer et tenter de mettre à jour automatiquement les dépendances vulnérables :```console
$ pip-audit --fix
Found 2 known vulnerabilities in 1 package and fixed 2 vulnerabilities in 1 package
Name  Version ID             Fix Versions Applied Fix
----- ------- -------------- ------------ ----------------------------------------
flask 0.5     PYSEC-2019-179 1.0          Successfully upgraded flask (0.5 => 1.0)
flask 0.5     PYSEC-2018-66  0.12.3       Successfully upgraded flask (0.5 => 1.0)

Dépannage

Vous avez résolu un problème avec pip-audit ? Aidez-nous en contribuant à cette section !

pip-audit affiche des rapports de vulnérabilité non pertinents !

Dans un monde parfait, les flux de vulnérabilités auraient un rapport signal/bruit infini : chaque rapport de vulnérabilité serait (1) correct et (2) applicable à chaque utilisation de chaque dépendance.

Malheureusement, rien de tout cela n'est garanti : les flux de vulnérabilités ne sont pas à l'abri de rapports superflus ou de spam, et toutes les utilisations d'une dépendance particulière ne correspondent pas à toutes les classes potentielles de vulnérabilités.

Si vos exécutions de pip-audit produisent des rapports de vulnérabilité qui ne sont pas exploitables pour votre application ou cas d'utilisation particulier, vous pouvez utiliser l'option --ignore-vuln ID pour ignorer des rapports de vulnérabilité spécifiques. --ignore-vuln prend en charge les alias, vous pouvez donc utiliser un ID GHSA-xxx ou CVE-xxx au lieu d'un ID PYSEC-xxx si le rapport en question ne possède pas d'ID PYSEC.

Par exemple, voici comment ignorer GHSA-w596-4wvx-j9j6, qui est une source courante de rapports de vulnérabilité bruyants et de faux positifs pour les utilisateurs de pytest :```console

Run the audit as normal, but exclude any reports that match GHSA-w596-4wvx-j9j6

$ pip-audit --ignore-vuln GHSA-w596-4wvx-j9j6

root@kitploit:~
L'option `--ignore-vuln ID` fonctionne avec toutes les autres options de résolution de dépendances et d'audit, ce qui signifie qu'elle devrait fonctionner correctement avec les entrées de type requirements, les flux de vulnérabilités alternatifs, etc.

Elle peut également être passée plusieurs fois, pour ignorer plusieurs rapports :```console
# Run the audit as normal, but exclude any reports that match these IDs
$ pip-audit --ignore-vuln CVE-XXX-YYYY --ignore-vuln CVE-ZZZ-AAAA

pip-audit prend plus de temps que prévu !

Selon la façon dont vous l'utilisez, pip-audit peut devoir effectuer sa propre résolution des dépendances, ce qui peut prendre à peu près autant de temps que pip install pour un projet. Voir le modèle de sécurité pour une explication.

Vous avez deux options pour éviter la résolution des dépendances : auditer un environnement préinstallé, ou s'assurer que vos dépendances sont déjà entièrement résolues.

Si vous savez que vous avez déjà entièrement configuré un environnement équivalent à celui que pip-audit -r requirements.txt auditerait, vous pouvez simplement le réutiliser :```console

Note the absence of any "input" arguments, indicating that the environment is used.

$ pip-audit

Optionally filter out non-local packages, for virtual environments:

$ pip-audit --local

root@kitploit:~
Sinon, si votre entrée est entièrement épinglée (et éventuellement hachée), vous
pouvez dire à `pip-audit` d'ignorer la résolution des dépendances avec soit `--no-deps`
(épinglé sans hachages) soit `--require-hashes` (épinglé avec hachages).

Cette dernière est équivalente au [mode de vérification de hachage](https://pip.pypa.io/en/stable/cli/pip_install/#hash-checking-mode) de `pip` et est préférée, car elle offre une intégrité supplémentaire.```console
# fails if any dependency is not fully pinned
$ pip-audit --no-deps -r requirements.txt

# fails if any dependency is not fully pinned *or* is missing hashes
$ pip-audit --require-hashes -r requirements.txt

pip-audit ne peut pas s'authentifier à mon index tiers !

Index tiers authentifiés ou index privés

pip-audit prend en charge --index-url et --extra-index-url pour configurer des index de paquets alternatifs ou supplémentaires, tout comme pip.

Lorsqu'ils sont non authentifiés, ces indices devraient fonctionner comme prévu. Cependant, lorsqu'un index tiers nécessite une authentification, pip-audit a quelques restrictions supplémentaires par rapport à pip normal :

  • L'authentification interactive n'est pas prise en charge. En d'autres termes : pip-audit ne vous demandera pas de nom d'utilisateur/mot de passe pour l'index.
  • L'authentification par keyring de pip est prise en charge, mais de manière limitée : pip-audit utilise le fournisseur de keyring subprocess, car les audits ont lieu dans des environnements virtuels isolés. Le fournisseur subprocess est lui-même soumis à des restrictions supplémentaires (comme un nom d'utilisateur obligatoire) ; la documentation de pip les explique en détail.

En plus de ce qui précède, certains index tiers ont des noms d'utilisateur obligatoires et codés en dur. Par exemple, pour Google Artifact Registry, le nom d'utilisateur codé en dur est oauth2accesstoken. Voir #742 et pip#11971 pour plus de contexte.

Trucs et astuces

Exécution sur un projet pipenv

pipenv utilise à la fois un fichier Pipfile et Pipfile.lock pour suivre et figer les dépendances au lieu d'un fichier requirements.txt. pip-audit ne peut pas traiter directement les fichiers Pipfile[.lock], mais ceux-ci peuvent être convertis en un fichier requirements.txt pris en charge que pip-audit peut analyser. pipenv dispose d'une commande intégrée pour convertir les dépendances en fichier requirements.txt (depuis la v2022.4.8) :```console $ pipenv run pip-audit -r <(pipenv requirements)

root@kitploit:~
### Suppression des codes de sortie de `pip-audit`

`pip-audit` ne supporte intentionnellement pas la suppression interne de ses propres codes de sortie.

Les utilisateurs qui ont besoin de supprimer un appel `pip-audit` en échec peuvent utiliser l'un des idiomes shell standard pour ce faire :```bash
pip-audit || true

ou, pour quitter complètement :```bash pip-audit || exit 0

root@kitploit:~
Le code de sortie peut également être capturé et géré explicitement :```bash
pip-audit
exitcode="${?}"
# do something with ${exitcode}

Consultez Codes de sortie pour une liste des codes potentiels qui nécessitent une gestion.

Signaler uniquement les vulnérabilités corrigibles

Dans les workflows de développement, vous pouvez souhaiter ignorer les vulnérabilités qui n'ont pas encore été corrigées et ne les examiner que lors de votre processus de publication. pip-audit ne prend pas en charge l'ignorance des vulnérabilités non corrigées. Cependant, vous pouvez exporter sa sortie au format JSON et la traiter en externe. Par exemple, si vous voulez quitter avec un code non nul uniquement lorsque les vulnérabilités détectées ont des versions de correctif connues, vous pouvez traiter la sortie en utilisant jq comme suit :```shell test -z "$(pip-audit -r requirements.txt --format=json 2>/dev/null | jq '.dependencies[].vulns[].fix_versions[]')"

root@kitploit:~
Un exemple simple (et inefficace) d'utilisation de cette méthode serait:```shell
test -z "$(pip-audit -r requirements.txt --format=json 2>/dev/null | jq '.dependencies[].vulns[].fix_versions[]')" || pip-audit -r requirements.txt

which runs pip-audit as usual and exits with a non-zero code only if there are fixed versions for the known vulnerabilities.

Security Model

This section exists to describe the security assumptions you can and must not make when using pip-audit.

TL;DR: If you wouldn't pip install it, you should not pip audit it.

pip-audit is a tool for auditing Python environments for packages with known vulnerabilities. A "known vulnerability" is a publicly reported flaw in a package that, if uncorrected, might allow a malicious actor to perform unintended actions.

pip-audit can protect you against known vulnerabilities by telling you when you have them, and how you should upgrade them. For example, if you have somepackage==1.2.3 in your environment, pip-audit can tell you that it needs to be upgraded to 1.2.4.

You can assume that pip-audit will make a best effort to fully resolve all of your Python dependencies and either fully audit each or explicitly state which ones it has skipped, as well as why it has skipped them.

pip-audit is not a static code analyzer. It analyzes dependency trees, not code, and it cannot guarantee that arbitrary dependency resolutions occur statically. To understand why this is, refer to Dustin Ingram's excellent post on dependency resolution in Python.

As such: you must not assume that pip-audit will defend you against malicious packages. In particular, it is incorrect to treat pip-audit -r INPUT as a "more secure" variant of pip-audit. For all intents and purposes, pip-audit -r INPUT is functionally equivalent to pip install -r INPUT, with a small amount of non-security isolation to avoid conflicts with any of your local environments.

pip-audit is first and foremost an auditing tool for Python packages. You must not assume that pip-audit will detect or flag "transitive" vulnerabilities that might be exposed through Python packages, but are not actually part of the package itself. For example, pip-audit's vulnerability information sources are unlikely to include an advisory for a vulnerable shared library that a popular Python package might use, since the Python package's version is not strongly connected to the shared library's version.

Licensing

pip-audit is licensed under the Apache 2.0 License.

pip-audit reuses and modifies examples from resolvelib, which is licensed under the ISC license.

Contributing

See the contributing docs for details.

Code of Conduct

Everyone interacting with this project is expected to follow the PSF Code of Conduct.

Télécharger l’outil