Skip to main content

Automatisierte Fixes für Schwachstellen in .NET-Abhängigkeiten angekündigt

Artikel von

17. November 2021

0 Min. Lesezeit

Wir freuen uns, die verbesserte Unterstützung für .NET-Anwendungen in Snyk Open Source anzukündigen. Damit können Entwickler Schwachstellen in .NET-Abhängigkeiten mithilfe konkreter Empfehlungen und automatisierter Pull Requests beheben!

Zum Zeitpunkt der Veröffentlichung gibt es in NuGet, dem von Microsoft unterstützten und de facto standardmäßigen Paketmanager für .NET, 276.266 einzigartige Pakete, die im Durchschnitt mehr als eine Milliarde Mal pro Woche heruntergeladen werden! 2020 verzeichnete NuGet – an zweiter Stelle hinter npm – das größte Wachstum im Jahresvergleich, gemessen an der Zahl der hinzugefügten Pakete.

Diese Zahlen zeigen, wie beliebt das .NET-Framework ist, veranschaulichen aber auch eine der größten Herausforderungen für .NET-Entwicklungsteams: das Management und die Eindämmung von Sicherheitsrisiken durch bekannte Schwachstellen in diesen Paketen. Oft finden sich solche Schwachstellen in transitiven Abhängigkeiten, also in Paketen, die von anderen Paketen eingebunden werden. Das erschwert den Überblick und macht die erforderlichen Fixes komplizierter.

Die neuen Funktionen von Snyk Open Source erleichtern es Entwicklern, Schwachstellen in direkten und transitiven .NET-Abhängigkeiten präzise zu identifizieren und automatisch zu beheben.

.NET-Sicherheit in Snyk Open Source

Die Identifizierung und Behebung von Schwachstellen in .NET-Abhängigkeiten mit Snyk Open Source beruht auf zwei zentralen Prozessen: einer präzisen Analyse des Abhängigkeitsbaums und dem anschließenden Abgleich mit Snyk Intel – der branchenführenden Schwachstellendatenbank von Snyk.

Analyse von Abhängigkeiten

Im .NET-Ökosystem gibt es mehrere Ebenen von Abhängigkeiten. Einige davon sind für Entwickler offensichtlich, andere vollständig verborgen.

Um Schwachstellen in einer bestimmten .NET-Anwendung korrekt identifizieren zu können, müssen diese Abhängigkeiten präzise aufgelöst werden.

In der Snyk CLI und in Source-Code-Management-Systemen (SCM) (z. B. Azure Repos, GitHub usw.) lösen wir Abhängigkeiten auf unterschiedliche Weise auf. In der CLI scannen wir je nachdem, wie Sie Ihre Projektabhängigkeiten verwalten, z. B. mit PackageReference oder packages.config, entweder Ihre obj/project.assets.json-Datei oder das Verzeichnis mit den Paketen. So erzielen wir eine sehr hohe Genauigkeit.

Das Scannen von Projekten über die SCM-Integration erfordert einen anderen Prozess, da die oben erwähnten generierten Dateien dort nicht verfügbar sind. Deshalb folgen wir dem NuGet-Algorithmus zur Auflösung von Abhängigkeiten, um einen Abhängigkeitsbaum zu erstellen. Zu beachten ist, dass Laufzeitabhängigkeiten (die von der Umgebung bereitgestellt werden, auch Metapakete genannt) in der CLI präziser aufgelöst werden, wenn auf dem Hostcomputer ein ähnliches Runtime-SDK verwendet wird wie auf dem Server, auf dem die Anwendung läuft.

Informationen zu Schwachstellen

Sobald der Abhängigkeitsbaum ermittelt wurde, gleicht Snyk Open Source die Liste der Abhängigkeiten mit Snyk Intel ab. Snyk Intel umfasst eine umfassende Liste von .NET-Schwachstellen (440 % mehr als die nächstgrößte öffentlich verfügbare Datenbank) und liefert präzise, konkrete Informationen für eine schnelle Behebung – darunter die betroffenen Paketversionen und die erforderliche Versionsaktualisierung. Insgesamt enthält Snyk Intel über 700 .NET-Schwachstellen, von denen 63 % als kritisch oder schwerwiegend eingestuft sind.

