Skip to main content

Snyk fix: Automatische Behebung von Sicherheitslücken über die Snyk CLI

Artikel von

7. Oktober 2021

0 Min. Lesezeit

Wir freuen uns, die offene Betaphase eines ganz neuen Befehls in der Snyk CLI anzukündigen, mit dem Sie Sicherheitslücken noch einfacher finden und beheben können als bisher: den Befehl snyk fix!

Die Snyk CLI ist bereits ein äußerst vielseitiges und leistungsstarkes Tool, mit dem Entwickler:innen Sicherheitslücken in ihren Projekten finden und beheben können – manuell in ihrer lokalen Entwicklungsumgebung oder automatisiert als Teil einer CI/CD-Pipeline.

Mit snyk test können Snyk-Nutzer:innen ihr Projekt scannen und eine Liste aller gefundenen Sicherheitslücken erhalten. Gibt es für eine Abhängigkeit einen Upgrade-Pfad, der die Sicherheitslücke behebt, zeigt die Snyk CLI entsprechende Empfehlungen sowie alle nötigen Informationen zum Upgrade-Pfad und zur Behebung der Sicherheitslücke an.

Der neue Befehl snyk fix geht noch einen Schritt weiter und setzt diese Empfehlungen automatisch um. Das ist besonders hilfreich für Entwickler:innen, die im Rahmen ihres lokalen Entwicklungs-Workflows schnell Korrekturen anwenden möchten, oder für alle, die die Behebung als Teil ihrer CI/CD-Prozesse automatisieren wollen.

Bevor wir uns das genauer ansehen, hier einige Hinweise zur Verfügbarkeit und zu den unterstützten Ökosystemen:

  • Der Befehl snyk fix befindet sich in der offenen Betaphase. Bei der Nutzung können daher Probleme auftreten.

  • Derzeit werden nur Python-Projekte unterstützt, die Pip, Pipenv oder Poetry verwenden. Weitere Informationen finden Sie in der snyk fix-Dokumentation.

Legen wir los!

Snyk CLI einrichten

Als Erstes sollten Sie sicherstellen, dass die Snyk CLI installiert ist. Wenn Sie die Snyk CLI bereits kennen und installiert haben, prüfen Sie, ob Sie Version v1.715.0 oder höher verwenden.

Die Einrichtung der Snyk CLI ist ganz einfach. Sie können sie schnell mit npm oder Homebrew installieren. Anschließend müssen Sie sich nur noch mit Ihrem Snyk-Konto authentifizieren. Falls Sie noch kein Konto haben, können Sie sich hier kostenlos registrieren:

npm install -g snyk
snyk auth

Ihr Browser öffnet sich mit einer Aufforderung, die CLI zu authentifizieren. Führen Sie die Authentifizierung durch. Nun können Sie mit der Snyk CLI Ihre Projekte auf Sicherheitslücken scannen.

Führen wir die Snyk CLI zum ersten Mal aus und starten einen Test. Als Beispiel verwende ich diesen Fork des PyGoat-Projekts:

pip install -r requirements.txt
snyk test
Terminal mit `snyk test` für ein PyGoat-Projekt. Aufgeführt werden acht Sicherheitslücken in Abhängigkeiten, Upgrade-Empfehlungen und ein Lizenzproblem.

Wie die obigen Testergebnisse zeigen, hat die Snyk CLI 8 Sicherheitslücken identifiziert und Upgrade-Empfehlungen zu deren Behebung ausgegeben.

Wie geht es nun weiter? Am Ende der Testergebnisse empfiehlt die Snyk CLI, den brandneuen Befehl snyk fix zu aktivieren. Damit kommen wir zum nächsten Schritt!

snyk fix aktivieren

Wie eingangs erwähnt, befindet sich der neue Befehl snyk fix derzeit in der offenen Betaphase. Um ihn zu nutzen, müssen Sie die Funktion zunächst aktivieren. Das geht über Snyk Preview – einen eigenen Bereich in der Snyk-Benutzeroberfläche, über den Nutzer:innen auf neue Funktionen zugreifen können, die sich noch in der Entwicklung befinden.

Wechseln Sie in Snyk zu Einstellungen und anschließend zu Snyk Preview. Aktivieren Sie unter „Empfohlene Korrekturen automatisch in der CLI anwenden“ die Option snyk fix (1) und klicken Sie dann auf die Schaltfläche Änderungen speichern (2), um die Änderung zu übernehmen.

Snyk-Vorschaueinstellungen mit aktiviertem Schalter für die Behebungsfunktion und hervorgehobener Schaltfläche „Änderungen speichern“.

Sicherheitslücken in Ihrer lokalen Umgebung beheben

Nachdem wir den neuen Befehl aktiviert haben, probieren wir ihn aus. Geben Sie in der CLI Folgendes ein:

snyk fix 

Die Snyk CLI wendet automatisch die empfohlenen Versions-Upgrades an, die zur Behebung der gefundenen Sicherheitslücken erforderlich sind, sofern dies möglich ist, und gibt eine Zusammenfassung der Ergebnisse aus:

Terminal mit dem Snyk-fix-Befehl, der Python-Abhängigkeiten in requirements.txt aktualisiert und sechs Probleme erfolgreich behebt.

In unserer PyGoat-Anwendung wurden 6 von 8 Sicherheitslücken behoben. Ein weiterer Scan zeigt, dass zwei Probleme übrig sind: eine Sicherheitslücke mittleren Schweregrads im Paket Jinja2 und eine LGPLv3.0-Lizenz im Paket psycopg2.

Als nächsten Schritt können Sie die Snyk CLI Ihr Projekt kontinuierlich überwachen lassen. Sie werden benachrichtigt, sobald eine Korrektur für die verbleibende Sicherheitslücke verfügbar ist oder neue Sicherheitslücken in diesen Abhängigkeiten entdeckt werden. Verwenden Sie dazu:

