- Es wird kritisiert, dass die übermäßigen Benachrichtigungen von Dependabot Entwicklern mehr Zeit rauben, als sie bei der Behebung realer Sicherheitsprobleme helfen
- Wie ein Fall im Go-Ökosystem zeigt, werden tausende PRs und Warnungen selbst für nicht betroffene Repositories erzeugt, was für Verwirrung sorgt
- Mit einer auf govulncheck basierenden GitHub Action lässt sich nur tatsächlich verwundbarer Code erkennen und unnötige Warnungen lassen sich entfernen
- Abhängigkeits-Updates lassen sich sicherer und effizienter über regelmäßige Tests und die Prüfung aktueller Versionen verwalten als über automatisierte PRs
- Dieser Ansatz ist wichtig, um Warnmüdigkeit (alert fatigue) zu verringern und die Belastung von Open-Source-Maintainern zu reduzieren
Probleme mit Dependabot
- Dependabot erzeugt große Mengen an Sicherheitswarnungen und automatischen PRs, wodurch es für Entwickler schwer wird, wirklich wichtige Probleme zu erkennen
- Schon eine kleine Änderung am Go-Paket
filippo.io/edwards25519 führte zu tausenden PRs
- Selbst nicht betroffene Repositories (wie Wycheproof) erhielten fehlerhafte Sicherheitswarnungen
- Die Warnungen enthalten irreführende CVSS-Werte und niedrige Kompatibilitätsindikatoren, was unnötige Verunsicherung erzeugt
- Diese Benachrichtigungsflut wird als Ursache dafür gesehen, dass Vertrauen und Effizienz bei der Sicherheitsreaktion sinken
Eine Alternative mit govulncheck
- Die Go Vulnerability Database bietet feingranulare Metadaten auf Versions-, Paket- und Symbol-Ebene
- Beispielsweise betrifft die Schwachstelle
GO-2026-4503 nur das Symbol Point.MultiScalarMult
- govulncheck erkennt per statischer Analyse nur tatsächlich aufrufbaren verwundbaren Code
- In Kombination mit
go mod why lässt sich genau bestimmen, ob indirekte Abhängigkeiten tatsächlich relevant sind
- Selbst wenn eine Schwachstelle existiert, wird keine Warnung ausgegeben, wenn der Code das betreffende Symbol nicht aufruft
- Die Integration ist über die CLI (
govulncheck -json) oder die Go-API (golang.org/x/vuln/scan) einfach möglich
Ersatz durch GitHub Actions
- Statt Dependabot kann eine govulncheck GitHub Action eingerichtet werden, die täglich automatische Scans ausführt
- Benachrichtigungen werden nur versendet, wenn echte Schwachstellen gefunden werden
- Da keine automatischen PRs erzeugt werden, können sich Entwickler auf wichtige Sicherheitsprobleme konzentrieren
- Weniger Fehlwarnungen helfen, Warnmüdigkeit bei Sicherheitsmeldungen (alert fatigue) zu reduzieren und die Qualität der Reaktion zu verbessern
- Auch das Problem unnötiger PRs an Open-Source-Maintainer entfällt
Verwaltung von Abhängigkeits-Updates
- Abhängigkeiten sollten gesammelt entsprechend dem Entwicklungszyklus jedes Projekts verwaltet werden
- Tägliche Tests gegen die neuesten Versionen sind sinnvoll, tatsächliche Updates sollten jedoch nur bei Bedarf erfolgen
- In Go kann mit
go get -u -t ./..., bei npm mit npm update gegen die neuesten Versionen getestet werden
- Dieser Ansatz stellt sowohl schnelle Reaktion auf Sicherheitslücken als auch Stabilität sicher
- Durch Tests mit aktuellen Versionen lassen sich Kompatibilitätsprobleme früh erkennen
- Gleichzeitig wird verhindert, dass Abhängigkeiten mit Schadcode sofort ausgerollt werden
- Mit geomys/sandboxed-step lässt sich die Ausführung in CI-Umgebungen über gVisor isolieren
Fazit und Hintergrund der Unterstützung
- Die Automatisierung von Dependabot erzeugt oft eher Lärm (noise) als Sicherheit
- Ein auf govulncheck und regelmäßigen Tests basierender Ansatz ist eine präzisere und nachhaltigere Methode für Sicherheitsmanagement
- Die Open-Source-Wartung des Autors wird über die Organisation Geomys durch Sponsoring von Ava Labs, Teleport, Tailscale, Sentry und anderen getragen
- Dieses Modell trägt zu einer stabilen Pflege des Open-Source-Ökosystems und einer höheren Sicherheitsqualität bei
1 Kommentare
Hacker-News-Kommentare
Aber ein Tool, das nur Versionsnummern mit einer Schwachstellen-Datenbank vergleicht, kann nicht beurteilen, ob der konkrete Code dieser Schwachstelle tatsächlich ausgesetzt ist, und erzeugt daher viel Rauschen
Ein Tool, das mich zuletzt beeindruckt hat, ist CodeQL. Es lässt sich in GitHub Advanced Security ausführen und verfolgt den tatsächlichen Codefluss, wobei der gesamte Pfad visuell dargestellt wird, über den Eingabewerte zu einer riskanten Verwendung führen
Dadurch bekommt man Informationen, mit denen sich echte Korrekturen vornehmen lassen, und es gibt weniger False Positives. Natürlich kann es gerade in dynamischen Sprachen wie Python Code geben, der der Erkennung entgeht, aber in den meisten Fällen ist es ausreichend nützlich
Es entstanden Kommentare in der Art, nutzlose Zwischenvariablen hinzuzufügen, nur um CodeQL-Warnungen zu umgehen. Es fühlt sich wie ein auf die Daten überangepasstes Tool an
debug, und es gibt viel zu viele unsinnige ReDoS-Meldungen. Manchmal wird dafür sogar eine CVE registriert, sodass ich am liebsten ganz aus dem JS-Ökosystem aussteigen würdeWir verwenden eine GitHub Action, die benachrichtigt, wenn in einem PR ein verwundbarer Aufruf hinzugefügt wird.
Zusammen mit dem automatischen Mergen von Dependabot ist das auch für die Pflege von JS-Codebasen eine brauchbare Kombination
Wenn die Tests gut genug sind, entdeckt man in neuen Versionen auch mal Bugs, aber dabei entstehen manchmal auch Open-Source-Beiträge. Es ist lästig, schafft aber gute Gewohnheiten
E-Mail-Benachrichtigungen nerven, und ich mag es auch nicht, wenn sich PRs stapeln. Ich würde das lieber gezielt in bestimmten Zeitfenstern erledigen
dependabot.ymllassen sich Ausführungsintervall und Anzahl der PRs steuernSiehe die offizielle Dokumentation
Man kann die Probleme auch direkt selbst beheben und so die Zahl der Issues verringern
Persönlich empfehle ich Renovate. Es unterstützt mehr Sprachen und Optionen für automatisches Mergen
Das Grundproblem bei Dependabot ist, dass Abhängigkeitsmanagement mit einem Sicherheitsproblem verwechselt wird.
Schwachstellen in Funktionen, die nie aufgerufen werden, sind kein Sicherheitsproblem, sondern Rauschen
In Python wirkt
pip-audit --descauf mich besser als Dependabot.Bis es perfekte statische Analyse gibt, könnten vierteljährliche manuelle Prüfungen sogar sicherer sein
Genau hier entsteht die Kluft zwischen tatsächlicher Sicherheit und Sicherheitspraktiken
Die meisten CVEs haben in der Praxis keine Auswirkungen, trotzdem versuchen Unternehmen krampfhaft, die Zahl der Schwachstellen in Container-Images auf 0 zu bringen
Dazu kommt, dass mit aktualisierten Abhängigkeiten oft auch neue CVEs dazukommen. Die meiste Software bekommt schließlich keine Backport-Patches
Je mehr Repositories man hat und je vielfältiger die verwendeten Sprachen sind, desto unrealistischer ist es, überall einen perfekten CI-Workflow einzubauen
Es ist nicht perfekt, aber meiner Meinung nach immer noch viel besser, als gar nichts zu tun
Werden CVEs automatisch erzeugt?
GitHubs Schwachstellen-Datenbank konzentriert sich eher auf Quantität als auf Qualität, und Dependabot arbeitet wie ein unintelligenter Spam-Benachrichtiger
Wenn das Problem nur auftritt, wenn man eine Funktion falsch aufruft, hat der Code wahrscheinlich ohnehin schon nicht korrekt funktioniert
Das Scannen von GCP-Container-Images überschüttet Vanta mit einer Flut von CVE-Warnungen, aber die meisten davon lassen sich nicht beheben oder betreffen Pfade, die in Wirklichkeit gar nicht genutzt werden
Ich frage mich, ob es Tools gibt, die so eine kontextbasierte Filterung leisten
Die Ergebnisse sind insgesamt positiv, aber bei einer großen Codebasis mit vielen Abhängigkeiten ist es weiterhin schwierig, die Zahl der CVEs zu senken