Beispiel-Repository
Eine neue Organisation hat nichts zu scannen, bis sie Code pusht. Um vorher zu sehen, was die Sicherheitsfunktionen tun, kann ein Owner der Organisation das Sicherheitsbeispiel von fremforge in die Organisation kopieren: ein kleines Repository mit absichtlich veralteten Abhängigkeiten, sodass innerhalb weniger Minuten Befunde, Erreichbarkeitsurteile und ein Pull Request mit einer Sicherheitskorrektur erscheinen.
Anlegen
Unter Sicherheit › Übersicht (/<org>/_admin/security/overview) hat der Punkt Scan-Abdeckung der Einrichtungs-Checkliste eine Schaltfläche Mit einem Beispiel-Repository ausprobieren. Owner der Organisation können sie verwenden; Auditoren wird sie verweigert, wie jede Änderung.
- Sie legt
<org>/fremforge-security-samplean, ein privates Repository, und committet das Beispiel darin in einem einzigen Commit vonfremforge. Das Repository wird gescannt, sobald es angelegt ist. - Eine Organisation kann ein Beispiel-Repository haben. Ein weiterer Klick meldet, dass es bereits existiert.
- Gibt es schon ein Repository namens
fremforge-security-sample, wird nichts angelegt; benenne dieses Repository zuerst um oder lösche es. - Jeder Versuch steht im Audit-Log als
code-security.sample_repo.created, mit dem Ergebnis.
Was darin ist
Der Inhalt stammt aus einem festen, geprüften Commit des eigenen Beispiels von fremforge. Er enthält Manifeste, Lockfiles und ein paar Zeilen Code, die die verwundbaren Funktionen aufrufen. Der Quellcode der Abhängigkeiten selbst ist nicht enthalten. Nichts darin wird gebaut, ausgeführt oder deployt: Es gibt keine Workflows und kein Dockerfile. Es steht unter der MIT-Lizenz, und seine README nennt die Advisories, die es zeigen soll:
| Ökosystem | Paket | Version | Advisory | Erreichbarkeit |
|---|---|---|---|---|
| npm | lodash | 4.17.20 | CVE-2021-23337 (Command Injection in template) | erreichbar: das Beispiel ruft template auf |
| npm | lodash | 4.17.20 | CVE-2020-28500 (ReDoS) | kein Aufrufpfad |
| npm | minimist | 1.2.5 | CVE-2021-44906 (Prototype Pollution) | kein Aufrufpfad: gelistet, nie importiert |
| Go | golang.org/x/text | v0.3.5 | GO-2021-0113 / CVE-2021-38561 (language.ParseAcceptLanguage) | erreichbar: das Beispiel ruft sie auf |
| PyPI | PyYAML | 5.3.1 | CVE-2020-14343 (Codeausführung über full_load) | erreichbar auf Importebene |
Die gepinnten Versionen tragen noch ein paar Advisories mehr als diese. Für jede gibt es eine korrigierte Version, sodass Korrektur-PR öffnen für alle funktioniert. Hat deine Organisation automatische Sicherheitskorrekturen eingeschaltet, öffnen sich Korrektur-Pull-Requests auf dem Beispiel von selbst, wie bei jedem anderen Repository.
Nur in der Konsole
Befunde im Beispiel-Repository erscheinen in der Konsole und in der API, wie alle anderen. Sie verlassen fremforge nie:
- keine Sicherheitswarnung per Mail, weder sofort noch in der täglichen Zusammenfassung, und nichts dazu im wöchentlichen Sicherheits-Digest;
- kein Warnungs-Webhook und kein SIEM-Ereignis, auch nicht die aus Befunden abgeleiteten Audit-Ereignisse (Scan-Ingests, Treffer, SLA-Überschreitungen);
- nie in anonymen Zahlen mitgezählt, und eine Organisation, deren einziges Repository das Beispiel ist, trägt nichts dazu bei;
- nie in den eigenen Messungen von fremforge zu seinen Sicherheitsfunktionen mitgezählt.
Das Beispiel zählt auch nie als Scan-Abdeckung: Der Punkt der Checkliste verlangt weiterhin ein eigenes Repository.
Wann es kein Beispiel mehr ist
Das Beispiel ist nur so lange Inhalt von fremforge, wie sein Standard-Branch dort steht, wo fremforge ihn hinterlassen hat. Sobald jemand auf seinen Standard-Branch pusht oder in ihn mergt (auch das Mergen eines seiner Korrektur-Pull-Requests zählt), wird es ein gewöhnliches Repository: Ab dann lösen seine Befunde Warnungen, Webhooks und SIEM-Ereignisse aus und zählen in anonymen Zahlen und als Scan-Abdeckung, wie bei jedem anderen Repository. Das wird im Audit-Log als code-security.sample_repo.graduated festgehalten. Pushes auf andere Branches, etwa den Branch eines Korrektur-Pull-Requests, ändern nichts.
Entfernen
Lösche das Repository in Forgejo, wenn du fertig bist. fremforge bemerkt das Löschen und vergisst das Beispiel, sodass du später ein neues anlegen kannst. Ein Umbenennen lässt es ein Beispiel bleiben.