
Base de dados comunitária de avisos de segurança para pacotes Python no PyPI, fornecendo dados estruturados de vulnerabilidades no formato OSV para integração com ferramentas como pip-audit e OSV.
Este é um repositório de propriedade da comunidade com advisories para pacotes publicados em https://pypi.org.
Os advisories vivem no diretório vulns e usam uma codificação YAML de um formato simples.
Entradas existentes podem ser editadas simplesmente criando um pull request.
Para introduzir uma nova entrada, crie um pull request com um novo arquivo que tenha um nome
correspondente a PYSEC-0000-<qualquer coisa>.yaml. Isso será posteriormente capturado pela
automação para alocar um ID apropriado após a fusão.
Você pode validar a estrutura do seu arquivo YAML executando:
pipx run check-jsonschema --schemafile https://raw.githubusercontent.com/ossf/osv-schema/main/validation/schema.json <CAMINHO PARA O ARQUIVO YAML>
Grande parte do conjunto existente de vulnerabilidades é coletado do feed NVD CVE.
Usamos esta ferramenta, que
executa muitas heurísticas para corresponder CVEs com pacotes e versões Python exatos
(que é um problema difícil!) e uma pequena quantidade de triagem humana para
gerar as entradas .yaml aqui.
Para ajudar a reduzir falsos positivos, entradas neste banco de dados podem incluir detalhes sobre elementos de código específicos de um pacote que são vulneráveis.
Entradas OSV neste banco de dados têm a seguinte definição ecosystem_specific para codificar isso:
"ecosystem_specific": {
"imports": [
{
"attribute": string,
"modules": [ string ],
}
]
}
"imports" é um array JSON contendo os módulos e atributos afetados pela vulnerabilidade... Por exemplo, uma vulnerabilidade que afeta PIL::ImageFont pode ser representada como...
"imports": [
{
"attribute": "ImageFont",
"modules": ["PIL"]
}
]
que é equivalente a PIL:ImageFont. Se um segundo atributo ImageFont2 também for afetado, então uma segunda entrada de import precisa ser adicionada ao array imports.
"imports": [
{ "attribute": "ImageFont", "modules": ["PIL"] },
{ "attribute": "ImageFont2", "modules": ["PIL"] }
]
Atributos que são acessíveis por múltiplos caminhos podem ser representados em uma forma condensada. Considere o atributo django.db.models:JSONField do projeto django.
O atributo django.db.models:JSONField é uma reexportação de django.db.models.fields.json:JSONField e ambos são caminhos válidos.
Estes podem ser condensados para uma representação OSV mais compacta como:
{
"attribute": "JSONField",
"modules": ["django.db.models", "django.db.models.fields.json"]
}
Estes dados são expostos por pip-audit,
que fornece uma CLI para resolver dependências Python em um ambiente
ou projeto e identificar vulnerabilidades conhecidas:
python -m pip install pip-audit
python -m pip-audit -r requirements.txt
Você também pode usar pypa/gh-action-pip-audit
no GitHub Actions:
jobs:
pip-audit:
steps:
- uses: pypa/[email protected]
with:
inputs: requirements.txt
Vulnerabilidades são integradas ao projeto Open Source Vulnerabilities, que fornece uma API para consultar vulnerabilidades assim:
$ curl -X POST -d \
'{"version": "2.4.1", "package": {"name": "jinja2", "ecosystem": "PyPI"}}' \
"https://api.osv.dev/v1/query"
Estes dados também foram integrados à API JSON do PyPI.
Espera-se que todos que interagem com este projeto sigam o Código de Conduta da PSF.