Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
pip-audit — Audita entornos Python, archivos de requisitos y árboles de dependencias en busca de vulnerabilidades de seguridad conocidas, y puede corregirlas automáticamente. | Kitploit
Herramientas/GitHubGitHub/pypa/pip-audit
Escáneres de VulnerabilidadesDevSecOpsDetección de SecretosSeguridad de Cadena de Suministro
GitHubpypa/pip-audit

pip-audit

Audita entornos Python, archivos de requisitos y árboles de dependencias en busca de vulnerabilidades de seguridad conocidas, y puede corregirlas automáticamente.

Ver Repositorio
1.3k119hace 7 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Sitio web

pip-audit

CI PyPI version Packaging status OpenSSF Scorecard License

pip-audit es una herramienta para escanear entornos Python en busca de paquetes con vulnerabilidades conocidas. Utiliza la Base de Datos de Asesoramiento de Empaquetado de Python (https://github.com/pypa/advisory-database) a través de la API JSON de PyPI como fuente de informes de vulnerabilidades.

Este proyecto es mantenido en parte por Trail of Bits con el apoyo de Google. Esto no es un producto oficial de Google ni de Trail of Bits.

Índice

  • Características
  • Instalación
    • Paquetes de terceros
    • Acciones de GitHub
    • Soporte para pre-commit
  • Uso
    • Variables de entorno
    • Códigos de salida
    • Ejecuciones de prueba
  • Ejemplos
  • Solución de problemas
  • Consejos y trucos
  • Modelo de seguridad
  • Licencia
  • Contribuir
  • Código de conducta

Características

  • Soporte para auditar entornos locales y archivos de estilo requisitos
  • Soporte para múltiples servicios de vulnerabilidades (PyPI, OSV)
  • Soporte para emitir SBOMs en CycloneDX XML o JSON
  • Soporte para corregir automáticamente dependencias vulnerables (--fix)
  • Formatos de salida legibles por humanos y por máquina (columnar, Markdown, JSON)
  • Reutiliza sin problemas sus cachés locales existentes de pip

Instalación

pip-audit requiere Python 3.10 o superior, y se puede instalar directamente mediante pip:```bash python -m pip install pip-audit

root@kitploit:~
### Paquetes de terceros

Existen múltiples paquetes **de terceros** para `pip-audit`. Las matrices e insignias a continuación listan algunos de ellos:

[![Estado del empaquetado](https://repology.org/badge/vertical-allrepos/python:pip-audit.svg)](https://repology.org/project/python:pip-audit/versions)
[![Estado del empaquetado](https://repology.org/badge/vertical-allrepos/pip-audit.svg)](https://repology.org/project/pip-audit/versions)
[![Conda - Plataforma](https://assets.kitploit.com/production/public/readmes/placeholders/f0fc86cfe65f76d40e15aaec61704ec8220a56dc89d4be03c46f67cb31b9fa8c.svg)][#conda-forge-package]
[![Conda (solo canal)](https://assets.kitploit.com/production/public/readmes/placeholders/f0fc86cfe65f76d40e15aaec61704ec8220a56dc89d4be03c46f67cb31b9fa8c.svg)][#conda-forge-package]

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

En particular, `pip-audit` puede instalarse mediante `conda`:```bash
conda install -c conda-forge pip-audit

Los paquetes de terceros no son compatibles directamente con este proyecto. Consulte la documentación de su gestor de paquetes para obtener instrucciones de instalación más detalladas.

GitHub Actions

pip-audit tiene una Acción de GitHub oficial!

Puede instalarla desde el Marketplace de GitHub, o agregarla manualmente a su CI:```yaml jobs: pip-audit: steps: - uses: pypa/[email protected] with: inputs: requirements.txt

root@kitploit:~
Consulte la
[documentación de la acción](https://github.com/pypa/gh-action-pip-audit/blob/main/README.md)
para más detalles y ejemplos de uso.

### Soporte de `pre-commit`

`pip-audit` tiene soporte para [`pre-commit`](https://pre-commit.com/).

Por ejemplo, usando `pip-audit` a través de `pre-commit` para auditar un archivo de requisitos:```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]

Cualquier argumento de pip-audit documentado a continuación puede ser pasado.

Uso

Puede ejecutar pip-audit como un programa independiente, o mediante 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 de entorno

pip-audit permite a los usuarios configurar algunas opciones mediante variables de entorno en su lugar:

Códigos de salida

Al finalizar, pip-audit saldrá con un código indicando su estado.

Los códigos actuales son:

  • 0: No se detectaron vulnerabilidades conocidas.
  • 1: Se encontraron una o más vulnerabilidades conocidas.

El código de salida de pip-audit no se puede suprimir. Vea Supresión de códigos de salida de pip-audit para alternativas compatibles.

Pruebas en seco (dry runs)

pip-audit admite la bandera --dry-run, que se puede usar para controlar si se realiza realmente un paso de auditoría (o corrección).

  • Por sí solo, pip-audit --dry-run omite el paso de auditoría e imprime el número de dependencias que habrían sido auditadas.
  • En modo de corrección, pip-audit --fix --dry-run realiza el paso de auditoría e imprime el comportamiento de corrección (es decir, qué dependencias se actualizarían o saltarían) que se habría realizado.

