
Forked from https://gitlab.alpinelinux.org/kaniini/secfixes-tracker
Dies ist eine Flask-Webanwendung, die Sicherheits-Fixes in Alpine verfolgt.
Durch die Verwendung der Alpine-secdb können wir im Allgemeinen ableiten, welche CVEs behoben wurden und welche nicht. Es werden einige Erweiterungen am secfixes-Meldeschema hinzugefügt, damit Paketbetreuer Fehlalarme (False Positives) kennzeichnen können.
In naher Zukunft werden Zustandsänderungen an eine Sicherheits-Ankündigungsliste gemeldet, sobald die Engine sie verarbeitet.
Du solltest auf die übliche Weise eine virtualenv erstellen und dann pip3 install -r requirements.txt ausführen.
Wenn du eine andere Datenbank als SQLite verwenden möchtest, musst du den entsprechenden Treiber installieren, z. B. pip3 install psycopg2.
Schließlich solltest du eine Konfigurationsdatei erstellen: Kopiere die Beispieldatei und passe sie an deine Bedürfnisse an.
Danach musst du die folgenden Umgebungsvariablen auf sinnvolle Werte setzen:
SECFIXES_TRACKER_CONFIG: Pfad zur KonfigurationsdateiFLASK_APP: der Name der App, secfixes_trackerDanach initialisierst du die Datenbank mit flask init-db.
Optional kannst du make ausführen, um secfixes-cli zu erstellen. Dafür muss go installiert sein.
Sobald die Umgebung konfiguriert ist, kannst du verschiedene Aufgaben ausführen:
flask runStartet den Webserver. Dies kann auch mit gunicorn oder Ähnlichem erledigt werden, wird hier aber nicht behandelt.
flask init-dbInitialisiert die Datenbank.
flask import-apkindex [repo]Importiert die konfigurierten Repositories.
flask import-secfixes [repo]Importiert die konfigurierten secdb-Feeds.
flask import-nvd [feed-name]Importiert einen NVD-Feed, z. B. 2021 oder recent.
Sobald die jährlichen Feeds importiert wurden, musst du den recent-Feed nur noch täglich importieren.
./secfixes-cli import-vulnrichImportiert CVE-Details von https://github.com/cisagov/vulnrichment.
flask update-states [repo]Aktualisiert die verschiedenen VulnerabilityState-Einträge basierend auf dem aktuellen Inhalt der secfixes-, NVD- und apkindex-Feeds. Dies sollte nach den obigen Import-Aufgaben stündlich ausgeführt werden.
Umschreiber-Regeln werden von Alpine infra/docker/secfixes-tracker synchronisiert. Die Dateistruktur findest du in config/README.md.
Die Flask-App verwendet Python-CUSTOM_REWRITERS in secfixes_tracker/application.cfg (gespiegelt in config/prod.settings.py). Die Regeln sind lambda-Funktionen, die als cpe_vendor:source_pkgname oder cpe_vendor:* abgeglichen werden.
PACKAGE_EXCLUSIONS in derselben Datei schließt Pakete aus, die False-Positive-CVEs ansammeln (z. B. bridge).
secfixes-cli verwendet expr-basierte Regeln in config/application.toml (gespiegelt in config/prod.application.toml). Die Regeln basieren auf expr.
Eine Beispielregel sieht wie folgt aus:
[[rewriters]]
predicate = "target_sw == 'python'"
rewrite_rule = "product | lower() | replace('_', '-') | fmt('py3-%s')"
predicate bestimmt, ob die Regel angewendet wird, während rewrite_rule festlegt, wie der CPE umgeschrieben werden soll. Eine optionale dritte Option namens field gibt an, welches Feld des CPE umgeschrieben wird. Wenn sie nicht angegeben ist, wird standardmäßig product verwendet.
Die folgenden Variablen sind in der Umgebung der Ausdrücke verfügbar:
vendorproducttarget_swversionfmt wird mit fmt.Sprintf implementiert, akzeptiert jedoch nur 2 Argumente. Das erste Argument ist entweder eine Zeichenkette oder ein Slice. Das ermöglicht die Verwendung mit Pipes.
Du solltest die Import-Aufgaben und danach die update-states-Aufgaben ausführen. Das ist alles, was getan werden muss.
Die E-Mail-Angelegenheiten werden gerade neu gestaltet, um besser zur Implementierung der Tracking-Engine zu passen. Behalte diesen Bereich im Auge, sobald die E-Mail-Funktionen für Einrichtungsanweisungen bereit sind.
Derzeit ist das Datenbankschema instabil. Du musst deine Datenbank neu aufbauen, wenn du diese Software aktualisierst. Sobald wir Version 1.0 erreicht haben, wird das Datenbankschema stabil sein.