Tools & ExploitsKritisch

GitHub Actions Workflow-Injection-Angriffe verhindern: Erkennung & Abwehrleitfaden

3 Min. LesezeitQuelle: GitHub Blog - Security
Bar chart showing OWASP Top 10 vulnerabilities detected by CodeQL in 2024, highlighting injection attacks as the most common risk

Erfahren Sie, wie Sie Workflow-Injection-Angriffe in GitHub Actions erkennen und abwehren. Praktische Maßnahmen zum Schutz Ihrer Repositories vor Codeausführung und Datenlecks.

GitHub Actions Workflow-Injection-Angriffe verhindern

GitHub Actions Workflow-Injections zählen laut dem GitHub Octoverse Report 2024 zu den häufigsten Sicherheitslücken in GitHub-Repositories. Diese Angriffe nutzen nicht vertrauenswürdige Eingaben in Workflows aus, um mit Workflow-Berechtigungen schädliche Befehle auszuführen. Sicherheitsverantwortliche können diese Risiken mit GitHubs integrierten Tools, sicheren Codierungspraktiken und automatisierten Scans minimieren.

Technische Details zu Workflow-Injections

Workflow-Injections in GitHub Actions entstehen, wenn Angreifer schädliche Eingaben – etwa einen Issue-Titel oder einen Branch-Namen – übermitteln, die anschließend von einem Workflow ausgeführt werden. Die Schwachstelle resultiert aus der Syntax ${{}}, die nicht vertrauenswürdige Eingaben während der Vorverarbeitung expandiert und dadurch das Workflow-Verhalten manipulieren kann. Beispiel:

- name: print title
  run: echo "${{ github.event.issue.title }}"

Ein Angreifer könnte einen Issue-Titel wie `touch pwned.txt` erstellen, der beim Ausführen des Workflows als Befehl interpretiert wird. Da Workflows oft erweiterte Berechtigungen erben, kann dies zu unautorisiertem Zugriff oder Datenexfiltration führen.

Wichtige Angriffsvektoren

  • Expansion nicht vertrauenswürdiger Eingaben: Direkte Verwendung von ${{}} in run-Befehlen.
  • Privilegienerweiterung: Workflows mit übermäßigen Berechtigungen (z. B. write-Zugriff oder Offenlegung von Secrets).
  • pull_request_target-Trigger: Umgeht Standard-Sicherheitsbeschränkungen und gewährt Fork-PRs Zugriff auf Secrets und Schreibrechte.

Auswirkungen-Analyse

Erfolgreiche Workflow-Injections können folgende Konsequenzen haben:

  • Codeausführung: Schädliche Befehle werden mit Workflow-Berechtigungen ausgeführt.
  • Datenlecks: Offenlegung von Repository-Secrets oder sensiblen Dateien.
  • Repository-Kompromittierung: Unautorisierte Änderungen an Code oder CI/CD-Pipelines.

Das Risiko erstreckt sich über den main-Branch hinaus – Angreifer können jeden öffentlich sichtbaren Branch mit anfälligen Workflows ins Visier nehmen.

Abwehrstrategien

1. Umgebungsvariablen für nicht vertrauenswürdige Eingaben

Vermeiden Sie die direkte Expansion nicht vertrauenswürdiger Eingaben in run-Befehlen. Übergeben Sie Daten stattdessen über Umgebungsvariablen:

- name: print title
  env:
    TITLE: ${{ github.event.issue.title }}
  run: echo "$TITLE"

Dies verhindert zwar keine Eingabemanipulation, begrenzt jedoch die Angriffsfläche, indem Command-Injection unterbunden wird.

2. Prinzip der minimalen Berechtigungen

Beschränken Sie Workflow-Berechtigungen mithilfe des permissions-Schlüssels für das GITHUB_TOKEN:

permissions:
  contents: read
  issues: write

Setzen Sie standardmäßig read-only-Zugriff ein, es sei denn, Schreibrechte sind explizit erforderlich.

3. Vermeiden Sie pull_request_target

Nutzen Sie pull_request anstelle von pull_request_target, um Fork-PRs den Zugriff auf Secrets oder Schreibrechte zu verwehren. Falls pull_request_target unvermeidbar ist, prüfen Sie Workflows auf Injection-Risiken und beschränken Sie Berechtigungen.

4. CodeQL-Scanning für Workflows

GitHubs CodeQL unterstützt nun das automatisierte Scannen von GitHub-Actions-Workflows. Aktivieren Sie es über:

  • Standard-Setup: Scannt automatisch geschützte Branches.
  • Erweitertes Setup: Fügen Sie actions als Zielsprache in Ihrer CodeQL-Konfiguration hinzu.

CodeQLs Taint-Tracking identifiziert Datenflüsse aus nicht vertrauenswürdigen Quellen und deckt subtile Injection-Risiken auf.

Empfehlungen

  • Alle Branches scannen: Schwachstellen in Feature-Branches können ausgenutzt werden, selbst wenn main sicher ist.
  • Kombination aus Tools und manueller Prüfung: Kein Tool ist zu 100 % effektiv – behalten Sie eine Security-First-Mentalität bei.
  • Teams schulen: Teilen Sie GitHubs vierteilige Security-Serie zur Workflow-Härtung.

Nächste Schritte

Aktivieren Sie CodeQL-Code-Scanning in Ihren Repositories, um Workflow-Injections proaktiv zu erkennen. Für erweiterte Konfigurationen fügen Sie actions als Zielsprache in Ihrem CodeQL-Setup hinzu.

Weitere Details finden Sie in der GitHub-Dokumentation zur Workflow-Sicherheit.

Teilen

TwitterLinkedIn