はじめに
PythonでWebアプリや機械学習の開発をしていると、外部ライブラリに依存することが多くなります。
FlaskやDjango、requestsなど便利なパッケージは数多く存在しますが、それらの中にはセキュリティ上の脆弱性が報告されているものも少なくありません。
古いバージョンを使い続けていると、情報漏洩や不正アクセスのリスクが高まってしまいます。そこで役立つのが pip-audit です。
pip-auditとは?
pip-auditは、Pythonパッケージの脆弱性診断ツールです。
Node.jsのnpm auditに相当するもので、プロジェクトや仮想環境で利用している依存関係を調べ、既知の脆弱性がないかをチェックしてくれます。
背後では以下のデータベースを利用しています。
特徴まとめ
- 依存関係の脆弱性を検出
- 修正可能なバージョンを提案
-
requirements.txtやPipfileなど複数形式に対応 - JSONなど機械可読形式の出力に対応し、CI/CDに組み込みやすい
-
--fixオプションで自動更新も可能
インストール方法
pip install pip-audit
基本的な使い方
1. 現在の環境をスキャン
pip-audit
2. requirements.txtを対象にする
pip-audit -r requirements.txt
3. JSON形式で出力(CI/CDで便利)
pip-audit -r requirements.txt -f json
4. 自動修正(可能な場合のみアップデート)
pip-audit --fix
⚠️ 注意: 自動修正は便利ですが、互換性が崩れる可能性があるため、テストを通したうえで利用してください。
出力例
Flask 1.0 に既知の脆弱性が含まれていた場合の例です。
Found 1 known vulnerability in 1 package
Name Version ID Fix Versions
------- -------- ------------- ------------
flask 1.0 PYSEC-2019-179 1.0.2
👉 この場合、Flaskを1.0.2以上に更新することで解決できます。
実務での活用
-
CI/CDに組み込む
GitHub ActionsやGitLab CIで定期的に依存関係をチェックし、脆弱性があれば通知する仕組みを作ると安心です。 -
古いプロジェクトの棚卸し
長期間メンテされていないPythonプロジェクトを引き継いだ際、まずpip-auditで安全性を確認するのは有効です。
他ツールとの違い
Pythonには他にもセキュリティ関連ツールがあります。
-
bandit
→ ソースコードの静的解析。危険な書き方や脆弱なコードパターンを検出。 -
safety
→ 依存関係の脆弱性チェックに特化。 -
pip-audit
→safetyに近いが、PyPAが公式に関わっており、CI/CDとの親和性が高いのが特徴。
まとめ
pip-auditは、Pythonプロジェクトの依存関係を安全に保つための強力なツールです。
- 導入は簡単
- 日常的なチェックにもCI/CDにも活用可能
- 他ツールと組み合わせることで、より堅牢なセキュリティ体制を構築できる
セキュリティリスクを放置すると重大な被害につながりかねません。
ぜひ今日からプロジェクトにpip-auditを取り入れて、安全なPython開発を実現してみてください。 🚀