Cybersikkerhed
Copilot Autofix Åbnede en Shell-injektion i Snowflake’s CI/CD-pipeline

En sikkerhedsrettelse skrevet af GitHub’s Copilot Autofix og flettet ind i et Snowflake‑repository den 18. juni 2026 fjernede et saneret input‑mønster og efterlod virksomhedens CI/CD‑pipeline åben for kommando‑injektion, og fem dage senere fandt en autonom AI‑forskningsagent hullet, udnyttede det og hentede fungerende Jira‑legitimationsoplysninger fra en GitHub Actions‑runner, Wiz Research afslørede den 17. august 2026.
Sårbarheden lå i jira_issue.yml, et GitHub Actions‑workflow i snowflakedb/snowflake-connector-net, det offentlige repository for Snowflakes .NET‑datakonnektor. Workflowet blev udløst, hver gang nogen åbnede et GitHub‑issue, og interpolerede issue‑titelens tekst (fuldt kontrolleret af den, der indsendte) direkte ind i et shell‑script. Da udløseren var issues: opened, kunne enhver GitHub‑konto på internettet nå den uden autentificering.
Wiz’s “Red Agent,” et autonomt sikkerhedsforskningsværktøj, der opererer gennem Snowflakes HackerOne‑bug‑bounty‑program, markerede workflowet, byggede et fungerende exploit og eksfiltrerede en Jira‑API‑token fra runnerens miljø. Snowflake rettede workflowet samme dag, den modtog rapporten, den 23. juni 2026, roterede legitimationsoplysningerne dagen efter og fortalte Wiz, at deres revisionslogfiler viste, at ingen anden aktør berørte de eksponerede systemer i løbet af fem‑dages‑vinduet.
“Autofix” fjernede sanitisatoren
Den commit, der introducerede det injicerbare mønster, landede gennem PR #1218, “SNOW-2069227: Update jira workflows”, flettet den 18. juni 2026. Pull‑requestens historik viser en menneskelig forfatter, der har arbejdet på Jira‑automatiseringen siden august 2025 — og halvvejs gennem, et commit med medforfatter Copilot Autofix powered by AI, GitHub Advanced Security‑botten, der genererer foreslåede rettelser til kode‑scannings‑alarmer.
AI‑forslaget ændrede, hvordan workflowet håndterede issue‑titlen. Den eksisterende kode sendte titlen gennem en env:-variabel og byggede sit JSON‑payload med jq --arg, et mønster der holder ubetroet tekst ude af shellen. Den foreslåede erstatning droppede dette til fordel for direkte streng‑ekspansion:
“ run: | TITLE=$(echo '${{ github.event.issue.title }}' | sed 's/"/\"/g' | sed "s/'/\'/g") “
sed-escapingen kører efter, at GitHubs skabelonmotor allerede har indsat titlen i scriptet. Et enkelt apostrof i titlen bryder ud af echo '...'-indpakningen, og alt efter det udføres som shell. GitHubs egen dokumentation for Copilot Autofix beskriver funktionen som at generere “en enkelt foreslået rettelse til en alarm, som du selv gennemgår og anvender” — gennemgangstrinnet er, hvor denne kom igennem.
Workflowet indeholdt også en beskyttelsesbetingelse, der så ud til at begrænse, hvem der kunne udløse det:
“ if: (github.event_name == 'issues' && github.event.pull_request.user.login != 'whitesource-for-github-com[bot]') “
Ved issue‑begivenheder er github.event.pull_request altid null, så sammenligningen evalueres altid til sand. Alle GitHub‑brugere kom igennem porten.
En agent på hver side af udnyttelsen
Red Agents første eksfiltrationsforsøg fejlede. Dens payload brugte et #-kommentar‑tegn til at opsluge resten af den injicerede linje, men kommentaren indtog også den afsluttende parentes i TITLE=$(...), og runneren returnerede en bash‑syntaksfejl i stedet for at udføre. Ifølge Wiz’s write‑up analyserede agenten fejlen, omskrev sin payload for at lukke shell‑blokken med ; echo ', og prøvede igen.
Den fungerende payload, leveret som en issue‑titel, base64‑kodede runnerens JIRA_API_TOKEN, JIRA_USER_EMAIL og JIRA_BASE_URL-miljøvariabler og sendte dem til en out‑of‑band‑lytter via curl. Callback‑en ankom fra en Azure‑hostet GitHub Actions‑runner inden for få sekunder.
Den genvundne token autentificerede som [email protected] mod snowflakecomputing.atlassian.net, med læseadgang på tværs af Snowflakes engineering‑, sikkerheds‑compliance‑ og bug‑bounty‑sporingsprojekter.
Snowflakes afhjælpning, flettet ind i PR #1402 den 23. juni 2026, genoprettede den sikre env:-variabel og jq --arg-parsingsmønstret. Jira‑tokenet blev tilbagekaldt og roteret den 24. juni 2026. Wiz sagde, at de sikkert slettede alle data, der blev tilgået under deres proof‑of‑concept‑test.
“Snowflake værdsætter Wiz’s ansvarlige rapportering af og samarbejde omkring disse fund gennem vores sårbarheds‑offentliggørelses‑ og bug‑bounty‑program, HackerOne,” udtalte virksomheden i en erklæring offentliggjort sammen med Wiz‑rapporten. “Offentliggørelsen blev modtaget den 23. juni 2026, og den blev straks undersøgt og afhjulpet, og vores undersøgelse fandt ingen tegn på uautoriseret adgang.”
Hvad fem‑dages‑vinduet viser
Offentliggørelsen falder midt i et dokumenteret mønster: AI‑assisterede ændringer, der bevæger sig gennem gennemgangen hurtigere end sikkerhedsantagelserne omkring dem. Snowflakes egne revisionslogfiler er det, der gør denne hændelse læsbar: de gør det muligt for virksomheden at erklære, og for Wiz at bekræfte, at eksponeringsvinduet ikke medførte tredjepartsadgang. Snowflakes analyse af revisionslogfiler bekræftede, at ingen eksterne tredjeparter tilgik endpointet i løbet af fem‑dages‑vinduet.
Tidslinjen komprimerer også en sekvens, som branchen har betragtet som hypotetisk. En kodeassistent fjernede et defensivt mønster, der var indført specifikt for at forhindre shell‑injektion, fordi assistenten ikke havde nogen registrering af, hvorfor mønstret eksisterede. En offensiv agent fandt derefter resultatet og udnyttede det inden for dage, selvkorrigerende sit exploit mod live‑fejloutput. Exploit‑siden kørte uden et menneske ved tastaturet; på kode‑siden genererede AI’en ændringen, men et menneske anvendte forslaget og flettede det — hvilket er præcis det gennemgangstrin, der fejlede.
Wiz’s rapport anbefaler, at AI‑genererede pull‑requests gennemgår den samme statiske analyse som menneskelig kode, at teams forkorter levetiden for legitimationsoplysninger for at matche automatiserede opdagelseshastigheder, og at sikkerhedsforanstaltninger blokerer agenter fra at erstatte strukturerede parsere med direkte strenginterpolation. Check Point flyttede prompt‑inspektion for AI‑trafik ind i virksomhedens firewalls tidligere på sommeren, og Unite.AI har dækket agent‑sandbox‑undvigelser og agent‑systemer, der når reelle produktionsmål efterhånden som den offensive side modnes. Snowflake‑incidenten er den samme historie fortalt indefra en CI‑pipeline: sårbarheden var aktiv i fem dage, og den eneste grund til, at den læses som en case‑studie frem for en brudmeddelelse, er hvilken agent der nåede den først.












