
Base de datos comunitaria de avisos de seguridad para paquetes de Python en PyPI, que proporciona datos estructurados de vulnerabilidades en formato OSV para su integración con herramientas como pip-audit y OSV.
Este es un repositorio propiedad de la comunidad que contiene avisos para paquetes publicados en https://pypi.org.
Los avisos se encuentran en el directorio vulns y utilizan una codificación YAML de un formato simple.
Las entradas existentes se pueden editar simplemente creando una solicitud de extracción.
Para introducir una nueva entrada, cree una solicitud de extracción con un nuevo archivo cuyo nombre
coincida con PYSEC-0000-<cualquier cosa>.yaml. Esto será recogido posteriormente por la
automatización para asignar un ID adecuado una vez que se fusione.
Puede validar la estructura de su archivo YAML ejecutando:
pipx run check-jsonschema --schemafile https://raw.githubusercontent.com/ossf/osv-schema/main/validation/schema.json <RUTA AL ARCHIVO YAML>
Gran parte del conjunto existente de vulnerabilidades se recopila de la fuente NVD CVE.
Utilizamos esta herramienta, que
realiza muchas heurísticas para hacer coincidir los CVE con paquetes y versiones exactos de Python
(¡que es un problema difícil!) y una pequeña cantidad de clasificación humana para
generar las entradas .yaml aquí.
Para ayudar a reducir las coincidencias de falsos positivos, las entradas de esta base de datos pueden incluir detalles sobre elementos de código específicos de un paquete que son vulnerables.
Las entradas OSV en esta base de datos tienen la siguiente definición de ecosystem_specific para codificar esto:
"ecosystem_specific": {
"imports": [
{
"attribute": string,
"modules": [ string ],
}
]
}
"imports" es una matriz JSON que contiene los módulos y atributos afectados por la vulnerabilidad... Por ejemplo, una vulnerabilidad que afecta a PIL::ImageFont se puede representar como...
"imports": [
{
"attribute": "ImageFont",
"modules": ["PIL"]
}
]
lo que equivale a PIL:ImageFont. Si un segundo atributo ImageFont2 también está afectado, entonces se debe agregar una segunda entrada de importación a la matriz imports.
"imports": [
{ "attribute": "ImageFont", "modules": ["PIL"] },
{ "attribute": "ImageFont2", "modules": ["PIL"] }
]
Los atributos que son accesibles a través de múltiples rutas pueden representarse en una forma condensada. Considere el atributo django.db.models:JSONField del proyecto django.
El atributo django.db.models:JSONField es una reexportación de django.db.models.fields.json:JSONField y ambas son rutas válidas.
Estas se pueden condensar a una representación OSV más compacta como:
{
"attribute": "JSONField",
"modules": ["django.db.models", "django.db.models.fields.json"]
}
Estos datos se exponen mediante pip-audit,
que proporciona una CLI para resolver dependencias de Python en un entorno
o proyecto e identificar vulnerabilidades conocidas:
python -m pip install pip-audit
python -m pip-audit -r requirements.txt
También puede usar pypa/gh-action-pip-audit
en GitHub Actions:
jobs:
pip-audit:
steps:
- uses: pypa/[email protected]
with:
inputs: requirements.txt
Las vulnerabilidades se integran en el proyecto Open Source Vulnerabilities, que proporciona una API para consultar vulnerabilidades de la siguiente manera:
$ curl -X POST -d \
'{"version": "2.4.1", "package": {"name": "jinja2", "ecosystem": "PyPI"}}' \
"https://api.osv.dev/v1/query"
Estos datos también se han integrado en la API JSON de PyPI.
Se espera que todos los que interactúan con este proyecto sigan el Código de conducta de la PSF.