
Base de données communautaire d’avis de sécurité pour les paquets Python sur PyPI, fournissant des données structurées sur les vulnérabilités au format OSV pour l’intégration avec des outils comme pip-audit et OSV.
Il s'agit d'un référentiel communautaire d'avis de sécurité pour les packages publiés sur https://pypi.org.
Les avis se trouvent dans le répertoire vulns et utilisent un encodage YAML d'un format simple.
Les entrées existantes peuvent être modifiées en créant simplement une pull request.
Pour introduire une nouvelle entrée, créez une pull request avec un nouveau fichier dont le nom
correspond à PYSEC-0000-<anything>.yaml. Il sera ensuite pris en charge par
l'automatisation pour attribuer un identifiant approprié une fois fusionné.
Vous pouvez valider la structure de votre fichier YAML en exécutant :
pipx run check-jsonschema --schemafile https://raw.githubusercontent.com/ossf/osv-schema/main/validation/schema.json <PATH TO YAML FILE>
Une grande partie de l'ensemble existant des vulnérabilités est collectée à partir du flux NVD CVE.
Nous utilisons cet outil, qui
effectue de nombreuses heuristiques pour faire correspondre les CVE avec les packages et versions
Python exacts (ce qui est un problème difficile !) et une petite quantité de triage humain pour
générer les entrées .yaml ici.
Pour aider à réduire les faux positifs, les entrées de cette base de données peuvent inclure des détails sur les éléments de code spécifiques d'un package qui sont vulnérables.
Les entrées OSV de cette base de données ont la définition ecosystem_specific suivante pour encoder cela :
"ecosystem_specific": {
"imports": [
{
"attribute": string,
"modules": [ string ],
}
]
}
"imports" est un tableau JSON contenant les modules et attributs affectés par la vulnérabilité... Par exemple, une vulnérabilité qui affecte PIL::ImageFont peut être représentée comme...
"imports": [
{
"attribute": "ImageFont",
"modules": ["PIL"]
}
]
ce qui équivaut à PIL:ImageFont. Si un second attribut ImageFont2 est également affecté, une seconde entrée d'import doit être ajoutée au tableau imports.
"imports": [
{ "attribute": "ImageFont", "modules": ["PIL"] },
{ "attribute": "ImageFont2", "modules": ["PIL"] }
]
Les attributs accessibles via plusieurs chemins peuvent être représentés sous une forme condensée. Considérez l'attribut django.db.models:JSONField du projet django.
L'attribut django.db.models:JSONField est une ré-exportation de django.db.models.fields.json:JSONField et les deux sont des chemins valides.
Ceux-ci peuvent être condensés en une représentation OSV plus compacte comme :
{
"attribute": "JSONField",
"modules": ["django.db.models", "django.db.models.fields.json"]
}
Ces données sont exposées par pip-audit,
qui fournit une interface en ligne de commande pour résoudre les dépendances Python dans un environnement
ou un projet et identifier les vulnérabilités connues :
python -m pip install pip-audit
python -m pip-audit -r requirements.txt
Vous pouvez également utiliser pypa/gh-action-pip-audit
sur GitHub Actions :
jobs:
pip-audit:
steps:
- uses: pypa/[email protected]
with:
inputs: requirements.txt
Les vulnérabilités sont intégrées au projet Open Source Vulnerabilities, qui fournit une API pour interroger les vulnérabilités comme suit :
$ curl -X POST -d \
'{"version": "2.4.1", "package": {"name": "jinja2", "ecosystem": "PyPI"}}' \
"https://api.osv.dev/v1/query"
Ces données ont également été intégrées à l' API JSON PyPI.
Toute personne interagissant avec ce projet est censée respecter le Code de conduite PSF.