Schwachstellen mit Reachable Vulnerabilities für GitHub erkennen, priorisieren und beheben
28. Januar 2021
0 Min. LesezeitStellen Sie sich vor, Sie programmieren in Java und möchten Snyk Open Source-Scans nutzen, um Sicherheitsprobleme in Ihren Bibliotheken von Drittanbietern aufzuspüren. Eine gute Entscheidung!
Nachdem Sie Ihr Repository mit dem Snyk Open Source-Scanner verbunden haben, stellen Sie jedoch fest, dass die Pakete, von denen Sie abhängig sind, zehn oder sogar 50 Schwachstellen aufweisen. Die entscheidende Frage lautet: Wo soll ich anfangen?
Im Idealfall beheben Sie alle Probleme und beseitigen sämtliche Schwachstellen. Wir wissen alle, dass das nicht immer machbar ist. Außerdem können Sie wahrscheinlich nicht alle Schwachstellen auf einmal beheben. Beginnen Sie mit den kritischsten Problemen, die sich auf Ihre Anwendung auswirken, und setzen Sie dort mit der Behebung an. Sehen wir uns an, wie das funktioniert.
Die Anwendung
Ich habe eine kleine Maven-basierte Java-Anwendung erstellt und auf GitHub veröffentlicht. Die Anwendung nimmt eine URL entgegen und führt für diese einen GET-Request aus. Die Ausgabe wird als Klartext auf der Ergebnisseite angezeigt. Dabei kann es sich um den HTML-Code einer Webseite oder beispielsweise um die Ausgabe eines REST-Endpunkts handeln. Für die Requests verwende ich den HTTP-Client von Apache sowie einige weitere Abhängigkeiten, wie in der pom-Datei gezeigt.

Sicherheitslücken in Ihrem GitHub-Repository erkennen
Um Sicherheitslücken in meinen Open-Source-Abhängigkeiten zu erkennen, habe ich mein GitHub-Repository mit Snyk verbunden. Außerdem habe ich die Funktion Reachable Vulnerabilities aktiviert, die sich derzeit in der Beta-Phase befindet. Sie finden diesen Schalter unter Settings -> Integration -> GitHub Edit Settings. Beachten Sie, dass alles, was ich hier verwende, im kostenlosen Snyk-Tarif enthalten ist.

Nachdem Snyk den Scan meines GitHub-Repositorys abgeschlossen hat, sehe ich, dass meine Anwendung zahlreiche Schwachstellen aus dem verwendeten Open-Source-Paket übernimmt. Die Funktion Reachable Vulnerabilities zeigt mir jedoch, ob eine Schwachstelle über Code wie den folgenden erreichbar ist.

Schwachstellenbehebung priorisieren
Die Schwachstelle durch unzureichende Eingabevalidierung ist ein Problem mit hohem Schweregrad in Version 4.3.1 von Apache httpclient. Die Snyk-Benutzeroberfläche zeigt mir, dass die anfällige Funktion über die doPost-Methode in meinem URLServlet erreichbar ist. Konkret wird dabei eine URI-Eingabe nicht korrekt validiert, wodurch Ihre Software gefährdet werden kann. Bei einigen Tests habe ich mindestens eines der Probleme entdeckt.
Über die URI lassen sich die Anmeldedaten für den Hostnamen in einer URI abtrennen – beispielsweise verweist http://bmv:pwd@snyk.io auf die Domain snyk.io. Wenn ich jedoch im Passwortteil der Anmeldedaten ein weiteres @-Zeichen einfüge, kann ich aus der URL ausbrechen. Kurz gesagt: http://bmv:pwd@foojay.io:80@snyk.io liefert mir das Ergebnis für die Domain foojay.io und nicht für snyk.io.

Das Reachable-Flag ist für die GitHub-Integration auf der Snyk-Plattform bei Java-Maven-Projekten verfügbar. Es ist ein wichtiges Werkzeug, um die Behebung von Schwachstellen in Ihrer Anwendung zu priorisieren. Wird dieses Flag angezeigt, gibt es einen Pfad von Ihrem Code zur anfälligen Methode des importierten Pakets.
Um die Erreichbarkeit in der GitHub-Integration zu berechnen, forkt Snyk Ihren Code und untersucht ihn. Wir erstellen einen Aufrufgraphen und analysieren ihn, um festzustellen, ob ein Pfad zu einer Methode mit einer bekannten Schwachstelle führt. Ist das der Fall, erhält die betreffende Schwachstelle das Badge „reachable“. Außerdem wirkt sich die Erreichbarkeit einer Schwachstelle auf den Prioritätswert aus, den Sie oben rechts sehen. Dieser Wert fasst mehrere Heuristiken zusammen und hilft Entwicklern dabei, einzuschätzen, welche Schwachstellen in ihrem jeweiligen Kontext besonders gefährlich sind und bei der Behebung entsprechend priorisiert werden sollten.

Wenn ich in der Snyk-Benutzeroberfläche nach unten scrolle, sehe ich weitere Schwachstellen, darunter ein Denial-of-Service-Problem im Paket snakeyaml. Beachten Sie, dass diese Schwachstelle kein Reachable-Flag aufweist, da ich das Paket lediglich importiere und es in meinem Beispielprogramm nie tatsächlich aufrufe.

Fazit
Reachable Vulnerabilities für unsere GitHub-Integration ist eine leistungsstarke, kostenlose Funktion, die allen unseren Nutzern dabei hilft, besser zu entscheiden, wo sie mit der Behebung von Schwachstellen beginnen und welche sie zuerst beheben sollten.
Das bedeutet jedoch nicht, dass Sie Schwachstellen ohne Reachable-Flag bedenkenlos ignorieren können. Diese Schwachstellen sind weiterhin Teil Ihrer Anwendung und können möglicherweise auf andere Weise ausgelöst werden.
Besonders in Java gibt es Funktionen wie die Reflection-API. Außerdem sind alle Klassen über den Classpath verfügbar. Das bedeutet: Wenn in Ihrer Anwendung eine beliebige Codeausführung möglich ist, können alle verfügbaren Klassen geladen und ausgenutzt werden.
Ich möchte damit sagen, dass Schwachstellen, die nicht direkt erreichbar sind, dennoch Teil einer Angriffskette sein können. Trotzdem zeigen Ihnen Reachable Vulnerabilities, wo Sie ansetzen können, um Ihre Anwendung besser und sicherer zu machen! Worauf warten Sie noch? Erstellen Sie ein kostenloses Snyk-Konto und probieren Sie es selbst aus!
Die in diesem Blogbeitrag verwendete Anwendung finden Sie in diesem GitHub-Repository.
Starten Sie mit Capture the Flag
Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Herausforderungen lösen.


