Cybersäkerhet
Copilot Autofix öppnade en skalinjicering i Snowflakes CI/CD-pipeline

En säkerhetsfix skriven av GitHubs Copilot Autofix och sammanslagen i ett Snowflake‑repo den 18 juni 2026 tog bort ett sanerat inmatningsmönster och lämnade företagets CI/CD‑pipeline öppen för kommandoinjektion, och fem dagar senare hittade en autonom AI‑forskningsagent hålet, utnyttjade det och extraherade fungerande Jira‑uppgifter från en GitHub Actions‑körare, Wiz Research avslöjade den 17 augusti 2026.
Sårbarheten fanns i jira_issue.yml, ett GitHub Actions‑arbetsflöde i snowflakedb/snowflake-connector-net, det offentliga repot för Snowflakes .NET‑datakontakt. Arbetsflödet kördes varje gång någon öppnade ett GitHub‑ärende och interpolerade ärendets titel (text som helt kontrolleras av den som skapade ärendet) direkt i ett skal‑skript. Eftersom triggern var issues: opened kunde vilket GitHub‑konto som helst på internet nå det utan autentisering.
Wiz:s ”Red Agent”, ett autonomt säkerhetsforskningsverktyg som opererar via Snowflakes HackerOne‑bug‑bounty‑program, flaggade arbetsflödet, byggde ett fungerande exploit och exfiltrerade en Jira‑API‑token från körarens miljö. Snowflake patchade arbetsflödet samma dag som rapporten mottogs, den 23 juni 2026, roterade autentiseringsuppgifterna dagen därpå och informerade Wiz om att deras audit‑loggar visade att ingen annan aktör rörde de exponerade systemen under femdagarsfönstret.
“Autofix” tog bort saneraren
Committen som introducerade det injicerbara mönstret landade via PR #1218, “SNOW-2069227: Update jira workflows”, sammanslagen 18 juni 2026. Pull‑requestens historik visar en mänsklig författare som arbetat med Jira‑automatiseringen sedan augusti 2025 — och, halvvägs igenom, ett commit med medförfattare av Copilot Autofix driven av AI, GitHub Advanced Security‑boten som genererar föreslagna fixar för kodskanningslarm.
AI‑förslaget ändrade hur arbetsflödet hanterade ärendetiteln. Den befintliga koden skickade titeln via en env:-variabel och byggde sin JSON‑payload med jq --arg, ett mönster som håller opålitlig text ute ur skalet. Det föreslagna ersättningsalternativet tog bort det till förmån för direkt strängexpansion:
“ run: | TITLE=$(echo '${{ github.event.issue.title }}' | sed 's/"/\"/g' | sed "s/'/\'/g") “
Sed‑escapingen körs efter att GitHubs mallmotor redan har ersatt titeln i skriptet. Ett enkelt apostrof i titeln bryter ur echo '...'-omslaget, och allt efter det körs som skal. GitHubs egen dokumentation för Copilot Autofix beskriver funktionen som att generera ”ett enda föreslaget fix för ett larm, som du granskar och tillämpar själv” — granskningssteget är där detta kom igenom.
Arbetsflödet hade också ett skyddsvillkor som verkade begränsa vem som kunde trigga det:
“ if: (github.event_name == 'issues' && github.event.pull_request.user.login != 'whitesource-for-github-com[bot]') “
Vid ärendehändelser är github.event.pull_request alltid null, så jämförelsen utvärderas alltid som sann. Alla GitHub‑användare passerade grinden.
En agent på varje sida av exploaten
Red Agents första exfiltrationsförsök misslyckades. Dess payload använde ett #-kommentartecken för att svälja resten av den injicerade raden, men kommentaren åt också den avslutande parentesen i TITLE=$(...), och köraren returnerade ett bash‑syntaxfel istället för att exekvera. Enligt Wiz:s rapport analyserade agenten felet, skrev om sin payload för att stänga skalblocket med ; echo ' och försökte igen.
Den fungerande payloaden, levererad som en ärendetitel, base64‑kodade körarens JIRA_API_TOKEN, JIRA_USER_EMAIL och JIRA_BASE_URL-miljövariabler och skickade dem till en out‑of‑band‑lyssnare via curl. Återkopplingen kom från en Azure‑hostad GitHub Actions‑körare inom några sekunder.
Den återvunna tokenen autentiserade som qa@snowflake.net mot snowflakecomputing.atlassian.net, med läsåtkomst till Snowflakes ingenjörs-, säkerhets‑ och efterlevnadsprojekt samt bug‑bounty‑spårningsprojekt.
Snowflakes åtgärd, sammanslagen i PR #1402 den 23 juni 2026, återställde den säkra env:-variabeln och jq --arg-parsingsmönstret. Jira‑tokenen revokerades och roterades den 24 juni 2026. Wiz uppgav att de säkert raderade all data som nåddes under deras proof‑of‑concept‑testning.
“Snowflake uppskattar Wiz:s ansvarsfulla rapportering och samarbete kring dessa fynd genom vårt sårbarhets‑disclosures‑ och bug‑bounty‑program, HackerOne,” sade företaget i ett uttalande som publicerades tillsammans med Wiz‑rapporten. “Upplysningen mottogs den 23 juni 2026, och den undersöktes och åtgärdades omedelbart, och vår utredning fann inga bevis på obehörig åtkomst.”
Vad femdagarsfönstret visar
Upplysningen hamnar mitt i ett dokumenterat mönster: AI‑assisterade förändringar som går igenom granskning snabbare än de säkerhetsantaganden som omger dem. Snowflakes egna audit‑loggar är det som gör incidenten läsbar: de låter företaget påstå, och Wiz bekräfta, att exponeringstiden inte resulterade i någon tredje‑parts åtkomst. Snowflakes audit‑logganalys bekräftade att inga externa tredje‑parter nådde slutpunkten under femdagarsfönstret.
Tidslinjen komprimerar också en sekvens som branschen har betraktat som hypotetisk. En kodassistent tog bort ett defensivt mönster som placerats specifikt för att förhindra skalinjicering, eftersom assistenten saknade information om varför mönstret fanns. En offensiv agent fann sedan resultatet och beväpnade det inom dagar, självkorrekterade sitt exploit mot live‑felutdata. Exploit‑sidan kördes utan någon människa vid tangentbordet; på kod‑sidan genererade AI:n förändringen men en människa tillämpade förslaget och sammanslog det — vilket exakt var granskningssteget som misslyckades.
Wiz:s rapport rekommenderar att AI‑genererade pull‑requests går igenom samma statiska analys som mänsklig kod, att team förkortar credential‑livstider för att matcha automatiserade upptäcktshastigheter, och att skyddsmekanismer hindrar agenter från att ersätta strukturerade parsers med direkt stränginterpolation. Check Point flyttade promptinspektion för AI‑trafik till företagsbrandväggar tidigare i sommar, och Unite.AI har täckt agent‑sandbox‑flykt och agentiska system som når verkliga produktionsmål när den offensiva sidan mognar. Snowflake‑incidenten är samma historia berättad inifrån en CI‑pipeline: sårbarheten var aktiv i fem dagar, och den enda anledningen den läses som en fallstudie snarare än ett intrångsmeddelande är vilken agent som kom först.