snyk monitor

Sicherheitslücken als Teil Ihrer CI/CD-Prozesse beheben

Der neue Befehl snyk fix lässt sich auch verwenden, um die Behebung von Sicherheitslücken als Teil Ihrer CI/CD-Pipelines zu automatisieren. Sehen wir uns dazu ein Beispiel mit GitHub Actions an.

GitHub hat GitHub Actions eingeführt, damit Entwickler:innen ihre Workflows rund um Continuous Integration automatisieren können. Mit den GitHub Actions von Snyk lässt sich Snyk ganz einfach in diese Workflows integrieren und Sie können Ihre Projekte auf Sicherheitslücken prüfen – als Teil Ihres automatisierten CI/CD-Workflows und direkt in GitHub. Jetzt können Sie Sicherheitslücken auch im Rahmen dieses Workflows beheben.

Wir verwenden dazu diese Action, die den folgenden Workflow ausführt:

  • Init – Um schrittweise Versions-Upgrades zu vermeiden, prüft der Workflow zunächst die letzte Commit-Nachricht. So wird snyk fix nicht erneut ausgeführt, wenn der letzte Commit bereits eine automatisierte Korrektur enthielt.

  • Security – Der Workflow führt snyk fix aus, um nach Sicherheitslücken zu suchen, und erstellt einen PR, wenn ein Upgrade-Pfad gefunden wird.

Die Action ist ganz einfach zu verwenden.

Die GitHub Actions von Snyk verwenden eine Umgebungsvariable namens SNYK_TOKEN. Dabei handelt es sich um Ihr Snyk-API-Token. Rufen Sie es ab, bevor Sie die GitHub Action konfigurieren. Sie finden es in der Snyk-Benutzeroberfläche auf der Seite „Einstellungen“.

Snyk-Kontoeinstellungen mit dem Bereich „API-Token“, einem unkenntlich gemachten Token, dem Erstellungsdatum und der Schaltfläche „Widerrufen und neu generieren“

Sobald Sie das Token haben, hinterlegen Sie es in den Repository-Einstellungen unter Einstellungen | Secrets als Secret:

Geheimnisformular in GitHub Actions mit dem Namen „SNYK_TOKEN“ und einem unkenntlich gemachten Wertfeld.

Nun können Sie die Snyk Action konfigurieren. Öffnen Sie in Ihrem GitHub-Repository den Tab „Actions“ und klicken Sie oben links auf die Schaltfläche New workflow.

GitHub stellt Ihnen einige Workflow-Vorlagen bereit, die auf der Programmiersprache des Repositorys basieren. Um die Snyk GitHub Action zu konfigurieren, klicken Sie oben auf der Seite auf set up a workflow yourself:

Einrichtungsseite für GitHub Actions mit einem Pfeil, der auf den Link „Workflow selbst einrichten“ zeigt.

Ersetzen Sie den Beispielcode durch diesen Code. Achten Sie darauf, die Namen Ihrer Branches in den entsprechenden Konfigurationsbereichen einzutragen:

name: Example workflow using Snyk fix
on: pull_request
jobs:
    init:
      runs-on: ubuntu-latest
      outputs:
        skip: ${{ steps.ci-skip-step.outputs.ci-skip }}
        skip-not: ${{ steps.ci-skip-step.outputs.ci-skip-not }}
      steps:
        - uses: actions/checkout@v2
          with:
            fetch-depth: 0
        - id: ci-skip-step
          uses: mstachniuk/ci-skip@master
          with:
            commit-filter: 'Merge pull request'
    security:
      runs-on: ubuntu-latest
      needs: init
      if: ${{ needs.init.outputs.skip == 'false' }}
      steps:
        - uses: actions/checkout@master
        - name: Run Snyk to check for vulnerabilities
          uses: snyk/actions/python-3.8@master
          env:
            SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
          with: 
            command: fix # adding this option to run snyk fix
            base: master    
        - name: create a PR
          uses: peter-evans/create-pull-request@v3
          with:
            base: main
        - name: get PR info
          run: |
            echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
            echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"      
        - name: Run a multi-line script
          run: |
            echo Add other actions to build,
            echo test, and deploy your project.

Das war’s. Wenn Sie die neue Datei committen, wird ein neuer PR erstellt, der den Workflow auslöst und die automatisierte Behebung mit dem Befehl snyk fix simuliert. Sehen Sie sich diesen Workflow an, der alle Schritte veranschaulicht:

GitHub-Actions-Sicherheitsjob mit einem erfolgreichen Snyk-Workflow zum Scannen von Sicherheitslücken und abgeschlossenen Schritten.

Wie im Workflow festgelegt, wird ein neuer PR mit den empfohlenen Korrekturen erstellt:

GitHub-Pull-Request mit aktualisierten Abhängigkeitsversionen in einer requirements.txt-Datei

Probieren Sie snyk fix aus!

Einer der Gründe für die Einführung von Snyk Preview war, Nutzer:innen frühzeitig Zugriff auf Funktionen zu geben, die sich noch in der Entwicklung oder Betaphase befinden. snyk fix ist ein gutes Beispiel für eine neue Funktion, zu der wir gerne vor der offiziellen Veröffentlichung Rückmeldungen aus der Community erhalten möchten. Probieren Sie sie also aus und teilen Sie uns Ihre Meinung mit: snyk-fix-feedback@snyk.io

Weitere Informationen zur Verwendung des neuen Befehls sowie dazu, was unterstützt wird und was nicht, finden Sie in unserer snyk fix-Dokumentation.

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-Herausforderungen lösen.