Shipped GHub Urheber und Maintainer Open core 2026 - present

GAdvisory

Eine Plattform für Sicherheits-Advisories, die nicht an die Datenbank eines Ökosystems gebunden ist.

Eine Plattform für Sicherheits-Advisories, um Schwachstellendaten zu veröffentlichen, zu verfolgen und zu beziehen, ohne an die Datenbank eines einzelnen Ökosystems gebunden zu sein. Das Produkt, das meiner täglichen Arbeit am nächsten kommt.

Die andere Hälfte

Von uns gehostet als GPlatform Advisory: dieselbe Software, mit zusätzlichen Modulen, die es nur dort gibt. Es ist ein Produkt, daher gelten diese Bedingungen, diese Datenschutzerklärung und dieser Auftragsverarbeitungs-Anhang für beide Bezugswege.

Warum es das gibt

GHSA ist gute Infrastruktur. Es ist zugleich die Advisory-Datenbank eines Ökosystems, mit den Annahmen dieses Ökosystems fest eingebaut.

Advisory-Daten neigen dazu, dort festzusitzen, wo sie veröffentlicht wurden: auf der Plattform, die sie hostet, gut lesbar, überall sonst unhandlich.

GAdvisory ist die Alternative.

Woher es kommt

Das ist das Produkt, das meiner täglichen Arbeit am nächsten kommt. Die CNA bei Postiz zu betreiben heißt, in Advisory-Abläufen zu leben: Zuweisung, CVSS-Bewertung, CWE-Ketten, JSON-Datensätze, Offenlegung über GHSA. Die Reibung in diesen Abläufen ist für mich nicht theoretisch.

Wie die Daten geordnet sind

Advisories liegen in einer dreistufigen Hierarchie: Gruppe, dann Organisation, dann Projekt. Jede Ebene kann ein eigenes Advisory-Präfix setzen, und die spezifischste gewinnt.

Das ist kein Detail. Es ist der Grund, warum eine Instanz für ein Produkt PSA--Datensätze und für ein anderes GSSA--Datensätze veröffentlichen kann, ohne dass eines die Nummerierung des anderen borgt, und ohne dafür zwei Installationen zu betreiben.

Meldungen hereinbekommen

Vier Eingangswege, weil sich meldende Personen nicht auf einen einigen: ein Webformular, die REST-API, Webhooks von GitHub und GitLab, und IMAP-Abruf.

Anonyme Einreichung ist je Geltungsbereich zuschaltbar. Die richtige Antwort unterscheidet sich zwischen einem internen Tracker und einem öffentlichen Produkt, also ist es eine Einstellung und keine Vorgabe.

Datensätze herausbekommen

Jedes Advisory trägt eine Sichtbarkeit: öffentlich, nicht gelistet hinter einer Capability-URL, oder privat. Koordinierte Offenlegung läuft über geltungsbereichsübergreifende Embargo-Beteiligte, sodass die Leute, die einen Entwurf lesen müssen, es können, und sonst niemand.

Es gibt vollwertige Adapter für die MITRE-CVE-Services-API und die GitHub-CNA, mit konfigurierbarer Verzögerung vor der automatischen Veröffentlichung. Eine Kennung anzufordern und den Datensatz zu veröffentlichen sind hier ein Ablauf, was sie in der Praxis ohnehin sind. Sie in zwei Systemen zu halten und von Hand abzugleichen ist der Teil, der schiefgeht.

Datensätze serialisieren nach CVE Record Format 5.x und nach OSV. Gelesen werden EPSS, CWE sowie CVSS v3.1 und v4.0. Öffentliche Advisory-Seiten tragen JSON-LD.

Wer was darf

Feste Rollen decken den Zuschnitt ab, den die meisten Instanzen brauchen: Owner, Admin, Maintainer, Triager, Reporter, Viewer. Eigene Rollen sitzen darüber, CASL-gestützt, für die Fälle, in die der feste Satz nicht passt.

SSO ist bewusst breit: GitHub, Google, GitLab.com, selbst betriebenes GitLab, generisches OIDC und generisches SAML 2.0, mit Just-in-time-Provisionierung und Identitätsverknüpfung. Eine Advisory-Plattform, in die sich niemand anmelden kann, ist eine Advisory-Plattform, die niemand liest.

Wie es gebaut ist

UI-first, wie der Rest der Reihe. Hier zählt das mehr als sonst: Wer ein Sicherheits-Advisory am dringendsten lesen muss, ist oft am wenigsten sicher auf einer Kommandozeile.

TypeScript durchgehend. NestJS und Prisma über PostgreSQL 16, Redis, Meilisearch für die Suche, und S3-kompatibler Objektspeicher mit beigelegtem MinIO. Next.js im Frontend, Socket.IO mit Redis-Adapter für Echtzeit. BullMQ-Worker laufen standardmäßig als eigener Prozess und fallen für kleine Installationen in die API zusammen. Envelope-Verschlüsselung über libsodium, Datenschlüssel unter einem Schlüsselverschlüsselungsschlüssel.

Bare Metal mit systemd-Units ist das vorrangige Auslieferungsziel und docker-compose das nachrangige — die umgekehrte Reihenfolge zur üblichen, und zwar absichtlich. Es läuft ohne Netzanbindung.

Englisch und Deutsch ab dem ersten Tag, aus demselben Grund, aus dem die Advisories in beiden Sprachen rausgehen.

Status

Ausgeliefert und im Betrieb. Die Produktivinstanz veröffentlicht unter gadvisory.org und trägt derzeit 33 Advisories zu Postiz App, Contribution Checker und GAdvisory selbst.