Dependency Auditor
Аудитор зависимостей и supply-chain безопасности Python-проектов. Цель — найти уязвимые,
устаревшие, заброшенные и плохо запиненные пакеты, оценить риск и помочь обновить их
безопасно: по semver, с чтением breaking changes, прогоном тестов и возможностью отката.
По итогу — отчёт с уровнями риска и (по согласованию) конкретные правки.
Когда применять
Перед релизом/деплоем, при алерте Dependabot/CVE, при ревью изменений в requirements*.txt/
pyproject.toml/lockfile, при настройке воспроизводимых сборок, при плановом обновлении.
Для общего аудита проекта см. python-project-audit; этот навык — только про зависимости.
Контекст — установить ПЕРВЫМ делом
- Менеджер пакетов: uv, pip (+ pip-tools), poetry. Определяет lockfile и команды апгрейда.
- Источник истины зависимостей:
pyproject.toml, requirements.txt/requirements.in,
uv.lock/poetry.lock. Есть ли вообще lockfile и хеши.
- Окружение: прод vs dev/test; отделены ли dev-зависимости (
--extra/--group/[dev]).
- Есть ли тесты и CI: можно ли проверить апгрейд прогоном (см.
test-coverage-auditor).
Процесс
- Инвентаризация. Собрать манифесты и lockfiles, зафиксировать активный менеджер,
получить полное дерево:
uv pip list / pip list, uv tree / pipdeptree / poetry show --tree.
- Скан уязвимостей.
pip-audit (и при наличии — safety scan); читать severity и
fix-версии. См. references/scanning.md.
- Проверка пиннинга/lockfile. Запинено ли, есть ли хеши, разделены ли prod/dev,
воспроизводима ли установка. См. references/pinning-lockfiles.md.
- Устаревшие/заброшенные.
pip list --outdated / uv tree --outdated; оценить заброшенность
и typosquatting (см. scanning.md).
- Классифицировать по риску, объяснить почему опасно именно здесь.
- План безопасного апгрейда по references/upgrades.md.
- Отчёт по references/output-format.md. По согласованию — правки.
Уровни риска
- CRITICAL — известная уязвимость с эксплойтом/RCE/утечкой в прод-зависимости при
наличии fix-версии; явный typosquat/скомпрометированный пакет в зависимостях.
- HIGH — CVE средней/высокой severity в прод-пути; нет lockfile вообще при деплое на прод;
установка из непиннутого диапазона (невоспроизводимый прод); заброшенный прод-пакет с
открытой уязвимостью без патча.
- MEDIUM — CVE только в dev/test-зависимостях; устаревший на мажор пакет без known-CVE;
prod и dev не разделены; lockfile без хешей; сильно отставшие, но не уязвимые пакеты.
- LOW — мелкие апдейты в пределах patch/minor, стиль пиннинга, отсутствие проверки лицензий.
Быстрый чеклист
- Прогонялся
pip-audit (и safety)? Есть ли CVE с доступным fix? Прод или только dev?
- Есть lockfile (
uv.lock/poetry.lock/requirements.txt с хешами) и он закоммичен?
- Установка воспроизводима:
uv sync --frozen / pip install --require-hashes / poetry install?
- Прямые прод-зависимости запинены осознанно (не голый
*, не случайный latest)?
- Dev/test отделены от прода (
--group dev / [project.optional-dependencies] / requirements-dev.txt)?
- Есть устаревшие на мажор или заброшенные (нет релизов >1–2 лет) пакеты в проде?
- Имена пакетов соответствуют реальным (нет typosquat:
python-requests, djnago, urlib3)?
- После апгрейда прогоняются тесты? Зафиксирован ли способ отката (старый lockfile)?
Связь с библиотекой навыков
python-project-audit — общий аудит проекта; здесь — только зависимости и supply chain.
harness-engineering — make sec в CI (bandit + pip-audit); этот навык даёт содержание шага.
test-coverage-auditor — прогон/качество тестов после апгрейда (обязательный шаг апгрейда).
change-review — ревью диффа правок зависимостей перед мержем.
Справочники
- references/scanning.md — pip-audit/safety: команды, флаги, чтение
вывода, severity, что делать с CVE; устаревшие, заброшенные, typosquatting.
- references/pinning-lockfiles.md — стратегии пиннинга,
lockfiles по инструментам (uv/poetry/pip-tools), хеши, воспроизводимость, prod/dev split.
- references/upgrades.md — рабочий процесс обновления, semver,
breaking changes, батчи vs по одному, тесты, откат.
- references/output-format.md — формат отчёта.
1---2name: dependency-auditor3description: Зависимости Python-проекта: уязвимые пакеты (CVE через pip-audit/safety), слабый пиннинг и отсутствие lockfile, неразделённые prod/dev, заброшенные пакеты, typosquatting, а также безопасные апгрейды по semver (батчи, breaking changes, откат). Менеджеры uv, pip, poetry. Используй когда пользователь спрашивает «нужна ли ещё библиотека X в проекте», «есть ли уязвимости», «что обновить», правит requirements или pyproject, видит алерт Dependabot, настраивает lockfile, упоминает pip-audit, safety, uv.lock, supply chain.4---56# Dependency Auditor78Аудитор зависимостей и supply-chain безопасности Python-проектов. Цель — найти уязвимые,9устаревшие, заброшенные и плохо запиненные пакеты, оценить риск и помочь обновить их10безопасно: по semver, с чтением breaking changes, прогоном тестов и возможностью отката.11По итогу — отчёт с уровнями риска и (по согласованию) конкретные правки.1213## Когда применять1415Перед релизом/деплоем, при алерте Dependabot/CVE, при ревью изменений в `requirements*.txt`/16`pyproject.toml`/lockfile, при настройке воспроизводимых сборок, при плановом обновлении.17Для общего аудита проекта см. `python-project-audit`; этот навык — только про зависимости.1819## Контекст — установить ПЕРВЫМ делом20211. **Менеджер пакетов**: uv, pip (+ pip-tools), poetry. Определяет lockfile и команды апгрейда.222. **Источник истины зависимостей**: `pyproject.toml`, `requirements.txt`/`requirements.in`,23 `uv.lock`/`poetry.lock`. Есть ли вообще lockfile и хеши.243. **Окружение**: прод vs dev/test; отделены ли dev-зависимости (`--extra`/`--group`/`[dev]`).254. **Есть ли тесты и CI**: можно ли проверить апгрейд прогоном (см. `test-coverage-auditor`).2627## Процесс28291. **Инвентаризация.** Собрать манифесты и lockfiles, зафиксировать активный менеджер,30 получить полное дерево: `uv pip list` / `pip list`, `uv tree` / `pipdeptree` / `poetry show --tree`.312. **Скан уязвимостей.** `pip-audit` (и при наличии — `safety scan`); читать severity и32 fix-версии. См. [references/scanning.md](references/scanning.md).333. **Проверка пиннинга/lockfile.** Запинено ли, есть ли хеши, разделены ли prod/dev,34 воспроизводима ли установка. См. [references/pinning-lockfiles.md](references/pinning-lockfiles.md).354. **Устаревшие/заброшенные.** `pip list --outdated` / `uv tree --outdated`; оценить заброшенность36 и typosquatting (см. scanning.md).375. **Классифицировать** по риску, объяснить *почему* опасно именно здесь.386. **План безопасного апгрейда** по [references/upgrades.md](references/upgrades.md).397. **Отчёт** по [references/output-format.md](references/output-format.md). По согласованию — правки.4041## Уровни риска4243- **CRITICAL** — известная уязвимость с эксплойтом/RCE/утечкой в **прод**-зависимости при44 наличии fix-версии; явный typosquat/скомпрометированный пакет в зависимостях.45- **HIGH** — CVE средней/высокой severity в прод-пути; нет lockfile вообще при деплое на прод;46 установка из непиннутого диапазона (невоспроизводимый прод); заброшенный прод-пакет с47 открытой уязвимостью без патча.48- **MEDIUM** — CVE только в dev/test-зависимостях; устаревший на мажор пакет без known-CVE;49 prod и dev не разделены; lockfile без хешей; сильно отставшие, но не уязвимые пакеты.50- **LOW** — мелкие апдейты в пределах patch/minor, стиль пиннинга, отсутствие проверки лицензий.5152## Быстрый чеклист5354- Прогонялся `pip-audit` (и `safety`)? Есть ли CVE с доступным fix? Прод или только dev?55- Есть **lockfile** (`uv.lock`/`poetry.lock`/`requirements.txt` с хешами) и он закоммичен?56- Установка воспроизводима: `uv sync --frozen` / `pip install --require-hashes` / `poetry install`?57- Прямые прод-зависимости запинены осознанно (не голый `*`, не случайный `latest`)?58- Dev/test отделены от прода (`--group dev` / `[project.optional-dependencies]` / `requirements-dev.txt`)?59- Есть устаревшие на мажор или заброшенные (нет релизов >1–2 лет) пакеты в проде?60- Имена пакетов соответствуют реальным (нет typosquat: `python-requests`, `djnago`, `urlib3`)?61- После апгрейда прогоняются тесты? Зафиксирован ли способ отката (старый lockfile)?6263## Связь с библиотекой навыков6465- `python-project-audit` — общий аудит проекта; здесь — только зависимости и supply chain.66- `harness-engineering` — `make sec` в CI (bandit + pip-audit); этот навык даёт содержание шага.67- `test-coverage-auditor` — прогон/качество тестов после апгрейда (обязательный шаг апгрейда).68- `change-review` — ревью диффа правок зависимостей перед мержем.6970## Справочники7172- [references/scanning.md](references/scanning.md) — pip-audit/safety: команды, флаги, чтение73 вывода, severity, что делать с CVE; устаревшие, заброшенные, typosquatting.74- [references/pinning-lockfiles.md](references/pinning-lockfiles.md) — стратегии пиннинга,75 lockfiles по инструментам (uv/poetry/pip-tools), хеши, воспроизводимость, prod/dev split.76- [references/upgrades.md](references/upgrades.md) — рабочий процесс обновления, semver,77 breaking changes, батчи vs по одному, тесты, откат.78- [references/output-format.md](references/output-format.md) — формат отчёта.