Snyk deckt Schwachstellen in der Supply-Chain-Sicherheit von Visual-Studio-Code-Erweiterungen auf
26. Mai 2021
0 Min. LesezeitWir beobachten immer mehr Vorfälle im Bereich Supply-Chain-Sicherheit. Dazu zählen ausgenutzte Sicherheitslücken in Paketmanagern für Open Source, kompromittierte Continuous-Integration-Systeme und mit Hintertüren versehene Softwareartefakte. Und nun breiten sich diese Vorfälle zunehmend auf den Ort aus, an dem Entwickler die meiste Zeit verbringen: ihre integrierte Entwicklungsumgebung, insbesondere die Visual Studio Code IDE.
In diesem Artikel:
Einleitung: Ein verwundbarer Visual Studio Code Extensions Marketplace
Die Ausgangslage: Die Auswirkungen verwundbarer Visual-Studio-Code-Erweiterungen auf Entwickler
Proof-of-Concept-Ausnutzung: Angriffe auf Visual-Studio-Code-Erweiterungen
Offenlegung der Sicherheitsforschung: Snyk veröffentlicht Forschungsergebnisse zur Supply-Chain-Sicherheit von Visual Studio Code
Was können wir dagegen tun? Sicherheitsrisiken von VS-Code-Erweiterungen mindern
Bis vor Kurzem waren in VS-Code-Erweiterungen keine Sicherheitslücken entdeckt worden, was bei Millionen von Entwicklern ein Gefühl der Sicherheit erzeugte. Doch nun hat Snyk Schwachstellen entdeckt und offengelegt, die eine reale und unmittelbare Bedrohung für Entwickler darstellen, die diese Erweiterungen verwenden und anschließend mit einem böswilligen Akteur interagieren. Das potenzielle Ausmaß einer Kompromittierung ist so gravierend, dass eine Remotecodeausführung auf dem Rechner eines Entwicklers möglich ist, indem man ihn einfach dazu verleitet, auf einen Link zu klicken.
Diese neue Bedrohung der Supply-Chain-Sicherheit durch VS-Code-Erweiterungen könnte zu einem neuen Spielfeld für Angriffe werden und möglicherweise über 2.000.000 Entwickler betreffen. Sehen wir uns das genauer an.
Ein verwundbarer VS Code Extensions Marketplace
Der VS Code Extensions Marketplace bietet rund 25.000 Erweiterungen. Dabei handelt es sich im Wesentlichen um komprimierte Archive mit JavaScript-Code, die npm-Paketen ähneln und tatsächlich sogar auf das npm-Ökosystem als Quelle für Drittanbieterabhängigkeiten zurückgreifen, um die Erweiterungen zu erstellen.
Ähnlich wie die npm-Registry ist der VS Code Extensions Marketplace ein offenes Ökosystem, in dem sich jeder Entwickler registrieren und Erweiterungen einreichen kann. Sobald sie hochgeladen und bestätigt wurden, sind diese Erweiterungen für Entwickler direkt in der VS Code IDE verfügbar.
Damit einige dieser Angriffe funktionieren, müssen Entwickler die Erweiterungen aktiv verwenden. Zu den von Snyk entdeckten verwundbaren Erweiterungen zählen:
Open in Default Browser – über 520.000 Downloads. Ermöglicht es Entwicklern, Dateien in einem Browser zu öffnen und sie so schnell und einfach zu prüfen (üblich bei HTML-Dateien).
Instant Markdown – über 120.000 Downloads. Ermöglicht Entwicklern, die Markdown-Syntax einer Datei zu analysieren und als HTML-Darstellung auszugeben, die in einem Webbrowser geöffnet werden kann. Ähnlich der Darstellung einer Markdown-Datei wie README.md als GitHub-Repository-Startseite.
Wenn wir uns diese beliebten Erweiterungen ansehen: Wie oft haben wir wohl schon eine Erweiterung in unserem Editor installiert, ohne uns bewusst zu sein, dass wir damit Code zulassen, den ein Fremder geschrieben hat? Code, der nun möglicherweise Zugriff auf eine Entwicklungsumgebung hat oder sie sogar kontrollieren kann? Wie oft haben sich Entwickler möglicherweise allein durch die Verwendung einer Erweiterung einem Risiko ausgesetzt?
Die Auswirkungen verwundbarer VS-Code-Erweiterungen auf Entwickler
Auf den ersten Blick mag eine Erweiterung lediglich die Funktionen einer IDE ausbauen, doch ihr Schadensradius ist deutlich größer. Eine kompromittierte Erweiterung auf dem Laptop eines Entwicklers bedeutet, dass der Angreifer mindestens ein Loch in die Firewall geschlagen und Zugriff auf interne Unternehmensnetzwerke erlangt hat. Denken wir außerdem an die sensiblen Informationen, auf die Entwickler zugreifen können. Selbst wenn ein Angreifer lediglich Dateien lesen kann, etwa durch eine klassische Path-Traversal-Schwachstelle, kann er Geheimnisse auslesen, beispielsweise die Konfigurationsdateien der Entwicklerumgebung oder SSH-Schlüssel des Entwicklers. Dies kann wiederum Lese- und Schreibzugriff auf Quellcode-Repositories ermöglichen.
Wie Sie sehen, ist eine Entwicklungsumgebung sehr leistungsfähig und wird innerhalb eines Netzwerks oft als vertrauenswürdige Instanz betrachtet. Deshalb sind Angriffe auf Entwickler ein lukratives Ziel.
Tatsächlich betraf eine ähnliche Sicherheitslücke im November 2018 die Node.js-Laufzeitumgebung. Die als CVE-2018-12120 identifizierte Schwachstelle brachte Entwickler potenziell in Gefahr, da der Debugger-Port der Laufzeitumgebung auf allen verfügbaren Netzwerkschnittstellen lauschte. Stellen Sie sich vor, Sie debuggen eine Node.js- oder JavaScript-Anwendung mit node --debug, während Sie in einem öffentlichen, unsicheren Netzwerk arbeiten, etwa in einem Café. Angreifer könnten sich dadurch mit der Debugging-Schnittstelle verbinden und beliebigen JavaScript-Code in Ihrer Entwicklungsumgebung ausführen.
Falls Sie das obige Beispiel für einen seltenen Sonderfall halten: Rapid7 hat einen Exploit entwickelt, der gezielt diese Schwachstelle in der Node.js-Debugger-Befehlsinjektion ausnutzt, indem ein Modul für das Metasploit-Exploit-Framework erstellt wurde.
Angriffe auf VS-Code-Erweiterungen
Sehen wir uns eine der verwundbaren Erweiterungen genauer an und untersuchen wir, wie ein Angreifer sie zu seinem Vorteil ausnutzen kann.
In der folgenden Demonstration nutzen wir eine Code-Schwachstelle in der Erweiterung Instant Markdown aus. Nach der Installation über den Marketplace sehen Sie, wie die übliche Vorschau von Markdown-Dateien aussieht:

