
커뮤니티 소유의 PyPI Python 패키지 보안 권고 데이터베이스로, pip-audit 및 OSV와 같은 도구와의 통합을 위해 OSV 형식의 구조화된 취약점 데이터를 제공합니다.
이 저장소는 https://pypi.org에 게시된 패키지에 대한 보안 권고를 커뮤니티가 소유한 저장소입니다.
보안 권고는 vulns 디렉토리에 있으며 간단한 형식의 YAML 인코딩을 사용합니다.
기존 항목은 풀 리퀘스트를 생성하여 간단히 편집할 수 있습니다.
새 항목을 도입하려면 PYSEC-0000-<anything>.yaml 이름과 일치하는 새 파일로 풀 리퀘스트를 생성하세요. 병합되면 자동화가 적절한 ID를 할당하기 위해 나중에 이를 처리합니다.
YAML 파일의 구조를 검증하려면 다음을 실행하세요:
pipx run check-jsonschema --schemafile https://raw.githubusercontent.com/ossf/osv-schema/main/validation/schema.json <PATH TO YAML FILE>
기존 취약점 세트의 대부분은 NVD CVE 피드에서 수집됩니다.
우리는 이 도구를 사용합니다. 이 도구는 CVE를 정확한 Python 패키지 및 버전과 일치시키기 위해 많은 휴리스틱을 수행하며(어려운 문제입니다!), 여기에 약간의 수동 분류를 더해 여기의 항목을 생성합니다.
.yaml오탐(false positive) 일치를 줄이기 위해, 이 데이터베이스의 항목은 패키지의 특정 코드 요소가 취약하다는 세부 정보를 포함할 수 있습니다.
이 데이터베이스의 OSV 항목은 이를 인코딩하기 위해 다음과 같은 ecosystem_specific 정의를 가집니다:
"ecosystem_specific": {
"imports": [
{
"attribute": string,
"modules": [ string ],
}
]
}
"imports"는 취약점의 영향을 받는 모듈과 속성을 포함하는 JSON 배열입니다... 예를 들어, PIL::ImageFont에 영향을 미치는 취약점은 다음과 같이 표현될 수 있습니다...
"imports": [
{
"attribute": "ImageFont",
"modules": ["PIL"]
}
]
이는 PIL:ImageFont와 동일합니다. 두 번째 속성 ImageFont2도 영향을 받는 경우, imports 배열에 두 번째 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 행동 강령을 따를 것으로 기대됩니다.