这是一个社区拥有的仓库,用于存放发布在 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 条目。
为了帮助减少误报匹配,此数据库中的条目可以包含有关软件包中易受攻击的特定代码元素的详细信息。
此数据库中的 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 项目 的属性 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 提供,
它提供了一个 CLI,用于解析环境或项目中的 Python 依赖项并识别已知漏洞:
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 行为准则。