Skip to main content

So sichern Sie JavaScript-Anwendungen direkt über die CLI

Artikel von
Headshot of Gideon Idoko

Gideon Idoko

feature secure js cli

24. Oktober 2023

0 Min. Lesezeit

Laut dem State of Open Source Security Report 2022 von Snyk weist ein durchschnittliches JavaScript-Projekt 49 Schwachstellen auf, darunter häufige Probleme wie unsichere Abhängigkeiten, Cross-Site-Scripting (XSS), unzureichende Eingabevalidierung und Cross-Site-Request-Forgery (CSRF). Angesichts der weitverbreiteten Nutzung von JavaScript sind robuste Sicherheitsmaßnahmen immer wichtiger, um Ihre Anwendungen vor Cyberangriffen zu schützen. Diese Maßnahmen während der Entwicklung umzusetzen, ist entscheidend. Ebenso wichtig ist es jedoch, früh damit zu beginnen – und über die CLI lässt sich der Prozess einfacher gestalten.

Deshalb führt dieser Artikel Sie durch den Prozess, Ihre JavaScript-Anwendungen mit der Snyk CLI zu sichern.

Was ist die Snyk CLI?

Die Snyk CLI ist ein leistungsstarkes Tool, mit dem Sie Ihre Anwendungen, Container und Infrastructure as Code (IaC) auf Sicherheitslücken überprüfen und überwachen können. Da sie sich nahtlos in Ihren Entwicklungsworkflow integrieren lässt, können Sie sie lokal oder in Ihrer Continuous-Integration- und Continuous-Delivery-Pipeline (CI/CD) ausführen. So können Sie Sicherheitsprobleme proaktiv und früh im Entwicklungsprozess angehen.

Wenn Sie Ihr JavaScript-Projekt mit der Snyk CLI scannen, prüft sie die Abhängigkeiten des Projekts anhand einer umfangreichen Datenbank mit Sicherheitslücken und meldet alle gefundenen Probleme. Außerdem erhalten Sie Hinweise zur Behebung. Dazu kann gehören, auf eine sichere Version eines verwundbaren Pakets zu aktualisieren oder eine alternative, nicht verwundbare Bibliothek zu verwenden.

Vorteile der Snyk CLI während der Entwicklung

Mit der Snyk CLI können Sie die Sicherheit und Zuverlässigkeit Ihrer Projekte sowie die Release-Geschwindigkeit verbessern. Hier sind einige der wichtigsten Vorteile:

  • Sicherheitsscans für Code und Abhängigkeiten: Die Snyk CLI scannt Ihre Codebasis und Abhängigkeiten auf bekannte Sicherheitslücken und liefert Details zu den Sicherheitsproblemen, einschließlich Schweregrad und empfohlenen Korrekturen.

  • Früherkennung von Sicherheitslücken: Mit der Snyk CLI können Sie Sicherheitslücken früh im Entwicklungslebenszyklus erkennen und sie deshalb früher und mit weniger Aufwand und Kosten beheben.

  • Anleitungen zur Behebung von Sicherheitslücken: Neben dem Erkennen von Sicherheitslücken schlägt die Snyk CLI Aktualisierungen für verwundbare Abhängigkeiten oder alternative Bibliotheken vor. So können Sie die gefundenen Probleme leichter beheben.

  • Unterstützung von Compliance-Anforderungen und Best Practices: Mit den von der Snyk CLI erstellten Berichten können Sie Sicherheitsprüfungen durchführen und die Compliance bewerten, während Sie die Einhaltung von Best Practices sicherstellen.

  • Unterstützung von Programmiersprachen und Ökosystemen: Dank der Unterstützung zahlreicher Programmiersprachen können Sie mit der Snyk CLI eine Vielzahl von Projekten testen, etwa in Java, Python, .NET, Ruby, PHP und vielen weiteren Sprachen. Damit eignet sie sich hervorragend für polyglotte Teams.

  • Entwicklerfreundliche Benutzererfahrung: Dank der intuitiven Terminalbefehle der Snyk CLI können Entwickler Sicherheitsprüfungen ganz einfach in ihren Entwicklungsworkflow integrieren. Neben der CLI können Sie Snyk auch in Ihrer IDE über Plugins und Erweiterungen nutzen.

So installieren Sie die Snyk CLI

Sie können die Snyk CLI auf verschiedene Arten auf Ihrem Rechner installieren: von verfügbaren eigenständigen ausführbaren Dateien bis hin zu Paketmanagern wie Homebrew für macOS und Scoop für Windows.

