
Database di proprietà della community contenente advisory di sicurezza per i pacchetti Python su PyPI, che fornisce dati strutturati sulle vulnerabilità in formato OSV per l'integrazione con strumenti come pip-audit e OSV.
Questo è un repository di proprietà della comunità contenente advisory per i pacchetti pubblicati su https://pypi.org.
Le advisory risiedono nella directory vulns e utilizzano una codifica YAML di un formato semplice.
Le voci esistenti possono essere modificate semplicemente creando una pull request.
Per introdurre una nuova voce, crea una pull request con un nuovo file il cui nome
corrisponda a PYSEC-0000-<qualsiasi cosa>.yaml. Questo verrà successivamente rilevato
dall'automazione per assegnare un ID appropriato una volta unito.
Puoi validare la struttura del tuo file YAML eseguendo:
pipx run check-jsonschema --schemafile https://raw.githubusercontent.com/ossf/osv-schema/main/validation/schema.json <PERCORSO AL FILE YAML>
Gran parte dell'insieme esistente di vulnerabilità è raccolto dal feed NVD CVE.
Utilizziamo questo strumento, che
esegue molte euristiche per abbinare le CVE con pacchetti e versioni Python esatti
(che è un problema difficile!) e una piccola quantità di triage umano per
generare le voci .yaml qui.
Per aiutare a ridurre i falsi positivi, le voci in questo database possono includere dettagli su specifici elementi di codice di un pacchetto che sono vulnerabili.
Le voci OSV in questo database hanno la seguente definizione ecosystem_specific per codificare questo:
"ecosystem_specific": {
"imports": [
{
"attribute": string,
"modules": [ string ],
}
]
}
"imports" è un array JSON contenente i moduli e gli attributi interessati dalla vulnerabilità...
Ad esempio, una vulnerabilità che interessa PIL::ImageFont può essere rappresentata come...
"imports": [
{
"attribute": "ImageFont",
"modules": ["PIL"]
}
]
che equivale a PIL:ImageFont. Se anche un secondo attributo ImageFont2 è interessato, allora una seconda voce di import deve essere aggiunta all'array imports.
"imports": [
{ "attribute": "ImageFont", "modules": ["PIL"] },
{ "attribute": "ImageFont2", "modules": ["PIL"] }
]
Gli attributi accessibili tramite più percorsi possono essere rappresentati in forma condensata. Considera l'attributo django.db.models:JSONField del progetto django.
L'attributo django.db.models:JSONField è una riesportazione di django.db.models.fields.json:JSONField ed entrambi sono percorsi validi.
Questi possono essere condensati in una rappresentazione OSV più compatta come:
{
"attribute": "JSONField",
"modules": ["django.db.models", "django.db.models.fields.json"]
}
Questi dati sono esposti da pip-audit,
che fornisce una CLI per risolvere le dipendenze Python in un ambiente
o progetto e identificare vulnerabilità note:
python -m pip install pip-audit
python -m pip-audit -r requirements.txt
Puoi anche utilizzare pypa/gh-action-pip-audit
su GitHub Actions:
jobs:
pip-audit:
steps:
- uses: pypa/[email protected]
with:
inputs: requirements.txt
Le vulnerabilità sono integrate nel progetto Open Source Vulnerabilities, che fornisce un'API per interrogare le vulnerabilità in questo modo:
$ curl -X POST -d \
'{"version": "2.4.1", "package": {"name": "jinja2", "ecosystem": "PyPI"}}' \
"https://api.osv.dev/v1/query"
Questi dati sono stati anche integrati nella API JSON di PyPI.
Ci si aspetta che tutti coloro che interagiscono con questo progetto seguano il Codice di condotta PSF.