Ejemplos

Auditar dependencias para el entorno actual de Python:```console $ pip-audit No known vulnerabilities found

root@kitploit:~
Auditar dependencias para un archivo de requisitos dado:```console
$ pip-audit -r ./requirements.txt
No known vulnerabilities found

Auditar dependencias para un archivo de requirements, excluyendo paquetes del sistema:```console $ pip-audit -r ./requirements.txt -l No known vulnerabilities found

root@kitploit:~
Auditar dependencias para un proyecto local de Python:```console
$ pip-audit .
No known vulnerabilities found

Auditar archivos de bloqueo para un proyecto local de Python:```console $ pip-audit --locked . No known vulnerabilities found

root@kitploit:~
`pip-audit` busca en la ruta proporcionada varios archivos de "proyecto" de Python.
Por el momento, solo se admiten `pyproject.toml` y `pylock.*.toml`.

Auditar dependencias cuando haya vulnerabilidades presentes:```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

Auditar dependencias incluyendo 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:~
Auditar dependencias incluyendo descripciones:```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.

Auditar dependencias en formato 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:~
Auditar e intentar actualizar automáticamente las dependencias vulnerables:```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)

Solución de problemas

¿Has resuelto un problema con pip-audit? ¡Ayúdanos contribuyendo a esta sección!

pip-audit muestra informes de vulnerabilidades irrelevantes

En un mundo perfecto, los feeds de vulnerabilidades tendrían una relación señal/ruido infinita: cada informe de vulnerabilidad sería (1) correcto y (2) aplicable a cada uso de cada dependencia.

Desafortunadamente, ninguna de estas garantías se cumple: los feeds de vulnerabilidades no son inmunes a informes extraños o de spam, y no todos los usos de una dependencia particular se corresponden con todas las clases potenciales de vulnerabilidades.

Si tus ejecuciones de pip-audit generan informes de vulnerabilidades que no son accionables para tu aplicación o caso de uso particular, puedes usar la opción --ignore-vuln ID para ignorar informes de vulnerabilidades específicos. --ignore-vuln soporta alias, por lo que puedes usar un ID GHSA-xxx o CVE-xxx en lugar de un ID PYSEC-xxx si el informe en cuestión no tiene un ID PYSEC.

Por ejemplo, así es como podrías ignorar GHSA-w596-4wvx-j9j6, que es una fuente común de informes de vulnerabilidades ruidosos y falsos positivos para los usuarios 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:~
La opción `--ignore-vuln ID` funciona con todas las demás opciones de resolución de dependencias y auditoría, lo que significa que debería funcionar correctamente con entradas estilo requirements, fuentes de vulnerabilidades alternativas, etc.

También se puede pasar varias veces para ignorar múltiples informes:

``````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 toma más tiempo del que espero!

Dependiendo de cómo lo estés usando, pip-audit puede tener que realizar su propia resolución de dependencias, que puede tomar aproximadamente el mismo tiempo que pip install para un proyecto. Consulta el modelo de seguridad para obtener una explicación.

Tienes dos opciones para evitar la resolución de dependencias: auditar un entorno preinstalado, o asegurarte de que tus dependencias ya estén completamente resueltas.

Si sabes que ya has configurado completamente un entorno equivalente al que pip-audit -r requirements.txt auditaría, simplemente puedes reutilizarlo:```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:~
Alternativamente, si su entrada está completamente fijada (y opcionalmente con hash), puede indicarle a `pip-audit` que omita la resolución de dependencias con `--no-deps` (fijado sin hashes) o `--require-hashes` (fijado incluyendo hashes).

Esta última opción es equivalente al [modo de verificación de hash](https://pip.pypa.io/en/stable/cli/pip_install/#hash-checking-mode) de `pip` y es preferida, ya que ofrece integridad adicional.```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 no puede autenticarse en mi índice de terceros!

Índices de terceros o privados autenticados

pip-audit admite --index-url y --extra-index-url para configurar índices de paquetes alternativos o suplementarios, al igual que pip.

Cuando no están autenticados, estos índices deberían funcionar como se espera. Sin embargo, cuando un índice de terceros requiere autenticación, pip-audit tiene algunas restricciones adicionales además de las de pip normal:

  • La autenticación interactiva no está soportada. En otras palabras: pip-audit no le solicitará un nombre de usuario/contraseña para el índice.
  • La autenticación keyring de pip está soportada, pero de forma limitada: pip-audit utiliza el proveedor de llavero subprocess, ya que las auditorías ocurren en entornos virtuales aislados. El proveedor subprocess a su vez está sujeto a restricciones adicionales (como un nombre de usuario obligatorio); la documentación de pip explica esto en profundidad.

Además de lo anterior, algunos índices de terceros tienen nombres de usuario obligatorios y codificados. Por ejemplo, para Google Artifact Registry, el nombre de usuario codificado es oauth2accesstoken. Consulte #742 y pip#11971 para obtener más contexto.