Am einfachsten installieren Sie die Snyk CLI für Ihre JavaScript-Anwendung jedoch global über npm oder Yarn, da Sie Node.js wahrscheinlich bereits installiert haben. Vergewissern Sie sich, dass Sie Node.js Version 12 oder höher verwenden, und führen Sie den folgenden Befehl aus, um die Snyk CLI als globales npm-Paket zu installieren:

npm i -g snyk

Alternativ können Sie die CLI mit Yarn global installieren, indem Sie yarn global add snyk ausführen. Weitere Informationen finden Sie in der Installationsanleitung für die Snyk CLI.

So beheben Sie JavaScript-Sicherheitslücken mit der Snyk CLI

Nachdem Sie die Snyk CLI installiert haben, können Sie ihre Funktionen erkunden, indem Sie ein Beispielprojekt in JavaScript testen.

Richten Sie lokal ein Beispielprojekt in JavaScript ein

Damit Sie mit der Snyk CLI schnell einen Projekttest einrichten können, steht in diesem GitHub-Repository ein Beispielprojekt in JavaScript mit allen erforderlichen Manifestdateien bereit. Das Projekt ist eine einfache Quote-API, die Lodash und Express als Abhängigkeiten verwendet. Die Quote-API verfügt über einen GET /-Endpunkt, der eine Liste mit Zitaten zurückgibt, und einen GET /random-Endpunkt, der ein zufälliges Zitat zurückgibt.

Das Projekt verwendet Docker zur Containerisierung und Kubernetes als Teil seiner Infrastruktur. Am einfachsten richten Sie Docker und Kubernetes auf Ihrem lokalen Rechner ein, indem Sie Docker Desktop installieren und in den Einstellungen Kubernetes aktivieren:

Docker Desktop-Einstellungen mit geöffnetem Kubernetes-Bereich. Angezeigt werden Version 1.25.4, aktiviertes Kubernetes und eine Schaltfläche „Anwenden und neu starten“.

Klonen Sie das Repository auf Ihren lokalen Rechner, um das JavaScript-Beispielprojekt einzurichten:

git clone https://github.com/IamGideonIdoko/vulnnode.git

Wechseln Sie anschließend in das Projektverzeichnis und installieren Sie die Abhängigkeiten:

cd vulnnode

npm install

Beachten Sie, dass der JavaScript-Code des Projekts in der Datei server.js verfügbar ist. Führen Sie npm start aus, um die App auf Port 3000 zu starten:

Dunkles Browserfenster unter localhost:3000 mit einer JSON-API-Antwort, die eine Erfolgsmeldung sowie abgerufene Zitate mit Namen der Autorinnen und Autoren anzeigt.

Erstellen und starten Sie nun mit dem folgenden Docker-Befehl einen Container für die App:

docker compose up --detach app

Damit wird aus der Dockerfile ein vulnnode-Docker-Image erstellt, ausgeführt und der Container auf Port 4000 verfügbar gemacht.

Erstellen Sie zum Schluss eine Kubernetes-Ressource für die App:

kubectl create -f kube.yml 

Dieser Code verwendet die Manifestdatei kube.yml und stellt die App auf Port 5000 bereit. Damit ist alles eingerichtet – jetzt können Sie mit dem Scannen des Projekts fortfahren.

Authentifizieren Sie Ihren Rechner

Die Snyk CLI muss mit einem Snyk-Konto verknüpft sein. Deshalb müssen Sie Ihren Rechner authentifizieren, bevor Sie sie verwenden können. Falls Sie noch kein Konto haben, registrieren Sie sich kostenlos für ein Snyk-Konto, um die Schritte nachzuvollziehen. Melden Sie sich anschließend an, öffnen Sie Ihr Terminal und authentifizieren Sie die Snyk CLI mit diesem Befehl:

snyk auth

Daraufhin wird eine Webseite in Ihrem Browser geöffnet. Klicken Sie auf die Schaltfläche Authentifizieren, um die Snyk CLI zu authentifizieren.

Falls diese Authentifizierungsmethode nicht funktioniert, können Sie stattdessen Ihr API-Token verwenden. Rufen Sie Kontoeinstellungen > Allgemein > API-Token auf und kopieren Sie Ihr API-Token. Authentifizieren Sie sich anschließend in Ihrem Terminal mit dem Token:

snyk auth <YOUR_API_TOKEN>

Nun sollte eine Meldung erscheinen, die bestätigt, dass Ihr Konto authentifiziert wurde und die CLI einsatzbereit ist. Sehen wir uns die Snyk-CLI-Befehle an, mit denen Sie Ihr JavaScript-Projekt testen können.