Das Paket UbracoForms ist ein interessantes Beispiel. UbracoForms dient dazu, Formulare und Fragebögen in Anwendungen einzubinden, und wurde bereits Hunderttausende Male heruntergeladen. Die neueste Version des Pakets, Version 8.8.0, ist zwar frei von Schwachstellen, frühere Versionen enthalten jedoch eine kritische Schwachstelle, die die Ausführung von Remotecode (RCE) ermöglicht.

Seite der Snyk Vulnerability Database mit einer kritischen Sicherheitslücke zur Remote-Code-Ausführung mit Schweregrad 9,8 im NuGet-Paket UmbracoForms.Core.

Snyk Open Source nutzt diese Informationen, um die erforderlichen Fixes zu ermitteln. Sie fließen sowohl in die bereitgestellten Fix-Empfehlungen als auch in die automatisch ausgelösten Pull Requests ein.

Sehen wir uns das genauer an.

Fix-Empfehlungen für .NET in Snyk Open Source

Snyk lässt sich in Git-basierte SCM-Systeme integrieren, darunter GitHub, GitHub Enterprise, Azure Repos, GitLab, Bitbucket Server und Bitbucket Cloud. So können Sie Ihre Projekte ganz einfach importieren und anschließend die darin erkannten Schwachstellen und Lizenzprobleme finden und beheben – alles im Rahmen Ihres bestehenden Entwicklungsworkflows.

Ein Projekt zu importieren ist ganz einfach. Rufen Sie einfach die Seite „Projects“ auf, klicken Sie oben rechts auf Projekt hinzufügen und wählen Sie den Typ des zu importierenden Projekts (z. B. GitHub, Bitbucket usw.) sowie das Repository mit dem Projekt aus. Als Beispiel importiere ich diese Beispielanwendung, die absichtlich Schwachstellen enthält.

Nach dem Import scannt Snyk das Projekt automatisch auf Probleme. Im Beispiel hat Snyk Code ein Problem in meinem benutzerdefinierten Code (1) identifiziert, während Snyk Open Source eine längere Liste von Problemen in den von mir verwendeten .NET-Open-Source-Paketen gefunden hat (2).

Snyk Projects-Dashboard mit gefilterten Projekten, einer Übersicht der Anzahl von Problemen nach Schweregrad und einem aufgeklappten .NET-Projekt mit Ergebnissen der Codeanalyse

Klicken Sie auf die .NET-Projektdatei, um diese Probleme genauer zu untersuchen.

Snyk-Projekt-Dashboard mit 18 Problemen, darunter eine kritische Schwachstelle in einem .NET-Projekt, die die beliebige Ausführung von Code durch Halibut ermöglicht

Insgesamt wurden 18 Probleme identifiziert. Snyk unterstützt Sie auf verschiedene Weise bei der Behebung.

Auf der Registerkarte Abhängigkeiten wird zunächst der vollständige Abhängigkeitsbaum angezeigt. So erhalten Sie einen umfassenden Überblick über alle .NET-Pakete, die für Ihr Projekt verwendet werden, und über die dadurch verursachten Probleme – sowohl bekannte Sicherheitslücken als auch Lizenzprobleme:

Oberfläche eines Abhängigkeitsbaums mit Projektpaketen, verschachtelten .NET-Abhängigkeiten sowie Suche und Filtern für Schwachstellen und Lizenzprobleme

Sie können den Baum filtern, um nur anfällige Abhängigkeiten oder nur Abhängigkeiten mit Lizenzproblemen anzuzeigen. So erkennen Sie deutlich, wie die Probleme entstanden sind – entweder direkt oder über transitive Abhängigkeiten.

Auf der Registerkarte Fixes zeigt Snyk anschließend Empfehlungen zur Behebung von Schwachstellen an. Nicht alle Probleme lassen sich beheben. Bei den behebbaren Problemen sehen Sie jedoch genau, welche Upgrade-Schritte zur Umsetzung des Fixes erforderlich sind.

Hinweis: Snyk Open Source empfiehlt Upgrade-Schritte für Schwachstellen in direkten und transitiven Abhängigkeiten, allerdings nur, wenn eine neue Version der direkten Abhängigkeit verfügbar ist, die die Schwachstelle behebt.

In unserem Beispiel weist Snyk darauf hin, dass ein Upgrade des Pakets TinyMCE von Version 4.8.2 auf Version 5.6.0 vier verschiedene Schwachstellen behebt:

