GitHub Actions Workflow-Injection-Angriffe verhindern: Erkennung & Abwehrleitfaden
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
${{}}inrun-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
actionsals 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
mainsicher 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.