Sobald Sie eine Markdown-Datei wie die README.md eines Repositorys ansehen, startet die Erweiterung einen Webserver, der auf localhost und Port 8090 lauscht. Sie müssen nicht einmal den Ansichtsbereich der Erweiterung in VS Code öffnen. Sie startet einfach automatisch im Hintergrund.
Wenn Sie eine README.md-Datei im VS-Code-Editor öffnen und anschließend http://localhost:8090 aufrufen, sehen Sie den Inhalt der README.md-Datei als HTML-Datei.
Das Problem: Die Erweiterung Instant Markdown weist eine Path-Traversal-Schwachstelle auf. Dadurch kann jeder, der Zugriff auf den lokalen Server hat, beliebige Dateien aus der Umgebung abrufen, in der VS Code ausgeführt wird – also im Grunde vom Rechner des Entwicklers.
Nehmen wir an, ich verwende diese Erweiterung und habe eine Snyk-Logodatei in meinem Downloads-Ordner, zum Beispiel ~/Downloads/snyk-dog.svg. Wenn ich dann den folgenden curl-Befehl in der Befehlszeile ausführe, wird der Inhalt dieser Datei zurückgegeben:
Vielleicht fragen Sie sich jetzt, wie jemand auf eine Datei zugreifen könnte, die von einem lokalen Webserver bereitgestellt wird. Was wäre, wenn man Sie dazu verleitet, eine Website aufzurufen? Es reicht schon, eine vom Angreifer kontrollierte Website in Ihrem Browser zu öffnen.
Das folgende Flussdiagramm zeigt, wie Probleme im Zusammenhang mit CORS umgangen werden:

