Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
pip-audit — Аудитирует окружения Python, файлы требований и деревья зависимостей на предмет известных уязвимостей безопасности, и может автоматически их исправлять. | Kitploit
Инструменты/GitHubGitHub/pypa/pip-audit
Сканеры уязвимостейDevSecOpsОбнаружение СекретовБезопасность Цепочки Поставок
GitHubpypa/pip-audit

pip-audit

Аудитирует окружения Python, файлы требований и деревья зависимостей на предмет известных уязвимостей безопасности, и может автоматически их исправлять.

Репозиторий
1.3k11988 ч 22 мин назадПроверено Kitploit
Сайт

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

pip-audit

CI PyPI version Packaging status OpenSSF Scorecard License

pip-audit — это инструмент для сканирования сред Python на наличие пакетов с известными уязвимостями. Он использует базу данных рекомендаций Python Packaging Advisory Database (https://github.com/pypa/advisory-database) через PyPI JSON API в качестве источника отчётов об уязвимостях.

Этот проект поддерживается при участии Trail of Bits при поддержке Google. Это не официальный продукт Google или Trail of Bits.

Содержание

  • Возможности
  • Установка
    • Сторонние пакеты
    • GitHub Actions
    • Поддержка pre-commit
  • Использование
    • Переменные окружения
    • Коды выхода
    • Холостые прогоны
  • Примеры
  • Устранение неполадок
  • Советы и рекомендации
  • Модель безопасности
  • Лицензирование
  • Участие в разработке
  • Кодекс поведения

Возможности

  • Аудит локальных сред и файлов в стиле requirements
  • Поддержка нескольких сервисов уязвимостей (PyPI, OSV)
  • Возможность генерации SBOM в формате CycloneDX XML или JSON
  • Поддержка автоматического исправления уязвимых зависимостей (--fix)
  • Человеко- и машиночитаемые форматы вывода (табличный, Markdown, JSON)
  • Бесшовное повторное использование существующих локальных кэшей pip

Установка

pip-audit требует Python 3.10 или новее и может быть установлен напрямую через pip:```bash python -m pip install pip-audit

root@kitploit:~
### Сторонние пакеты

Существует несколько **сторонних** пакетов для `pip-audit`. Матрицы и значки ниже перечисляют некоторые из них:

[![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

В частности, `pip-audit` можно установить через `conda`:```bash
conda install -c conda-forge pip-audit

Сторонние пакеты не поддерживаются напрямую этим проектом. Для получения более подробных инструкций по установке обратитесь к документации вашего менеджера пакетов.

GitHub Actions

pip-audit имеет официальное действие GitHub Actions!

Вы можете установить его из GitHub Marketplace или добавить его в ваш CI вручную:```yaml jobs: pip-audit: steps: - uses: pypa/[email protected] with: inputs: requirements.txt

root@kitploit:~
См.
[документацию action](https://github.com/pypa/gh-action-pip-audit/blob/main/README.md)
для получения дополнительных сведений и примеров использования.

### Поддержка `pre-commit`

`pip-audit` имеет поддержку [`pre-commit`](https://pre-commit.com/).

Например, использование `pip-audit` через `pre-commit` для аудита файла зависимостей:```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]

Любые аргументы pip-audit, описанные ниже, могут быть переданы.

Использование

Вы можете запустить pip-audit как отдельную программу или через 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)

Переменные окружения

pip-audit позволяет пользователям настраивать некоторые флаги с помощью переменных окружения:

ФлагЭквивалент в переменной окруженияПример
--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

Коды завершения

По завершении pip-audit завершает работу с кодом, указывающим на его статус.

Текущие коды:

  • 0: Известных уязвимостей не обнаружено.
  • 1: Обнаружена одна или несколько известных уязвимостей.

Код завершения pip-audit не может быть подавлен. Смотрите Подавление кодов завершения pip-audit для поддерживаемых альтернатив.

Пробные прогоны

pip-audit поддерживает флаг --dry-run, который можно использовать для управления тем, будет ли фактически выполнен шаг аудита (или исправления).

  • При использовании отдельно pip-audit --dry-run пропускает шаг аудита и выводит количество зависимостей, которые были бы проверены.
  • В режиме исправления pip-audit --fix --dry-run выполняет шаг аудита и выводит поведение исправления (т.е. какие зависимости были бы обновлены или пропущены), которое было бы выполнено.

Примеры

Аудит зависимостей для текущего окружения Python:```console $ pip-audit No known vulnerabilities found

root@kitploit:~
Аудит зависимостей для указанного файла requirements:```console
$ pip-audit -r ./requirements.txt
No known vulnerabilities found

Аудит зависимостей для файла requirements, исключая системные пакеты:```console $ pip-audit -r ./requirements.txt -l No known vulnerabilities found

root@kitploit:~
Проверьте зависимости для локального Python-проекта:```console
$ pip-audit .
No known vulnerabilities found

Аудит lockfiles для локального Python проекта:```console $ pip-audit --locked . No known vulnerabilities found

root@kitploit:~
`pip-audit` ищет в указанном пути различные файлы проектов Python.
На данный момент поддерживаются только `pyproject.toml` и `pylock.*.toml`.

Аудит зависимостей при наличии уязвимостей:```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

Проверка зависимостей, включая псевдонимы:```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:~
Аудит зависимостей, включая описания:```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.

