Symptom: Ein Workflow zeigt möglicherweise Zugangsdaten, oder ein selbst gehosteter Mac Runner verhält sich unerwartet.
Schnellste Reaktion: Pausieren Sie den verdächtigen Workflow, isolieren Sie den betroffenen Runner, sperren oder rotieren Sie möglicherweise exponierte Zugangsdaten und prüfen Sie Logs sowie Berechtigungen. Erst nach geklärtem Umfang, bereinigter Umgebung und einem Test mit vertrauenswürdigem Code darf der Runner wieder Aufgaben annehmen.
Dieser Ablauf ist für Sie gedacht, wenn Sie als unabhängiger Entwickler eigene öffentliche oder private Repositories bauen, als Freiberufler für Kundenprojekte Runner-Zugriffe verantworten oder in einem kleinen Remote-Team auf verdächtige Workflows und Pull Requests reagieren. Eine einzelne Warnung beweist noch keinen erfolgreichen Diebstahl; sie verlangt aber eine nachvollziehbare Prüfung.
Erste Einordnung: Warnsignal oder bestätigte Offenlegung?
Behandeln Sie einen Alarm zunächst als Hinweis, nicht als abschließenden Beweis. Ein bestätigtes Geheimnisleck liegt vor, wenn ein konkreter Wert in einem zugänglichen Log oder Artefakt auftaucht, ein nicht autorisierter Zugriff nachweisbar ist oder ein Anbieter den Missbrauch eines Zugangsmittels bestätigt. Ein ungewöhnlicher Workflow, eine fehlgeschlagene Anmeldung oder ein Pull Request aus unbekannter Quelle begründet dagegen erst einmal einen Verdacht.
Das ändert nichts an der ersten Reaktion: Stoppen Sie die mögliche weitere Exposition, ohne vorschnell Beweise zu löschen. Notieren Sie den Workflow-Namen, den betroffenen Branch, den auslösenden Ereignistyp, den Zeitpunkt und den Runner. Sichern Sie die für Ihre Untersuchung notwendigen Logs nach den Vorgaben Ihrer Organisation. GitHub beschreibt in der Anleitung zum Anzeigen und Verwenden von Workflow-Logs, wie Sie Laufprotokolle einsehen und herunterladen. Behandeln Sie gespeicherte Logs dabei selbst als möglicherweise sensible Daten.
Achten Sie auf drei voneinander unabhängige Hinweise:
- Log- oder Artefaktinhalt: Ist ein Token, Passwort, privater Schlüssel oder anderer vertraulicher Wert tatsächlich lesbar? Prüfen Sie auch Testausgaben, Build-Artefakte und Diagnoseprotokolle, soweit sie für den Vorfall relevant sind.
- Workflow-Quelle und Ereignis: Welcher Code wurde ausgeführt? Stammt er aus einem vertrauenswürdigen Branch, einem Fork oder einem externen Beitrag?
- Runner-Verhalten: Gibt es Änderungen am Arbeitsverzeichnis, an installierten Werkzeugen, an Startskripten oder an Zugriffsrechten, die sich nicht mit dem erwarteten Build erklären lassen?
Die GitHub-Dokumentation zur sicheren Verwendung von Actions weist darauf hin, dass selbst gehostete Runner nicht garantiert in einer sauberen, isolierten temporären Umgebung laufen. Nicht vertrauenswürdiger Workflow-Code kann daher mehr als nur den aktuellen Job betreffen: Er kann auch die Runner-Umgebung oder erreichbare Zugangsdaten gefährden. Beenden Sie bei konkreten Anzeichen einer Veränderung nicht nur den einzelnen Job; verhindern Sie auch, dass derselbe Host weitere Aufgaben erhält.
Verdächtige Ausführung: Pull Requests und Trigger prüfen
Wie erkennen Sie, ob Workflow-Code aus einem Pull Request Zugangsdaten erreichen konnte?
Prüfen Sie zuerst den Trigger und den tatsächlich ausgeführten Code. Stellen Sie fest, ob das Repository Pull Requests aus Forks annimmt, welche Freigaben vor dem Start eines Workflows erforderlich waren und ob ein privilegiertes Ereignis mit Code aus einem nicht vertrauenswürdigen Beitrag kombiniert wurde. Lesen Sie dazu die Workflow-Datei, den Pull Request und den Ausführungsverlauf gemeinsam; ein Triggername allein beantwortet nicht, welcher Code auf dem Mac lief.
Besondere Aufmerksamkeit verdient pull_request_target. GitHub erklärt in der Sicherheitsdokumentation zu pull_request_target, dass dieser Ereignistyp mit den Berechtigungen des Basis-Repositories ausgeführt wird. Wenn ein Workflow anschließend nicht vertrauenswürdigen Pull-Request-Code auscheckt und ausführt, kann dadurch eine gefährliche Kombination entstehen. Prüfen Sie, ob der Workflow Code aus dem Beitrag tatsächlich ausführt, nicht nur, ob der Ereignistyp im YAML vorkommt.
Die Dokumentation zur Syntax von Workflows erläutert, wie Berechtigungen für GITHUB_TOKEN festgelegt werden. Vergleichen Sie die angeforderten Rechte mit dem tatsächlichen Arbeitsbedarf. Ein Token mit weitreichenden Schreibrechten vergrößert den möglichen Schaden, wenn der Workflow oder Runner kompromittiert wurde. Vergeben Sie nicht pauschal mehr Rechte, um einen fehlgeschlagenen Job „schnell wieder zum Laufen“ zu bringen.
Auch Freigaberegeln sind Teil der Untersuchung. Prüfen Sie, wer einen Workflow genehmigen darf, ob geschützte Umgebungen beteiligt sind und ob Geheimnisse an diesen Umgebungen gebunden sind. Versuchen Sie nicht, Prüfungen oder Freigaben zu umgehen, um einen Build wieder aufzunehmen. Wenn Ihr Team die Freigabe bislang nicht eindeutig geregelt hat, bleibt der Runner bis zur Klärung aus der Aufgabenverteilung.
Protokolle und Zugangsdaten: Umfang eingrenzen
Wenn ein Log verdächtige Inhalte enthält, behandeln Sie den betreffenden Wert als kompromittiert, bis Sie seine Art und Reichweite geklärt haben. Automatische Maskierung ist kein Nachweis dafür, dass ein Geheimnis nie sichtbar war. Die Dokumentation zu GitHub Secrets beschreibt die Maskierung von Werten in Logs und ihre Grenzen. Auch ein teilweise verborgenes Token kann Hinweise auf eine Offenlegung liefern; umgekehrt schließt ein unauffälliges Log eine anderweitige Nutzung nicht aus.
Ordnen Sie den möglichen Wert ein, bevor Sie Zugangsdaten rotieren. Ein Repository-Secret kann für Workflows dieses Repositories verfügbar sein; ein Environment-Secret kann an bestimmte Umgebungs- und Freigaberegeln gebunden sein. GITHUB_TOKEN ist ein von GitHub für einen Workflow bereitgestelltes Token, dessen Rechte von der Workflow-Konfiguration abhängen. Ein separat hinterlegter Cloud-, Signier- oder Paket-Registry-Schlüssel folgt dagegen den Regeln des jeweiligen Dienstes. GitHub beschreibt den Zweck und die Verwendung des GITHUB_TOKEN; daraus folgt nicht, dass andere Zugangsdaten automatisch ungültig oder geschützt sind.
Sperren oder widerrufen Sie zuerst die Zugangsdaten, bei denen eine Nutzung durch Unbefugte plausibel ist. Ersetzen Sie sie anschließend an der zuständigen Stelle und ändern Sie die Workflows so, dass nur notwendige Jobs und Umgebungen darauf zugreifen. Kontrollieren Sie danach, ob das alte Credential tatsächlich abgewiesen wird. Testen Sie diese Ungültigkeit kontrolliert und ohne den Wert erneut in ein Log oder Artefakt zu schreiben. Eine erfolgreiche Rotation allein beweist nicht, dass ein bereits kompromittierter Runner bereinigt ist.
Prüfen Sie zudem, ob das verdächtige Geheimnis außerhalb von GitHub verwendet wurde. Falls es Zugang zu einem externen Dienst, einem Kundenkonto oder einer Signaturfunktion bot, gelten dessen Sperr-, Prüf- und Benachrichtigungswege zusätzlich. Halten Sie fest, wer die Rotation veranlasst hat und welche Systeme betroffen sind, ohne die Geheimniswerte in ein Incident-Dokument zu kopieren.
Runner isolieren: Zustand sichern, Aufgaben stoppen
Pausieren Sie die betroffenen Workflows oder verhindern Sie die weitere Zuweisung von Jobs an den Runner. Die genaue Maßnahme hängt davon ab, wie Ihr Team Runner registriert und verwaltet. Entscheidend ist, dass ein verdächtiger Host während der Prüfung nicht unbemerkt weitere Builds ausführt. Trennen Sie ihn nach Ihrem Incident-Prozess vom Netz, sofern dies für die Untersuchung erforderlich und organisatorisch freigegeben ist. Dokumentieren Sie die Maßnahme und den Zeitpunkt.
Führen Sie auf dem Host keine neuen Builds aus, nur um zu prüfen, ob „alles noch funktioniert“. Ein Job kann erneut Code ausführen und dabei mögliche Veränderungen überschreiben oder weitere Zugangsdaten verfügbar machen. Sichern Sie die erforderlichen Informationen nach dem Verfahren Ihrer Organisation und halten Sie den Kreis der Personen mit Zugriff klein. Wenn Kunden-Repositories betroffen sein könnten, klären Sie die Zuständigkeit für Untersuchung und Benachrichtigung anhand der vereinbarten Verantwortlichkeiten.
Die Registrierung eines Runners ist nicht dasselbe wie die Bereinigung des Rechners. GitHub stellt eine Anleitung zum Entfernen selbst gehosteter Runner bereit. Entfernen oder deaktivieren Sie die Registrierung, wenn der Runner nicht mehr sicher eingesetzt werden kann. Ob Sie ihn anschließend neu registrieren dürfen, entscheidet sich aber erst nach dem Zustand des Hosts und dem geltenden Incident-Prozess. Eine neue Registrierung entfernt keine möglichen Änderungen, die bereits auf dem Mac vorhanden sind.
Wenn ein Runner tatsächlich nicht vertrauenswürdigen Code ausgeführt hat, behandeln Sie die Umgebung als potenziell verändert, bis die zuständige technische Stelle sie geprüft und freigegeben hat. Je nach Befund kann eine Neuinstallation oder ein Neuaufbau erforderlich sein. Der konkrete Schritt muss mit dem Organisationsprozess übereinstimmen; aus der bloßen Tatsache einer Registrierung lässt sich keine sichere Wiederherstellung ableiten.
Wiederanlauf: erst Bereinigung, dann kontrollierter Test
Geben Sie den Runner nicht allein deshalb wieder frei, weil keine weiteren Warnungen aufgetaucht sind. Vereinbaren Sie einen nachvollziehbaren Freigabepunkt: Die verdächtigen Workflows sind gestoppt, betroffene Zugangsdaten wurden bewertet und gegebenenfalls widerrufen, die Runner-Umgebung wurde nach dem zuständigen Verfahren geprüft und Berechtigungen sowie Trigger wurden kontrolliert.
Nutzen Sie für die Wiederaufnahme einen eng begrenzten Workflow mit vertrauenswürdigem Code. Er sollte keine unnötigen Secrets erhalten und keine weitreichenden Schreibrechte benötigen. Prüfen Sie, ob der erwartete Build erfolgreich ist, ob der Runner den freigegebenen Zustand hat und ob alte Zugangsdaten abgewiesen werden. Bei Kundenprojekten muss außerdem klar sein, wer den Runner wieder freigibt und wer die Überprüfung der Kunden-Zugangsdaten verantwortet.
Machen Sie die erneute Registrierung von einem konkreten Befund abhängig: Ist der Host nach dem vorgesehenen Verfahren bereinigt oder neu aufgebaut? Ist seine Zugriffsbeschränkung überprüft? Sind alte Registrierungsmöglichkeiten und betroffene Secrets unwirksam? Wenn eine dieser Antworten offen ist, bleibt der Runner pausiert. Ein neuer Registrierungsschlüssel oder eine neue Runner-Verknüpfung ersetzt weder eine Host-Prüfung noch die Rotation eines möglicherweise exponierten Tokens.
Für Teams mit wechselnden Standorten und Geräten ist auch der Zugriff auf den Arbeitsrechner Teil der Sicherheitsplanung. Prüfen Sie die Datenschutzhinweise zur Arbeitsumgebung und gleichen Sie sie mit Ihren Anforderungen an Kunden- und Build-Daten ab. Informationen zu Rechenzentren und Hosting-Standorten sollten Sie ebenfalls prüfen, bevor Sie sensible Projekte auf eine verwaltete Umgebung verlagern. Daraus lässt sich keine bestimmte Isolierung oder Incident-Reaktion ableiten; diese Punkte müssen Sie anhand der tatsächlichen Leistungsbeschreibung und Zuständigkeiten verifizieren.
Entscheidungstabellen für Eindämmung und Freigabe
Die folgenden Vergleiche helfen, Verdacht, nachgewiesene Offenlegung und eine mögliche Host-Kompromittierung auseinanderzuhalten. Sie ersetzen keine Vorgaben Ihrer Organisation.
| Befund | Einordnung | Sofortige Maßnahme | Bedingung für den nächsten Schritt |
|---|---|---|---|
| Unerwarteter Workflow, aber kein konkreter Zugangsdatenfund | Verdacht, Umfang offen | Workflow pausieren und Trigger, Codequelle sowie Logs prüfen | Erst fortfahren, wenn der ausgeführte Code und seine Rechte nachvollziehbar sind |
| Zugangsdatenwert in einem zugänglichen Log oder Artefakt | Offenlegung plausibel oder bestätigt | Betroffenen Wert widerrufen oder rotieren und Zugriff auf das Material begrenzen | Alten Wert kontrolliert auf Ungültigkeit prüfen |
| Runner führte nicht vertrauenswürdigen Code aus oder zeigt unerklärliche Änderungen | Host möglicherweise kompromittiert | Runner aus der Aufgabenverteilung nehmen und nach Incident-Prozess isolieren | Keine Wiederaufnahme vor Host-Prüfung und Freigabe |
| Nur ein Job schlägt fehl, ohne Sicherheitsindikator | Kein Beleg für ein Leck | Fehlerursache prüfen, dabei keine Zugangsdaten ausgeben | Sicherheitsmaßnahmen nicht durch unkontrollierte Debug-Ausgaben ersetzen |
| Möglicher Wert | Wo prüfen | Reaktion bei plausibler Offenlegung | Kontrollierte Abschlussprüfung |
|---|---|---|---|
| Repository-Secret | Repository-Einstellungen und betroffene Workflows | Secret widerrufen oder ersetzen; Nutzung auf notwendige Jobs begrenzen | Alte Version wird vom Zielsystem abgewiesen |
| Environment-Secret | Zugeordnete Umgebung, Freigaben und Workflow-Zugriff | Wert ersetzen und Zugriffs- sowie Freigaberegeln kontrollieren | Nicht berechtigte Jobs erhalten keinen Zugriff |
GITHUB_TOKEN |
Workflow-Berechtigungen und ausgeführte Aktionen | Rechte minimieren und betroffene Ausführung untersuchen | Workflow benötigt nur die vorgesehenen Berechtigungen |
| Externes Credential | Zuständiger Anbieter oder Dienst | Nach dessen Verfahren widerrufen oder rotieren | Nutzung des alten Werts ist beim Zielsystem nicht mehr möglich |
| Wiederanlaufoption | Geeignet, wenn | Grenze | Entscheidung |
|---|---|---|---|
| Bestehenden Runner nach Prüfung freigeben | Verantwortliche Stellen haben den Zustand geprüft und die Freigabe dokumentiert | Nicht geeignet, wenn Änderungen oder Persistenz ungeklärt sind | Nur mit belegter Freigabe fortsetzen |
| Runner entfernen und Umgebung neu aufbauen | Der Host könnte verändert worden sein oder der Befund ist nicht sicher auflösbar | Neuaufbau allein ersetzt keine Credential-Rotation | Host und Zugangsdaten getrennt behandeln |
| Runner pausiert lassen | Zuständigkeit, Befund oder Kundenfreigabe ist offen | Builds bleiben unterbrochen | Sicherer als ein ungeprüfter Wiederanlauf |
| Auf eine verwaltete Mac-Umgebung wechseln | Sie möchten eigene Hardware nicht dauerhaft betreiben und können Zuständigkeiten vorab prüfen | Mietbetrieb löst weder Workflow-Fehler noch Rechteprobleme automatisch | Vorher Zugriff, Isolation und Datenverantwortung klären |
Vom eigenen Mac zum gemieteten Mac: Zuständigkeiten vergleichen
Ein eigener, selbst gehosteter Mac bietet direkte Kontrolle über Hardware und Umgebung, bringt bei Reisen oder kleinen Teams aber laufenden Wartungsaufwand mit sich: Sie müssen Updates und Zugriffsschutz organisieren, Verfügbarkeit und Wiederherstellung selbst planen und im Vorfall die Host-Prüfung übernehmen. Ein verwalteter Mac kann den Bedarf an eigener Hardware vor Ort verringern und den Zugriff auf eine macOS-Umgebung erleichtern. Er nimmt Ihnen jedoch nicht die Pflicht ab, Workflow-Berechtigungen zu begrenzen, Kundenzugangsdaten zu schützen und die tatsächliche Isolierung sowie Incident-Zuständigkeit vorab zu prüfen.
Wenn Sie nach der Eindämmung eine gehostete Mac-Umgebung erwägen, vergleichen Sie Ihre Anforderungen mit dem konkreten Leistungsumfang von macminirent, bevor Sie Runner oder sensible Repositories verlagern. Prüfen Sie insbesondere, welche Zugriffsrechte Sie erhalten, wer Host und Betriebssystem verwaltet und wie Sie Zugangsdaten und Vorfälle handhaben. Für temporäre Tests oder einen projektbezogenen macOS-Arbeitsplatz kann ein gemieteter Mac angenehmer sein als ein ständig mitgeführter oder selbst gewarteter Rechner. Für dauerhafte Hochlast, erforderliche physische Schnittstellen oder Vorgaben, die nur Ihre eigene Infrastruktur erfüllt, kann der eigene Mac weiterhin die passendere Wahl sein.
Weiterlesen
Richten Sie Ihren CI-Runner auf einem dedizierten Mac von macminirent ein
macminirent stellt Ihnen einen eigenen physischen Mac mini bereit, dessen Rechenleistung und lokaler Speicher nicht mit anderen Mietern geteilt werden.
