almessadi.
Zur Übersicht

Behandeln Sie Ihre Abhängigkeiten und CI-Pipeline als Angriffsfläche_

Sicherheit in der Lieferkette betrifft nicht nur verwundbare Pakete. Sie umfasst auch Aktions-Pinning, Token-Bereich, Vertrauen in Artefakte und die Trennung privilegierter Workflows.

Veröffentlicht22. April 2024
Lesezeit6 min read

Die meisten Teams denken bei Risiken in der Lieferkette an "Hat npm audit etwas Schlechtes gefunden?"

Das ist nur ein kleiner Teil des Problems.

Eine moderne JavaScript-Lieferpipeline vertraut auf:

  • die Pakete, die Sie installieren
  • die transitive Pakete, die sie installieren
  • die GitHub-Aktionen, die Sie ausführen
  • die Tokens, auf die diese Workflows zugreifen können

Das ist eine bedeutende Angriffsfläche, insbesondere wenn CI die Berechtigung hat, Kommentare zu PRs abzugeben, Pakete zu veröffentlichen, Infrastruktur bereitzustellen oder in den Standardbranch zu pushen.

Der erste einfache Gewinn: Externe Aktionen pinnen

Das ist schwächer, als viele Teams erkennen:

uses: vendor/example-action@v2

Das Tag kann sich ändern.

Wenn Sie auf Drittanbieteraktionen angewiesen sind, pinnen Sie auf einen vollständigen Commit-SHA und überprüfen Sie Updates gezielt:

uses: vendor/example-action@8f4b7f84864484a7bf31766abe9204da3cbe65b3

Das macht die Aktion nicht sicher. Es macht die Vertrauensentscheidung explizit und überprüfbar.

Untrusted Execution von Privileged Execution trennen

Eine der besseren Workflow-Muster ist:

  1. Tests und Build-Schritte in einem unprivilegierten Workflow ausführen
  2. Artefakte hochladen
  3. Ein separater vertrauenswürdiger Workflow lässt diese Artefakte verwenden, wenn er Geheimnisse oder Schreibberechtigungen benötigt

Das verringert die Chance, dass untrusted Pull-Request-Code mit einem Token ausgeführt wird, das das Repository oder die Bereitstellungsumgebung verändern kann.

Minimieren Sie den Token-Bereich

Wenn ein Workflow nur Lesezugriff benötigt, geben Sie ihm Lesezugriff.

Wenn er Kommentare zu einem PR abgeben muss, erlauben Sie ihm nicht auch, Inhalte zu schreiben, Pakete zu verwalten oder Infrastruktur bereitzustellen.

Zu viele Pipelines scheitern an der einfachsten Regel der Sicherheitsengineering: Halten Sie den Schadenradius klein.

Paket-Sicherheit ist immer noch Teil davon

Sie sollten auch die Abhängigkeitshygiene als normale Betriebsarbeit behandeln:

  • Halten Sie Lockfiles im Commit
  • Überprüfen Sie größere Abhängigkeitänderungen
  • Entfernen Sie Pakete, die Sie nicht benötigen
  • Bevorzugen Sie etablierte Maintainer für kritische Pfade

Das ist nicht glamouröse Arbeit. Es ist, wie Software verteidigbar bleibt.

Weiterführende Literatur