Skip to main content

Snyk deckt Schwachstellen in der Supply-Chain-Sicherheit von Visual-Studio-Code-Erweiterungen auf

Artikel von

26. Mai 2021

0 Min. Lesezeit

Wir 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:

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:

Seite der Visual Studio Code-Erweiterung Instant Markdown: Markdown-Quelltext im Editor und die Browser-Vorschau daneben.

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:

curl "http://localhost:8090/foo/?/../../../../../Downloads/snyk-dog.svg"

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:

Sequenzdiagramm: Eine schädliche URL führt vom Browser eines Opfers über einen iFrame und eine VS-Code-Erweiterung zu einem Angreifer, der dadurch auf geheime lokale Dateien zugreifen kann.

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:

IDE mit TypeScript-Code, der von Snyk wegen einer Pfadüberquerungsschwachstelle mit hohem Schweregrad (CWE-23) markiert wurde.

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:

Dashboard zur Codeanalyse mit einem Path-Traversal-Problem mit hohem Schweregrad in TypeScript-Code; der anfällige Aufruf von sendFile ist hervorgehoben

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

I can use VS Code to hack into your development environment

Hier finden Sie weitere sehr empfehlenswerte Fallstudien zu diesem Thema:

Weiterlesen

blog feature snyk container custom base recommendations
Blog

Evo Agentic AppSec: Sicherheit, die mit der KI-Entwicklung Schritt hält

KI-gestützte Entwicklung überholt herkömmliche Security-Workflows. Snyk Agentic AppSec setzt Security-Agenten ein, die Schwachstellen kontinuierlich finden, beheben und überprüfen – während Menschen die Maßstäbe festlegen.

blog feature ai violet
Blog

VulnBump: Können KI-Agenten anfällige Abhängigkeiten beheben, ohne den Build zu beschädigen?

VulnBump testet KI-Agenten anhand von 307 realen Dependency-Upgrades. Eine Lösung zählt nur, wenn die Sicherheitslücke behoben ist und Build sowie Tests weiterhin erfolgreich sind.

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.