Skip to main content

Schwachstellen mit Reachable Vulnerabilities für GitHub erkennen, priorisieren und beheben

Artikel von

28. Januar 2021

0 Min. Lesezeit

Stellen 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.

<dependencies>
   <dependency>
       <groupId>org.apache.httpcomponents</groupId>
       <artifactId>httpclient</artifactId>
       <version>4.3.1</version>
   </dependency>
   <dependency>
       <groupId>javax.servlet</groupId>
       <artifactId>javax.servlet-api</artifactId>
       <version>3.0.1</version>
       <scope>provided</scope>
   </dependency>
   <dependency>
       <groupId>org.owasp.encoder</groupId>
       <artifactId>encoder</artifactId>
       <version>1.2.2</version>
   </dependency>
   <dependency>
       <groupId>org.yaml</groupId>
       <artifactId>snakeyaml</artifactId>
       <version>1.25</version>
   </dependency>
</dependencies>
Webformular mit einem URL-Eingabefeld für http://snyk.io und einer Seite mit der Anfrageausgabe, auf der der HTML-Quellcode der Website angezeigt wird

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.

Einstellungsseite für die Analyse erreichbarer Schwachstellen. Die Funktion ist aktiviert; angezeigt werden außerdem ein Hinweis zum Klonen des Repositorys und die Schaltfläche „Änderungen speichern“.

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.

Detaillierter Schwachstellenbericht zu einem erreichbaren Apache-HttpClient-Problem mit hoher Schwere im Bereich Eingabevalidierung, einschließlich Behebungspfad, Call-Stack und anfälliger Funktion.

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.

Browserseite mit dem Titel „Request output!“ mit HTML-Quellcode und dem hervorgehobenen Titel „Kostenlose Java- und OpenJDK-Infos für die tägliche Java-Nutzung | foojay“

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.

Sicherheitsbefund mit der Einstufung „Hoher Schweregrad“ und „Erreichbar“: Unzureichende Eingabevalidierung, Anzahl: 673.

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.

Bericht zu einer Denial-of-Service-Schwachstelle mittleren Schweregrads in org.yaml:snakeyaml mit Empfehlung zum Upgrade auf Version 1.26

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.

Weiterlesen

Blog

Frontier-Modelle fanden die Schwachstellen. Nur der Angreifer fand die Angriffsketten.

Die statische Analyse fand die Schwachstellen, doch erst Live-Angriffstests bewiesen, wie sie sich zu Angriffen verketten lassen. Ein Vergleich von Evo COS, Claude Security und Claude Code Security.

feature insights context
Blog

Autonome Angriffe sind bereits Realität. Die Verteidigung muss Schritt halten.

Autonome Angreifer verkürzen das Zeitfenster für die Verteidigung. Erfahren Sie, wie kontinuierliches Erkennen, Beheben, Validieren und Verhindern Sicherheitsteams helfen kann, Schritt zu halten.

Blog

Warum KI-Coding-Agenten immer wieder fehlerhafte Zugriffskontrollen schreiben

KI-Coding-Agenten können Autorisierungslogik erzeugen, die kompiliert und die Prüfung besteht, dabei aber die Daten eines Mandanten für einen anderen offenlegt. Erfahren Sie, warum fehlerhafte Zugriffskontrollen schwer zu erkennen sind und wie Sie sie verhindern.