snyk test

Der Befehl snyk test prüft Open-Source-Software auf Sicherheits- und Lizenzprobleme. Er analysiert die Abhängigkeiten des Projekts, um bekannte Sicherheitslücken darin zu erkennen. Außerdem liefert er Informationen zu diesen Sicherheitslücken, etwa zu Typ, Beschreibung, verwundbaren Dateipfaden und den erforderlichen Schritten zur Behebung.

Wenn Sie snyk test ausführen, versucht die Snyk CLI, Manifestdateien mit Abhängigkeiten (wie die Datei package.json in dem von Ihnen eingerichteten Projekt) automatisch zu erkennen und zu testen. Hinweis: Snyk sucht nach lokalen Abhängigkeiten, um sie auf Sicherheitslücken zu prüfen. Deshalb haben wir die Abhängigkeiten des Projekts bei der Einrichtung heruntergeladen.

Führen Sie den Testbefehl im selben Verzeichnis aus, um das Projekt zu scannen:

snyk test

Die Ausgabe sieht in etwa so aus:

Terminalausgabe von `snyk test` mit neun gemeldeten Problemen und 10 anfälligen Pfaden in 51 JavaScript-Abhängigkeiten.

Snyk hat die Abhängigkeiten des Projekts getestet, einige Probleme gefunden und diese mit einer Beschreibung gemeldet, einschließlich Problem-ID, Schweregrad und einem Link mit weiteren Informationen.

Alle Probleme werden im Abschnitt Probleme, die durch ein Upgrade behoben werden können gruppiert. Das bedeutet: Wenn Sie die mit den Problemen verknüpften Bibliotheken aktualisieren, werden eine oder mehrere Sicherheitslücken geschlossen. Später erfahren Sie im Detail, wie Sie diese Probleme beheben.

Probleme aus dem Test können auch in den folgenden Abschnitten gruppiert werden:

  • Behebbare Probleme bedeutet, dass kein verfügbares Update das Problem behebt, Sie aber stattdessen einen Patch als Behelfslösung verwenden können.

  • Probleme ohne direktes Upgrade oder Patch bedeutet, dass kein verfügbares Update und kein Patch das Problem behebt. Sie können entscheiden, ob Sie die Abhängigkeit beibehalten oder durch eine Alternative ersetzen.

Hinweis: Wenn Sie die Ausgabe lieber in einer JSON-Datei speichern möchten, fügen Sie dem Snyk-CLI-Befehl einfach das Flag --json-file-output=./path/to/file.json hinzu.

In einer CI/CD-Pipeline können Sie snyk test so ausführen, dass die Pipeline abgebrochen wird, wenn das Projekt Sicherheitslücken enthält, also wenn der Exit-Code des Testbefehls nicht 0 ist.

snyk monitor

Wenn Sie den Befehl snyk monitor ausführen, erstellt er eine Momentaufnahme Ihres Projekts und sendet die Daten an Snyk. Wichtig ist: snyk monitor ist kein Ersatz für snyk test. Der Hauptzweck des Befehls besteht darin, eine Momentaufnahme zu erstellen und sie im Zeitverlauf nachzuverfolgen. Vor der Bereitstellung in der Produktionsumgebung ist er ein wertvolles Tool. Außerdem hält Snyk Sie auf dem von Ihnen bevorzugten Kontaktweg auf dem Laufenden, sobald eine neue Sicherheitslücke oder eine für Ihr Projekt relevante Behebung bekannt wird.

Damit die Momentaufnahme am richtigen Ort gespeichert wird, empfiehlt es sich, zusätzliche Angaben wie die Organisation (--org) und den Projektnamen (--project-name) anzugeben.

Führen Sie den folgenden Befehl aus, um snyk monitor auszuprobieren:

snyk monitor --file=package.json  --project-name=vulnnode --org=<YOUR_ORG>

Ersetzen Sie <YOUR_ORG> durch die Organisation, in der die Momentaufnahme des Projekts gespeichert werden soll. Nach Ausführung des Befehls erhalten Sie in der Antwort einen Link zur Momentaufnahme, etwa so:

Terminalausgabe eines Snyk-Monitor-Befehls mit einer URL zum Projektsnapshot, Hinweisen auf Abhängigkeitsprobleme und der Ausführungszeit.

Rufen Sie über den Link die Momentaufnahme in Ihrem Snyk-Dashboard auf:

