
Bifurcado de https://gitlab.alpinelinux.org/kaniini/secfixes-tracker
Esta es una aplicación web Flask que rastrea las correcciones de seguridad en Alpine.
Al usar la secdb de Alpine, generalmente podemos deducir qué CVEs han sido corregidos y cuáles no. Se añadirán algunas extensiones al esquema de reporte de secfixes para permitir que los mantenedores de paquetes indiquen falsos positivos.
En un futuro cercano, los cambios de estado se notificarán a una lista de anuncios de seguridad a medida que el motor los procese.
Debes crear un virtualenv de la manera habitual y luego ejecutar pip3 install -r requirements.txt.
Si quieres usar una base de datos distinta de sqlite, querrás instalar el controlador correspondiente, por ejemplo pip3 install psycopg2.
Por último, querrás crear un archivo de configuración: copia el ejemplo y modifícalo según tus necesidades.
Luego necesitarás establecer estas variables de entorno con valores útiles:
SECFIXES_TRACKER_CONFIG: ruta al archivo de configuraciónFLASK_APP: el nombre de la aplicación, secfixes_trackerUna vez hecho esto, inicializa la base de datos con flask init-db.
Opcionalmente, ejecuta make para compilar secfixes-cli. Esto requiere que go esté instalado.
Una vez que el entorno esté configurado, puedes ejecutar varias tareas:
flask runEjecuta el servidor web. Esto también se puede hacer con gunicorn o algo similar, pero eso no se cubre aquí.
flask init-dbInicializa la base de datos.
flask import-apkindex [repo]Importa los repositorios configurados.
flask import-secfixes [repo]Importa las fuentes de secdb configuradas.
flask import-nvd [feed-name]Importa una fuente de NVD, como 2021 o recent.
Una vez que se hayan importado las fuentes anuales, solo necesitas importar la fuente recent a diario.
./secfixes-cli import-vulnrichImporta los detalles de CVE desde https://github.com/cisagov/vulnrichment.
flask update-states [repo]Actualiza los distintos elementos de VulnerabilityState según el contenido actual de las fuentes de secfixes, NVD y apkindex. Esto debería ejecutarse después de las tareas de importación anteriores, cada hora.
Las reglas de reescritura se sincronizan desde Alpine infra/docker/secfixes-tracker. Consulta config/README.md para conocer la estructura de archivos.
La aplicación Flask usa CUSTOM_REWRITERS de Python en secfixes_tracker/application.cfg (reflejado en config/prod.settings.py). Las reglas son funciones lambda que se comparan como cpe_vendor:source_pkgname o cpe_vendor:*.
PACKAGE_EXCLUSIONS en el mismo archivo excluye paquetes que acumulan CVEs de falsos positivos (por ejemplo, bridge).
secfixes-cli usa reglas basadas en expr en config/application.toml (reflejado en config/prod.application.toml). Las reglas se basan en expr.
Un ejemplo de regla es el siguiente:
[[rewriters]]
predicate = "target_sw == 'python'"
rewrite_rule = "product | lower() | replace('_', '-') | fmt('py3-%s')"
predicate determina si la regla se aplica, mientras que rewrite_rule determina cómo se debe reescribir el cpe. Una tercera opción opcional llamada field especifica qué campo del CPE se reescribirá. Si no se proporciona, el valor predeterminado es product.
Las siguientes variables están disponibles en el entorno de las expresiones:
vendorproducttarget_swversionfmt está implementado con fmt.Sprintf, pero solo acepta 2 argumentos. El primer argumento es una cadena o un slice. Esto hace posible usarlo con tuberías.
Querrás ejecutar las tareas de importación y, a continuación, las tareas de update-states. Eso es todo lo que hay que hacer.
El tema del correo electrónico se está rediseñando para adaptarse mejor a la forma en que se implementó el motor de seguimiento. Estate atento a este espacio cuando el tema del correo electrónico esté listo para las instrucciones de configuración.
Actualmente, el esquema de la base de datos es inestable. Necesitarás reconstruir tu base de datos al actualizar este software. Una vez que lleguemos a la versión 1.0, el esquema de la base de datos será estable.