Dashboard zu Schwachstellen in Abhängigkeiten mit einem TinyMCE-Upgrade von 4.8.2 auf 5.6.0 und mehreren Cross-Site-Scripting-Problemen

Kehren wir zur Hauptregisterkarte Probleme zurück. Hier bietet Snyk Open Source zahlreiche Informationen, mit denen Sie die Problemliste durchsuchen und Fixes priorisieren können. Dazu gehört ein Prioritätswert oben rechts auf der Problemkarte, der Ihnen auf einen Blick zeigt, wie dringend ein Problem ist (mehr zum Priority Score von Snyk erfahren Sie hier) sowie der Upgrade-Pfad.

Im folgenden Beispiel hat Snyk Open Source eine kritische Schwachstelle im Paket Halibut identifiziert und empfiehlt ein Upgrade auf Version 4.4.7:

Dashboard zur Abhängigkeitssicherheit mit einer kritischen Schwachstelle zur Ausführung beliebigen Codes in Halibut und einer Empfehlung zur Behebung durch ein Upgrade von Version 4.4.4 auf 4.4.7

Um die Schwachstelle zu beheben, können Sie manuell einen Pull Request auslösen, indem Sie auf die Schaltfläche Diese Schwachstelle beheben klicken. Daraufhin öffnet sich eine Seite mit allen Schwachstellen, die Sie per Pull Request beheben können. Sie können eine oder mehrere Schwachstellen auswählen:

Snyk Open-Ansicht mit einem Fix-PR-Bildschirm, der Software-Sicherheitslücken nach verfügbaren, teilweisen und nicht verfügbaren Fixes gruppiert.

In diesem Fall behebe ich nur die eine Schwachstelle, die ich ausgewählt habe – im Paket Halibut.

Wenn Sie unten auf der Seite auf Fix-PR erstellen klicken, wird der PR ausgelöst und anschließend im entsprechenden Repository auf GitHub geöffnet, wo ich ihn prüfen kann:

GitHub-Pull-Request, der zeigt, wie Snyk Halibut von 4.4.4 auf 4.4.7 aktualisiert, um eine kritische Sicherheitslücke zur Ausführung beliebigen Codes zu schließen.

Der Pull Request enthält alle Informationen, die ich für die Entscheidung über das Zusammenführen benötige, einschließlich Details zur Schwachstelle und zum Umfang des vorgeschlagenen Fixes.

GitHub-Pull-Request mit einem Sicherheitsupdate, das die Halibut-Paketversion von 4.4.4 auf 4.4.7 aktualisiert

Snyk löst auch automatisch einen Pull Request in Ihrem Repository aus, wenn eine neue Schwachstelle identifiziert wird oder ein neuer Fix für eine Ihrer bestehenden Schwachstellen verfügbar ist.

Damit Sie nicht versehentlich neue Probleme in Ihr Projekt einführen, prüft Snyk Open Source auch automatisch jeden neuen Pull Request, den Sie oder andere Mitwirkende im Repository erstellen, auf Schwachstellen und problematische Lizenzen:

GitHub-Pull-Request-Formular zum Aktualisieren von dotNETGoofV2.Website.csproj und Hinzufügen des Pakets Handsonstable

Erste Schritte!

Das .NET-Ökosystem ist im Vergleich zu anderen Ökosystemen relativ komplex. Um die Risiken durch .NET-Open-Source-Pakete erfolgreich zu verwalten und einzudämmen, ist es wichtig, nicht nur den Abhängigkeitsbaum präzise zu analysieren, sondern auch den nötigen Kontext und die passenden Workflows bereitzustellen, damit Schwachstellen behoben werden können.

Die neuen Behebungsfunktionen von Snyk Open Source helfen Entwicklungs- und Sicherheitsteams dabei, die verschiedenen Probleme in ihren Anwendungen zu finden, sie direkt im täglichen Workflow zu beheben und das Entstehen neuer Probleme zu verhindern. Weitere Informationen zu den ersten Schritten finden Sie in unserer offiziellen Dokumentation zu Snyk für .NET.

Falls noch nicht geschehen, registrieren Sie sich bei Snyk und probieren Sie es aus! Viel Erfolg beim Beheben!

Starten Sie mit Capture-the-Flag

Erfahren Sie in unserem virtuellen On-Demand-Workshop für Einsteiger, wie Sie Capture-the-Flag-Challenges lösen.