
Forké depuis https://gitlab.alpinelinux.org/kaniini/secfixes-tracker
Ceci est une application web Flask qui suit les correctifs de sécurité dans Alpine.
En utilisant la secdb d'Alpine, nous pouvons généralement déduire quelles CVE ont été corrigées et lesquelles ne l'ont pas été. Quelques extensions du schéma de rapport secfixes seront ajoutées pour permettre aux mainteneurs de paquets de signaler les faux positifs.
Dans un avenir proche, les changements d'état seront signalés à une liste d'annonces de sécurité au fur et à mesure que le moteur les traite.
Vous devriez créer un virtualenv de la manière habituelle, puis exécuter pip3 install -r requirements.txt.
Si vous souhaitez utiliser une base de données autre que sqlite, vous voudrez installer le pilote correspondant,
par exemple pip3 install psycopg2.
Enfin, vous voudrez écrire un fichier de configuration : copiez l'exemple et modifiez-le selon vos besoins.
Vous devrez ensuite définir ces variables d'environnement à des valeurs utiles :
SECFIXES_TRACKER_CONFIG : chemin vers le fichier de configurationFLASK_APP : le nom de l'application, secfixes_trackerUne fois cela fait, initialisez la base de données avec flask init-db.
Optionnellement, exécutez make pour compiler secfixes-cli. Cela nécessite que go soit installé.
Une fois l'environnement configuré, vous pouvez exécuter diverses tâches :
flask runExécute le serveur web. Cela peut également être fait avec gunicorn ou un outil similaire, mais cela n'est pas couvert ici.
flask init-dbInitialise la base de données.
flask import-apkindex [repo]Importe les dépôts configurés.
flask import-secfixes [repo]Importe les flux secdb configurés.
flask import-nvd [feed-name]Importe un flux NVD, tel que 2021 ou recent.
Une fois les flux annuels importés, vous n'avez plus qu'à importer le flux recent
quotidiennement.
./secfixes-cli import-vulnrichImporte les détails des CVE depuis https://github.com/cisagov/vulnrichment.
flask update-states [repo]Met à jour les différents éléments VulnerabilityState en fonction du contenu actuel des
flux secfixes, NVD et apkindex. Cette commande doit être exécutée après les tâches d'importation
ci-dessus, sur une base horaire.
Les règles de réécriture sont synchronisées depuis Alpine infra/docker/secfixes-tracker. Voir config/README.md pour la disposition des fichiers.
L'application Flask utilise CUSTOM_REWRITERS en Python dans secfixes_tracker/application.cfg (répliqué dans config/prod.settings.py). Les règles sont des fonctions lambda associées comme cpe_vendor:source_pkgname ou cpe_vendor:*.
PACKAGE_EXCLUSIONS dans le même fichier exclut les paquets qui accumulent des CVE de faux positifs (par exemple bridge).
secfixes-cli utilise des règles basées sur expr dans config/application.toml (répliqué dans config/prod.application.toml). Les règles sont basées sur expr.
Un exemple de règle ressemble à :
[[rewriters]]
predicate = "target_sw == 'python'"
rewrite_rule = "product | lower() | replace('_', '-') | fmt('py3-%s')"
predicate détermine si la règle s'applique, tandis que rewrite_rule détermine
comment le CPE doit être réécrit. Une troisième option facultative appelée field
spécifie quel champ du CPE sera réécrit. Si elle n'est pas fournie, elle est définie par défaut
sur product.
Les variables suivantes sont disponibles dans l'environnement des expressions :
vendorproducttarget_swversionfmt est implémenté avec fmt.Sprintf, mais n'accepte que 2 arguments. Le premier
argument est soit une chaîne, soit une tranche. Cela permet de l'utiliser avec
des pipes.
Vous voudrez exécuter les tâches d'importation, puis les tâches update-states. C'est tout ce qui doit être fait.
La partie e-mail est en cours de refonte pour mieux s'intégrer à la façon dont le moteur de suivi a été implémenté. Surveillez cet espace une fois que la partie e-mail sera prête pour les instructions d'installation.
Actuellement, le schéma de la base de données est instable. Vous devrez reconstruire votre base de données lors de la mise à niveau de ce logiciel. Une fois que nous aurons atteint la version 1.0, le schéma de la base de données sera stable.