Snyk-Projekt-Dashboard mit schwerwiegenden Lodash-Prototype-Pollution- und qs-Prototype-Poisoning-Schwachstellen mit Bewertungen von 731 und 696.

snyk ignore

In manchen Fällen gibt es keinen Patch und kein Update, mit dem sich eine Sicherheitslücke beheben lässt, oder Sie sind der Ansicht, dass die Sicherheitslücke in Ihrer App nicht ausgenutzt werden kann. In solchen Fällen können Sie Snyk anweisen, die Sicherheitslücke für einen bestimmten Zeitraum zu ignorieren. Mit dem Befehl snyk ignore können Sie bekannte Probleme oder falsch-positive Ergebnisse verwalten, die sich nicht sofort beheben lassen oder im Kontext Ihres Projekts nicht relevant sind.

Wenn Sie snyk ignore verwenden, müssen Sie das Problem anhand seiner Sicherheitslücken-ID angeben. Diese finden Sie in der Ausgabe des Befehls snyk test. Die Sicherheitslücke Regular-Expression-Denial-of-Service (ReDoS) im aktuellen Lodash-Paket des Projekts hat beispielsweise die ID SNYK-JS-LODASH-1018905. Sie können sie also mit diesem Befehl ignorieren:

snyk ignore --id=SNYK-JS-LODASH-1018905 --expiry=2023-07-27 --reason="Not that severe"  

Das Flag --expiry gibt an, wie lange das Problem ignoriert werden soll. Mit dem Flag --reason geben Sie den Grund dafür an. Dieser Befehl erstellt eine .snyk-Richtliniendatei, die Informationen zur Sicherheitslücke im Stammverzeichnis speichert. Dadurch wird die Sicherheitslücke bei künftigen Ausführungen von snyk test nicht mehr gemeldet.

snyk container

Die Snyk CLI bietet zwei Container-Befehle (test und monitor), mit denen lokale oder entfernte Container-Images, beispielsweise Docker-Images, auf bekannte Sicherheitslücken getestet und überwacht werden können. Die Syntax für beide Befehle lautet:

snyk container test <image>:<tag>
snyk container monitor <image>:<tag>

Da Sie das Image bei der Einrichtung als vulnnode erstellt haben, testen Sie es mit diesem Befehl:

snyk container test vulnnode

Die Ausgabe sollte in etwa so aussehen:

Terminal mit einem Snyk Container-Test für vulnode, der mehrere mittelschwere OpenSSL-/libcrypto-Sicherheitslücken und Versionen mit verfügbaren Fixes anzeigt.

Weiter unten in diesem Artikel erfahren Sie, wie Sie diese Probleme beheben. Wie mit dem Befehl snyk monitor können Sie das vulnnode-Container-Image auch überwachen und Momentaufnahmen davon erstellen:

snyk container monitor vulnnode

snyk iac

Bei Infrastructure as Code (IaC) werden Cloud-Ressourcen, Netzwerke und Konfigurationen nicht manuell eingerichtet, sondern per Code verwaltet und bereitgestellt. Der Befehl snyk iac erkennt Sicherheitslücken in Ihren Konfigurationsdateien. So können Sie Fehlkonfigurationen beheben, bevor sie zum Sicherheitsrisiko werden.

Scannen Sie die Kubernetes-IaC-Datei mit folgendem Befehl:

snyk iac test kube.yml

Die Ausgabe sieht in etwa so aus:

Terminalausgabe mit den Testergebnissen von Snyk Infrastructure as Code für kube.yml, darunter vier Kubernetes-Sicherheitsprobleme mit niedriger Schwere.

Nachdem Sie das JavaScript-Projekt gescannt haben, sehen wir uns an, wie Sie einige der gefundenen Probleme beheben können.

Sicherheitsprobleme in Ihrem JavaScript-Projekt beheben

Ausgehend vom Befehl snyk test schlägt die Snyk CLI vor, die erkannten Probleme in der Ausgabe durch ein Upgrade von express von v4.17.1 auf v4.18.2 und von lodash von v4.17.4 auf v4.17.21 zu beheben. Aktualisieren Sie die Versionen in Ihrer package.json und installieren Sie die Pakete mit npm install neu.

Führen Sie nach der Neuinstallation erneut snyk test aus. Sie erhalten eine Ausgabe ähnlich der folgenden:

Snyk-Testausgabe im Terminal: 51 Abhängigkeiten getestet, keine verwundbaren Pfade in einem npm-Projekt gefunden.

