Wiz' autonomer Red Agent fand eine kritische Lücke in einem öffentlichen Snowflake-Repo — fünf Tage, nachdem sie live ging — nutzte sie aus und erbeutete ein internes Jira-Token. Ob GitHub Copilot sie mitverursacht hat, ist zwischen Wiz und GitHub umstritten.
Kostenloses Erstgespräch — herstellerneutral, direkt aus dem Rheintal.
Untrusted Input gehört nie direkt in einen run:-Block. Nutze env:-Variablen plus jq --arg, prüfe if:-Bedingungen gegen den tatsächlichen Event-Typ und halte Workflow-Tokens kurzlebig — das Zeitfenster zwischen «Lücke entsteht» und «autonomer Agent findet sie» schrumpft auf Tage.
Der Sicherheitsanbieter Wiz hat am 17. August 2026 offengelegt, wie sein autonomer «Red Agent» am 23. Juni eine kritische Script-Injection-Lücke im öffentlichen Snowflake-Repository snowflakedb/snowflake-connector-net fand, ausnutzte und ein internes Jira-Token erbeutete — ohne dass ein Mensch eingriff. Die Lücke war zu diesem Zeitpunkt genau fünf Tage alt. Snowflake schloss sie noch am selben Tag und rotierte das Token einen Tag später.
Der Fehler steckte in jira_issue.yml, einem GitHub-Actions-Workflow — also einem Automatisierungsskript, das GitHub bei bestimmten Ereignissen im Repository selbst ausführt. Dieser Workflow startete, sobald irgendjemand ein Issue eröffnete, und schrieb den frei wählbaren Titel direkt in ein Shell-Kommando:
run: | TITLE=$(echo '${{ github.event.issue.title }}' | sed ...)
Ein einziges Anführungszeichen im Titel genügte, um aus der Zeichenkette auszubrechen und eigene Befehle auf dem Actions-Runner auszuführen. Ein if:-Filter hätte das eigentlich verhindern sollen — er prüfte aber github.event.pull_request.user.login, und bei einem Issue-Ereignis existiert dieses Feld gar nicht. Die Bedingung war damit immer wahr, und jeder GitHub-Nutzer kam durch.
Der Squash-Commit, mit dem die Zeile am 18. Juni auf den Hauptzweig kam, führt «Copilot Autofix powered by AI» als Co-Autor. Wiz machte daraus zunächst die Pointe: Ein KI-Autofix habe die Injection-Lücke selbst geschaffen. GitHub widerspricht. Eine interne Prüfung habe ergeben, dass die Änderungen, die zur Lücke führten, von einem Menschen geschrieben und weder von Copilot beigesteuert noch von Copilot geprüft wurden — so berichtet es Forbes. Wiz präzisierte den Blogpost noch am selben Abend um 19:57 UTC: Copilot sei Co-Autor gewesen und habe den gemergten Pull Request als unbedenklich eingestuft, ohne die Lücke zu bemerken; ob die Code-Änderung selbst KI-unterstützt war, sei unklar. Auch The Register zog eine Korrektur nach.
Ein Blick in die öffentliche Commit-Historie stützt die Zurückhaltung: Der ausdrücklich von Copilot mitgezeichnete Commit betraf eine andere Datei (jira_close.yml), während der verwundbare Umbau von jira_issue.yml aus einem separaten Commit vom 25. August 2025 stammt, den GitHub einem Snowflake-Entwickler zuschreibt. Beides wanderte erst knapp zehn Monate später mit dem Squash-Merge in den Hauptzweig. Belegt ist damit: Copilot war am Pull Request beteiligt. Nicht belegt: dass Copilot die verwundbaren Zeilen geschrieben hat. Auch Wiz' Darstellung, der Pull Request habe ein bestehendes sicheres jq-Muster ersetzt, deckt sich nicht mit dem Diff: Ersetzt wurde eine fertige Jira-Action aus dem Marketplace, das jq-Muster kam erst mit dem Fix.
Bemerkenswerter als die Schuldfrage ist, wie der Agent vorging. Sein erster Angriffsversuch scheiterte an einem Bash-Syntaxfehler — das Kommentarzeichen # verschluckte die schliessende Klammer. Statt abzubrechen, analysierte der Agent laut Wiz die Fehlermeldung selbst, baute den Payload um und erhielt im zweiten Anlauf den Rückkanal: base64-kodierte Zugangsdaten, gesendet vom GitHub-Runner. Das erbeutete Token gehörte zu qa@snowflake.net und öffnete Lesezugriff auf Snowflakes interne Jira-Projekte für Engineering, Security Compliance und Bug Bounty. Laut Wiz zeigen Snowflakes Audit-Logs im Fünf-Tage-Fenster keine Dritten — nur die Test-IPs von Wiz. Die Logs selbst sind nicht öffentlich.
Falls du selbst Repositories mit GitHub Actions betreibst: Das ist kein exotischer Sonderfall. GitHub hat diese Angriffsklasse im Juli 2025 in einem eigenen Security-Blogpost beschrieben — inklusive der Empfehlung, untrusted Input über eine Zwischenvariable zu führen.
run:-Block. Über eine env:-Variable einlesen und mit jq --arg weiterverarbeiten — genau das Muster, mit dem Snowflake die Lücke am 23. Juni geschlossen hat.if:-Bedingungen gegen den echten Event-Typ prüfen. Eine Abfrage auf ein Feld, das es beim ausgelösten Ereignis gar nicht gibt, ist kein Schutz, sondern eine offene Tür.Die eigentliche Nachricht steckt in der Zeitleiste. Fünf Tage lagen zwischen «Lücke ist live» und «autonomer Agent hat sie gefunden, ausgenutzt und den Schaden vermessen». Gal Nagli von Wiz sagte gegenüber Forbes, wer sich nicht selbst mit KI abklopfe, sei bereits im Rückstand. Dass ausgerechnet der Anbieter solcher Scanner das sagt, darf man mitdenken — die Zeitleiste bleibt trotzdem stehen.
Anthropic entschärft seine umstrittene Speicherpflicht: Die 30 Tage bleiben, aber die Daten sollen künftig in der Cloud des Kunden liegen. Laut Reuters haben über 100 Kunden am System mitgebaut – Anthropic selbst hatte die Regel im eigenen Risk Report als «unpopulär» bezeichnet. Für Schweizer Firmen verschiebt sich damit die entscheidende Frage von «wie lange» zu «bei wem».