Consejos y Trucos

Ejecutar contra un proyecto pipenv

pipenv utiliza tanto un archivo Pipfile como Pipfile.lock para rastrear y congelar dependencias en lugar de un archivo requirements.txt. pip-audit no puede procesar los archivos Pipfile[.lock] directamente, sin embargo, estos se pueden convertir a un archivo requirements.txt compatible contra el que pip-audit pueda ejecutarse. pipenv tiene un comando integrado para convertir dependencias a un archivo requirements.txt (a partir de v2022.4.8):```console $ pipenv run pip-audit -r <(pipenv requirements)

root@kitploit:~
### Suprimir códigos de salida de `pip-audit`

`pip-audit` no admite intencionadamente la supresión interna de sus propios códigos de salida.

Los usuarios que necesiten suprimir una invocación fallida de `pip-audit` pueden usar uno de los modismos estándar del shell para hacerlo:```bash
pip-audit || true

o, para salir completamente:```bash pip-audit || exit 0

root@kitploit:~
El código de salida también puede ser capturado y manejado explícitamente:```bash
pip-audit
exitcode="${?}"
# do something with ${exitcode}

Consulte Códigos de salida para obtener una lista de posibles códigos que requieren manejo.

Reportar solo vulnerabilidades solucionables

En los flujos de trabajo de desarrollo, es posible que desee ignorar las vulnerabilidades que aún no se han solucionado y solo investigarlas en su proceso de lanzamiento. pip-audit no admite ignorar vulnerabilidades no corregidas. Sin embargo, puede exportar su salida en formato JSON y procesarla externamente. Por ejemplo, si desea salir con un código distinto de cero solo cuando las vulnerabilidades detectadas tienen versiones de corrección conocidas, puede procesar la salida usando jq como:```shell test -z "$(pip-audit -r requirements.txt --format=json 2>/dev/null | jq '.dependencies[].vulns[].fix_versions[]')"

root@kitploit:~
Un ejemplo simple (e ineficiente) de usar este método sería:```shell
test -z "$(pip-audit -r requirements.txt --format=json 2>/dev/null | jq '.dependencies[].vulns[].fix_versions[]')" || pip-audit -r requirements.txt

que ejecuta pip-audit como de costumbre y sale con un código distinto de cero solo si hay versiones corregidas para las vulnerabilidades conocidas.

Modelo de Seguridad

Esta sección existe para describir las suposiciones de seguridad que puedes y no debes hacer al usar pip-audit.

TL;DR: Si no lo instalarías con pip install, no deberías auditarlo con pip audit.

pip-audit es una herramienta para auditar entornos Python en busca de paquetes con vulnerabilidades conocidas. Una "vulnerabilidad conocida" es un fallo reportado públicamente en un paquete que, si no se corrige, podría permitir que un actor malicioso realice acciones no deseadas.

pip-audit puede protegerte contra vulnerabilidades conocidas informándote cuándo las tienes y cómo deberías actualizarlas. Por ejemplo, si tienes somepackage==1.2.3 en tu entorno, pip-audit puede decirte que necesita actualizarse a 1.2.4.

Puedes asumir que pip-audit hará el mejor esfuerzo para resolver completamente todas tus dependencias Python y ya sea auditar completamente cada una o indicar explícitamente cuáles ha omitido, así como por qué las ha omitido.

pip-audit no es un analizador de código estático. Analiza árboles de dependencias, no código, y no puede garantizar que resoluciones de dependencias arbitrarias ocurran estáticamente. Para entender por qué es así, consulta la excelente publicación de Dustin Ingram sobre la resolución de dependencias en Python.

Por lo tanto: no debes asumir que pip-audit te defenderá contra paquetes maliciosos. En particular, es incorrecto tratar pip-audit -r INPUT como una variante "más segura" de pip-audit. A todos los efectos, pip-audit -r INPUT es funcionalmente equivalente a pip install -r INPUT, con una pequeña cantidad de aislamiento no relacionado con la seguridad para evitar conflictos con cualquiera de tus entornos locales.

pip-audit es ante todo una herramienta de auditoría para paquetes Python. No debes asumir que pip-audit detectará o marcará vulnerabilidades "transitivas" que podrían exponerse a través de paquetes Python, pero que en realidad no son parte del paquete en sí. Por ejemplo, es poco probable que las fuentes de información de vulnerabilidades de pip-audit incluyan un aviso sobre una biblioteca compartida vulnerable que un paquete Python popular podría usar, ya que la versión del paquete Python no está fuertemente relacionada con la versión de la biblioteca compartida.

Licencia

pip-audit está bajo la licencia Apache 2.0.

pip-audit reutiliza y modifica ejemplos de resolvelib, el cual está bajo la licencia ISC.

Contribuir

Consulta la documentación de contribución para más detalles.

Código de Conducta

Se espera que todos los que interactúen con este proyecto sigan el Código de Conducta de la PSF.

Descargar herramienta
BanderasEquivalente de entornoEjemplo
--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