
PyPI上のPythonパッケージ向けのセキュリティアドバイザリをコミュニティで管理するデータベースであり、pip-auditやOSVなどのツールと統合するためのOSV形式の構造化された脆弱性データを提供します。
これは、https://pypi.org で公開されているパッケージのアドバイザリを管理するコミュニティ所有のリポジトリです。
アドバイザリは vulns ディレクトリに格納され、シンプルな形式 の YAML エンコーディングを使用します。
既存のエントリは、プルリクエストを作成するだけで編集できます。
新しいエントリを追加するには、PYSEC-0000-<任意>.yaml という名前の新しいファイルを含むプルリクエストを作成してください。これは、マージ後に適切な ID を割り当てるために自動化によって処理されます。
YAML ファイルの構造を検証するには、次のコマンドを実行します:
pipx run check-jsonschema --schemafile https://raw.githubusercontent.com/ossf/osv-schema/main/validation/schema.json <YAMLファイルへのパス>
既存の脆弱性の多くは、NVD CVE フィードから収集されています。
CVE を正確な Python パッケージおよびバージョンと照合するために多くのヒューリスティックを実行する(これは難しい問題です!)このツール と、少量の人手によるトリアージを使用して、ここにある .yaml エントリを生成しています。
誤検知のマッチングを減らすために、このデータベースのエントリには、パッケージの脆弱な特定のコード要素に関する詳細を含めることができます。
このデータベースの OSV エントリには、これをエンコードするための以下の ecosystem_specific 定義があります:
"ecosystem_specific": {
"imports": [
{
"attribute": string,
"modules": [ string ],
}
]
}
"imports" は、脆弱性の影響を受けるモジュールと属性を含む JSON 配列です... たとえば、PIL::ImageFont に影響する脆弱性は、次のように表現できます...
"imports": [
{
"attribute": "ImageFont",
"modules": ["PIL"]
}
]
これは PIL:ImageFont と同等です。2 番目の属性 ImageFont2 も影響を受ける場合は、imports 配列に 2 番目の import エントリを追加する必要があります。
"imports": [
{ "attribute": "ImageFont", "modules": ["PIL"] },
{ "attribute": "ImageFont2", "modules": ["PIL"] }
]
複数のパスからアクセスできる属性は、簡潔な形式で表現できます。django プロジェクト の属性 django.db.models:JSONField を考えてみましょう。
属性 django.db.models:JSONField は django.db.models.fields.json:JSONField の再エクスポートであり、両方とも有効なパスです。
これらは、よりコンパクトな OSV 表現に次のように凝縮できます:
{
"attribute": "JSONField",
"modules": ["django.db.models", "django.db.models.fields.json"]
}
このデータは pip-audit によって公開されており、環境またはプロジェクト内の Python 依存関係を解決し、既知の脆弱性を特定するための CLI を提供します:
python -m pip install pip-audit
python -m pip-audit -r requirements.txt
GitHub Actions で pypa/gh-action-pip-audit を使用することもできます:
jobs:
pip-audit:
steps:
- uses: pypa/[email protected]
with:
inputs: requirements.txt
脆弱性は Open Source Vulnerabilities プロジェクトに統合されており、次のように脆弱性を照会するための API を提供します:
$ curl -X POST -d \
'{"version": "2.4.1", "package": {"name": "jinja2", "ecosystem": "PyPI"}}' \
"https://api.osv.dev/v1/query"
このデータは PyPI JSON API にも統合されています。
このプロジェクトとやり取りするすべての人は、PSF 行動規範 に従うことが期待されています。