
Сообщественная база данных уведомлений о безопасности для Python-пакетов на PyPI, предоставляющая структурированные данные об уязвимостях в формате OSV для интеграции с такими инструментами, как pip-audit и OSV.
Это репозиторий, принадлежащий сообществу, содержащий уведомления об уязвимостях для пакетов, опубликованных на https://pypi.org.
Уведомления находятся в каталоге vulns и используют YAML-кодирование простого формата.
Существующие записи можно редактировать, просто создав pull request.
Чтобы добавить новую запись, создайте pull request с новым файлом, имя которого
соответствует PYSEC-0000-<anything>.yaml. После объединения автоматизация подберет подходящий идентификатор.
Вы можете проверить структуру вашего 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 здесь.
Чтобы уменьшить количество ложных срабатываний, записи в этой базе данных могут содержать сведения о конкретных элементах кода пакета, которые уязвимы.
Записи OSV в этой базе данных имеют следующее определение ecosystem_specific для кодирования этой информации:
"ecosystem_specific": {
"imports": [
{
"attribute": string,
"modules": [ string ],
}
]
}
"imports" — это JSON-массив, содержащий модули и атрибуты, затронутые уязвимостью... Например, уязвимость, затрагивающая PIL::ImageFont, может быть представлена как...
"imports": [
{
"attribute": "ImageFont",
"modules": ["PIL"]
}
]
что эквивалентно PIL:ImageFont. Если второй атрибут ImageFont2 также затронут, то в массив imports необходимо добавить вторую запись импорта.
"imports": [
{ "attribute": "ImageFont", "modules": ["PIL"] },
{ "attribute": "ImageFont2", "modules": ["PIL"] }
]
Атрибуты, доступные через несколько путей, могут быть представлены в сокращенной форме. Рассмотрим атрибут django.db.models:JSONField из проекта django.
Атрибут django.db.models:JSONField является реэкспортом django.db.models.fields.json:JSONField, и оба пути допустимы.
Их можно сократить до более компактного представления OSV следующим образом:
{
"attribute": "JSONField",
"modules": ["django.db.models", "django.db.models.fields.json"]
}
Эти данные предоставляются через pip-audit,
который предоставляет CLI для разрешения зависимостей Python в среде
или проекте и выявления известных уязвимостей:
python -m pip install pip-audit
python -m pip-audit -r requirements.txt
Вы также можете использовать pypa/gh-action-pip-audit
в GitHub Actions:
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.