Der oben beschriebene Angriffsvektor nutzt die Path-Traversal-Schwachstelle in Verbindung mit Server-Side-Request-Forgery sowie einige raffinierte JavaScript-Tricks. Dazu zählen das Erzwingen eines Downloads in der Umgebung des Benutzers, ein Iframe und die Browser-API Window.postMessage, um die erforderlichen Daten zu übermitteln.
Dieses Video zeigt den gesamten Ablauf in Aktion: Kirill Efimov, Sicherheitsforscher bei Snyk, startet einen von ihm kontrollierten Webserver, macht ihn über ngrok zugänglich, um eine über das Internet erreichbare HTTP-Website zu simulieren, und stiehlt schließlich SSH-Schlüssel von einem Entwickler, der VS Code und eine verwundbare Erweiterung verwendet:
Snyk veröffentlicht Forschungsergebnisse zur Supply-Chain-Sicherheit von VS Code
Dies ist nur ein Beispiel dafür, wie Angreifer versuchen werden, VS-Code-Erweiterungen und diesen Supply-Chain-Angriffsvektor auszunutzen, um Entwickler ins Visier zu nehmen. Tatsächlich haben wir weitere Erweiterungen gefunden, die für ähnliche Angriffsvektoren anfällig sind, darunter LaTeX Workshop mit über 1.200.000 Downloads.
Vor der Veröffentlichung dieser Ergebnisse hat Snyk einen verantwortungsvollen Offenlegungsprozess durchlaufen und die zuständigen Maintainer über die hier aufgezeigten Probleme informiert, um gemeinsam eine Lösung zu koordinieren.
Ich empfehle Ihnen, mehr über die technischen Details der VS-Code-Supply-Chain-Geschichte zu erfahren. Die Snyk-Sicherheitsforscher Raul Onitza-Klugman und Kirill Efimov haben die Untersuchung durchgeführt, Proofs of Concept erstellt und mit den Maintainerinnen und Maintainer der Erweiterungen zusammengearbeitet, um die Situation zu beheben und unser Ökosystem zu schützen.
Sicherheitsrisiken von VS-Code-Erweiterungen mindern
Als Entwickler, der solche Erweiterungen erstellt oder mit JavaScript, TypeScript oder Java programmiert, können und sollten Sie ein Tool verwenden, das Ihnen hilft, Sicherheitslücken zu finden, während Sie in Ihrer IDE programmieren. Ich spreche nicht von einem gewöhnlichen Linter, sondern von Snyk Code – einem neu angekündigten Tool für statische Anwendungssicherheitstests (SAST), das Sie direkt in Ihrer IDE einsetzen können. Sie können es auch über die Snyk CLI ausführen: $ snyk code test.
Hier sehen Sie einen Screenshot davon, wie Snyk Code diese Path-Traversal-Schwachstelle in der Erweiterung Instant Markdown für VS Code findet:

Eine weitere Möglichkeit, alle statisch erkannten sicherheitsrelevanten Codeprobleme in mehreren Projekt-Repositories zu finden, ist der Import Ihrer GitHub-Repositories in Snyk. Snyk erkennt dann mögliche Schwachstellen. Hier sehen Sie dieselben Informationen zur Path-Traversal-Schwachstelle, wie sie in der Snyk-Web-App dargestellt werden:

Als Entwickler und Benutzer der VS Code IDE sollten Sie sorgfältiger darauf achten, welche Erweiterungen Sie installieren. Leider gibt es derzeit keine integrierten Tools im Marketplace, mit denen sich die Sicherheit von Erweiterungen überprüfen lässt. Für die eigenen Open-Source-Bibliotheken Ihres Projekts, ob auf npm oder anderswo, können Sie jedoch jederzeit Snyk (kostenlos!) verwenden, um Sicherheitslücken in diesen Paketen zu finden und zu beheben.
Zusammenfassung
Die Herausforderungen der Supply-Chain-Sicherheit werden weiter zunehmen, komplexer werden und sich immer gezielter gegen das Entwicklerökosystem richten. Wir hoffen, dass Ihnen die Forschungsergebnisse die potenziellen Sicherheitsrisiken und ihre Folgen noch deutlicher vor Augen führen.
Wenn Sie eine Live-Demonstration des Hacks von Visual-Studio-Code-Erweiterungen sehen möchten, empfehle ich Ihnen, am 8. Juni um 15:00 Uhr UTC diese Session anzusehen. Mit dabei sind Liran Tal, Director of Developer Advocacy bei Snyk, und Kirill Efimov, Sicherheitsforscher bei Snyk:
https://www.youtube.com/watch?v=pkvywMhd30c

Hier finden Sie weitere sehr empfehlenswerte Fallstudien zu diesem Thema:
Ein genauer Blick auf Sicherheitslücken in Visual-Studio-Code-Erweiterungen
Sicherheitslücke zur Remotecodeausführung in Zoom CVE-2019-13567
Dependency Confusion und weitere Themen rund um die Absicherung Ihrer modernen Software-Supply-Chain
Wenn Sie JavaScript- oder Node.js-Entwickler sind, sollten Sie sich diesen Leitfaden mit 10 Best Practices für npm-Sicherheit ansehen.
Präsentation von Guy Podjarny bei InfoQ: Entwickler als Verbreitungswege für Malware