Und schon haben Sie die Schwachstellen im Projekt behoben. Hinweis: Wenn Sie Ihr Git-Repository über app.snyk.io mit Snyk verbinden, erstellt Snyk automatisch neue Pull Requests mit Dependency-Updates, die Sicherheitsprobleme in Ihrer package.json-Manifestdatei beheben.

Beim Befehl snyk container test sind die erkannten Probleme auf die App im Image und das verwendete Basis-Image zurückzuführen:

Terminalausgabe mit einer Liste von Abhängigkeitsschwachstellen und Empfehlungen zum Upgrade von Node.js-Basisimages.

Das aktuelle Basis-Image weist eine kritische, vier hohe und drei mittlere Schwachstellen auf. Es empfiehlt sich, die kritischen und hohen Schwachstellen schnell zu beheben, da sie bei einem Angriff schwerwiegende Auswirkungen auf Ihre App haben können.

Um die Probleme im Container zu beheben, können Sie das Basis-Image in der Dockerfile auf eines der vorgeschlagenen Images aktualisieren, zum Beispiel auf node:20.5-bookworm-slim:

+ FROM node:20.5-bookworm-slim AS development
- FROM node:16.15-alpine3.14 AS development

WORKDIR /app

# …

Hinweis: Wenn Sie Ihr Git-Repository über app.snyk.io mit Snyk verbinden, erstellt Snyk automatisch neue Pull Requests mit Dockerfile-Updates, die Sicherheitsprobleme beheben. Sie können diese dann zusammenführen.

Erstellen Sie das Container-Image mit dem folgenden Befehl neu:

docker compose build app

Führen Sie den Container-Test erneut aus. Diesmal erhalten Sie eine Ausgabe ähnlich der folgenden:

Ergebnis des Sicherheitsscans für das Docker-Image vulnnode: 28 Probleme mit Abhängigkeiten, darunter eine Schwachstelle mit niedriger Schwere in libapt-pkg6.0.

Durch diese Behebung werden die kritischen und hohen Schwachstellen beseitigt. Die 28 verbleibenden Schwachstellen haben alle eine niedrige Priorität und können daher zunächst bestehen bleiben.

Bei snyk iac test sind die erkannten Probleme schließlich auf Konfigurationen zurückzuführen, die nicht in der Manifestdatei kube.yml enthalten waren:

Der Sicherheits-Scan im Terminal meldet Probleme mit der Rechteausweitung in Kubernetes und fasst insgesamt acht Probleme zusammen, darunter vier mittlere und vier niedrige.

Die Probleme hier haben eine mittlere Priorität. Versuchen Sie, zwei davon mithilfe der von der Snyk CLI vorgeschlagenen Behebung zu lösen. Öffnen Sie die Datei kube.yml und aktualisieren Sie den Container:

#...      
    spec:
      containers:
      - name: nodeserver
        image: vulnnode:latest
        ports:
        - containerPort: 3000
        imagePullPolicy: Never
        resources:
          requests:
            memory: "64Mi"
            cpu: "500m"
          limits:
            memory: "256Mi"
            cpu: "500m"
        securityContext:
          runAsNonRoot: true
          allowPrivilegeEscalation: false

# …

Führen Sie snyk iac test kube.yml erneut aus. Die Ausgabe sollte wie folgt aussehen:

Sicherheitsbericht mit zwei Kubernetes-Problemen mittlerer Schwere und einer Testzusammenfassung mit insgesamt sechs Problemen.

Dadurch wurden die Probleme auf zwei mit mittlerer Priorität reduziert, die Sie ignorieren können.

Zusammenfassung

In diesem Artikel haben Sie erfahren, wie Sie Ihre JavaScript-Apps schützen, indem Sie sie mit der Snyk CLI auf Schwachstellen scannen.

Sie arbeiten am liebsten im Terminal? Mit der Snyk CLI können Sie Ihren Code, Ihre Anwendungen, Container und IaC-Dateien ganz einfach schützen. Die Snyk CLI ist ein starker Verbündeter, mit dem Entwickler ihre Projekte vor potenziellen Bedrohungen schützen und sie nahtlos in ihren bestehenden Entwicklungsworkflow integrieren können. Melden Sie sich noch heute kostenlos an.

Sichern Sie Ihre JavaScript-Apps ab sofort

Finden und beheben Sie JavaScript-Schwachstellen kostenlos mit Snyk. 

Keine Kreditkarte erforderlich.

Oder registrieren Sie sich mit Azure AD Docker ID Bitbucket

Mit der Nutzung von Snyk erklären Sie sich mit unseren Richtlinien einverstanden, einschließlich unserer Nutzungsbedingungen und Datenschutzerklärung.

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.