Аудит зависимостей в формате 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:~
Аудит и попытка автоматического обновления уязвимых зависимостей:```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)

Устранение неполадок

Вы решили проблему с pip-audit? Помогите нам, дополнив этот раздел!

pip-audit показывает нерелевантные отчёты об уязвимостях!

В идеальном мире каналы уязвимостей имели бы бесконечное отношение сигнал/шум: каждый отчёт об уязвимости был бы (1) правильным и (2) применимым к любому использованию любой зависимости.

К сожалению, ни то, ни другое не гарантируется: каналы уязвимостей не застрахованы от посторонних или спам-отчётов, и не все случаи использования конкретной зависимости соответствуют всем потенциальным классам уязвимостей.

Если ваши запуски pip-audit создают отчёты об уязвимостях, которые не являются действенными для вашего конкретного приложения или сценария использования, вы можете использовать опцию --ignore-vuln ID, чтобы игнорировать определённые отчёты об уязвимостях. --ignore-vuln поддерживает псевдонимы, поэтому вы можете использовать идентификатор GHSA-xxx или CVE-xxx вместо идентификатора PYSEC-xxx, если в соответствующем отчёте нет идентификатора PYSEC.

Например, вот как можно игнорировать GHSA-w596-4wvx-j9j6, который является частым источником шумных отчётов об уязвимостях и ложных срабатываний для пользователей 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:~
Опция `--ignore-vuln ID` работает со всеми остальными опциями разрешения зависимостей и аудита, то есть она должна корректно функционировать с входами в стиле требований, альтернативными каналами уязвимостей и так далее.

Её также можно передавать несколько раз, чтобы игнорировать несколько отчетов:```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 работает дольше, чем я ожидаю!

В зависимости от того, как вы его используете, pip-audit может выполнять собственное разрешение зависимостей, что может занимать примерно столько же времени, сколько pip install для проекта. Объяснение см. в разделе модель безопасности.

У вас есть два варианта, чтобы избежать разрешения зависимостей: аудит предварительно установленного окружения или убедитесь, что ваши зависимости уже полностью разрешены.

Если вы знаете, что уже полностью настроили окружение, эквивалентное тому, которое pip-audit -r requirements.txt будет проверять, вы можете просто повторно использовать его:```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:~
В качестве альтернативы, если ваш входной файл полностью зафиксирован (и, опционально, захэширован), вы можете указать `pip-audit` пропустить разрешение зависимостей, используя либо `--no-deps` (зафиксировано без хешей) или `--require-hashes` (зафиксировано с хешами).

Последнее эквивалентно `pip`'s [режиму проверки хешей](https://pip.pypa.io/en/stable/cli/pip_install/#hash-checking-mode) и является предпочтительным, так как обеспечивает дополнительную целостность.```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 не может пройти аутентификацию для моего стороннего индекса!

Аутентифицированные сторонние или частные индексы

pip-audit поддерживает --index-url и --extra-index-url для настройки альтернативных или дополнительных индексов пакетов, так же как pip.

При неаутентифицированном доступе эти индексы должны работать как ожидается. Однако, когда сторонний индекс требует аутентификации, pip-audit имеет несколько дополнительных ограничений поверх обычного pip:

  • Интерактивная аутентификация не поддерживается. Другими словами: pip-audit не будет запрашивать у вас имя пользователя/пароль для индекса.
  • pip's keyring authentication поддерживается, но ограниченно: pip-audit использует провайдера keyring на основе subprocess, поскольку аудиты выполняются в изолированных виртуальных окружениях. Провайдер subprocess в свою очередь подчиняется дополнительным ограничениям (таким как требование имени пользователя); документация pip объясняет это подробно.

В дополнение к вышесказанному, некоторые сторонние индексы имеют обязательные, жестко заданные имена пользователей. Например, для Google Artifact Registry жестко заданное имя пользователя — oauth2accesstoken. См. #742 и pip#11971 для дополнительного контекста.

Советы и рекомендации

Запуск для проекта pipenv

pipenv использует файлы Pipfile и Pipfile.lock для отслеживания и фиксации зависимостей вместо файла requirements.txt. pip-audit не может обрабатывать файлы Pipfile[.lock] напрямую, однако их можно преобразовать в поддерживаемый файл requirements.txt, с которым может работать pip-audit. pipenv имеет встроенную команду для преобразования зависимостей в файл requirements.txt (начиная с v2022.4.8):```console $ pipenv run pip-audit -r <(pipenv requirements)

root@kitploit:~
### Подавление кодов возврата из `pip-audit`

`pip-audit` намеренно не поддерживает внутреннее подавление своих собственных
кодов возврата.

Пользователи, которым необходимо подавить неудачный вызов `pip-audit`, могут использовать
один из стандартных идиом оболочки для этого:```bash
pip-audit || true

или, чтобы полностью выйти:```bash pip-audit || exit 0

root@kitploit:~
Код выхода также можно перехватить и обработать явно:```bash
pip-audit
exitcode="${?}"
# do something with ${exitcode}

См. Коды выхода для списка потенциальных кодов, требующих обработки.

Отчет только об исправляемых уязвимостях

В рабочих процессах разработки может потребоваться игнорировать уязвимости, которые еще не устранены, и исследовать их только в процессе релиза. pip-audit не поддерживает игнорирование неисправленных уязвимостей. Однако вы можете экспортировать его вывод в формате JSON и обрабатывать его внешне. Например, если вы хотите выйти с ненулевым кодом только при обнаружении уязвимостей с известными версиями исправлений, вы можете обработать вывод с помощью jq следующим образом:```shell test -z "$(pip-audit -r requirements.txt --format=json 2>/dev/null | jq '.dependencies[].vulns[].fix_versions[]')"

root@kitploit:~
Простым (и неэффективным) примером использования этого метода будет:```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.

Скачать инструмент