2026年に報告されたCVEは、1日あたり前年比131%増加しています。

依存関係

pip-audit

pip-auditは、Pythonの依存関係をスキャンし、既知の脆弱性を持つパッケージを検出します。Python Packaging Authorityが提供しており、環境、requirementsファイル、プロジェクトファイルに対して機能します。pipにはnpm auditに相当する機能が組み込まれていないため、これが標準的な手段です。

更新日

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

デフォルトでは、Python Packaging Advisory Databaseを情報源とするPyPIのJSON APIでパッケージを照会し、代わりにOSVを使うこともできます。 オプションの一覧はプロジェクトページをご覧ください。

監査する対象に注意する

多くの人が驚く点です。requirementsファイルを監査すると、その依存関係が解決されます。プロジェクトは、 pip-audit -r INPUTが機能的にはpip install -r INPUTと同等であると警告しています。パッケージのインストールではコードが実行されることがあるため、 悪意あるパッケージが監査中に実行される可能性があります。プロジェクト自身のルールは単純です。pip installしないものは、pip auditしないでください。

これは、新しいタイポスクワッティングやスロップスクワッティングのパッケージなど、 まだアドバイザリのないパッケージからは、このチェックでは守れないということでもあります。

CIでpip-auditを実行する

公式のGitHub Actionであるpypa/gh-action-pip-auditを使うか、コマンドを自分で実行できます。 脆弱性を見つけると0以外の終了コードを返すため、新しいアドバイザリによって、コードを変更していないのにビルドが失敗することがあります。

- run: pip install -r requirements.txt pip-audit
- run: pip-audit

出荷するものと同じ依存関係のセットを監査してください。厳密なバージョンとハッシュを指定したrequirementsなら、安定した結果が得られます。 ほかのチェックとの組み合わせ方は、SCAスキャンを実行する場所をご覧ください。

pip-auditの対象外

  • 自社のコード。分析するのは依存関係ツリーであり、ソースコードではありません。それについては SASTとSCAの比較をご覧ください。
  • ネイティブライブラリ。PythonのwheelにはCライブラリが同梱されていることが多く、プロジェクトは Python以外の共有ライブラリにある推移的な脆弱性は検出しないと明記しています。
  • ビルド内のそれ以外のすべて。ベースイメージ、システムパッケージ、CIのアクションは対象外です。
  • 新しい悪意あるパッケージ。照合するのは既知のアドバイザリです。
  • 出荷したビルド。Pythonの依存関係の解決は環境によって異なるため、別のマシンでの監査ではリリースとは異なるバージョンが見える可能性があります。 ロックファイルがなければ、解決の順序も変わり得ます。

pip-auditとほかのPythonスキャナーの比較

ツール 適した用途 備考
pip-audit Pythonの依存関係を無料で Pythonのみ
Trivy、Grype コンテナイメージ内のPythonパッケージ OSパッケージもカバー
商用SCAツール 多くの言語とチームにわたるポリシーとワークフロー おすすめのSCAツールをご覧ください

pip-auditとCRACI

pip-auditはプルリクエストに対する妥当なチェックです。CRACIは逆の側から機能します。GitHub Actionsのランナーとして、 ジョブがPyPIやその他のすべてのソースから取得したすべてのパッケージを、ツリーのあらゆる階層にわたって、リリースを生成したビルドのSBOMに記録します。 そのうえで、新しい脆弱性が公開されるたびにそのSBOMをチェックし続けるため、昨年のリリースが影響を受けるかどうかがわかります。 ビルド時SBOMとビルド時SBOM生成をご覧ください。

pip-audit:よくあるご質問

pip-auditとは何ですか?

Python Packaging Authorityが提供するツールで、Pythonの環境、requirementsファイル、プロジェクトをスキャンし、既知の脆弱性を持つパッケージを検出します。

Pythonにnpm auditのような機能はありますか?

最も近いのはpip-auditですが、pipのコマンドではなく別のツールなので、自分でインストールする必要があります。

pip-auditで見つかった脆弱性はどう修正すればよいですか?

pip-audit --fixを実行して脆弱なパッケージをアップグレードするか、まず--fix --dry-runで何が変わるかを確認します。その後、テストを実行し、固定したrequirementsを更新してください。

信頼できないコードに対してpip-auditを実行しても安全ですか?

いいえ。requirementsファイルの監査は機能的にはインストールと同等であり、インストールではコードが実行されることがあります。インストールしないパッケージは、監査もしないでください。

pip-auditでSBOMを生成できますか?

はい。JSONまたはXMLのCycloneDXを出力できます。そのSBOMが記述するのは解決したPythonの依存関係であり、ビルドのそれ以外の部分ではありません。

pip-auditはどの脆弱性データベースを使いますか?

デフォルトでは、Python Packaging Advisory Databaseを情報源とするPyPIのJSON APIです。OSVを使うこともできます。

Pythonのビルドが取り込んだものを確認

GitHub Actionsのワークフローを1つCRACIで実行し、ジョブが実際に取得したすべてのパッケージのSBOMを入手してください。

デモを予約