Kybernetická bezpečnost
Copilot Autofix otevřel shellovou injekci v CI/CD pipeline společnosti Snowflake

Bezpečnostní oprava napsaná Copilot Autofix od GitHubu a sloučená do repozitáře Snowflake dne 18. června 2026 odstranila vzor sanitovaného vstupu a ponechala CI/CD pipeline společnosti otevřenou pro příkazovou injekci; o pět dní později autonomní výzkumný AI agent objevil díru, využil ji a získal funkční přihlašovací údaje k Jira z běžícího GitHub Actions runneru, Wiz Research oznámil 17. srpna 2026.
Zranitelnost se nacházela v souboru jira_issue.yml, workflowu GitHub Actions v snowflakedb/snowflake-connector-net, veřejném repozitáři .NET konektoru Snowflake. Workflow se spustil vždy, když někdo otevřel GitHub issue, a vložil název issue (text plně řízený osobou, která issue vytvořila) přímo do shell skriptu. Protože spouštěč byl issues: opened, mohl k němu přistupovat jakýkoli GitHub účet na internetu bez autentizace.
„Red Agent“ od Wiz, autonomní nástroj pro bezpečnostní výzkum fungující v rámci bug bounty programu Snowflake na HackerOne, označil workflow, vytvořil funkční exploit a odcizil Jira API token z prostředí runneru. Snowflake opravil workflow tentýž den, kdy obdržel hlášení, 23. června 2026, o den později rotoval pověření a informoval Wiz, že auditní logy neukazují žádného dalšího aktéra, který by během pětideního okna zasáhl do vystavených systémů.
The “Autofix” Removed the Sanitizer
Commit, který zavedl injekční vzor, byl přidán prostřednictvím PR #1218, “SNOW-2069227: Update jira workflows”, sloučen 18. června 2026. Historie pull requestu ukazuje lidského autora pracujícího na automatizaci Jira od srpna 2025 — a v průběhu toho byl vytvořen commit spoluautorský s Copilot Autofix powered by AI, botem GitHub Advanced Security, který generuje navrhované opravy pro upozornění při skenování kódu.
Návrh AI změnil způsob, jakým workflow zpracovával název issue. Stávající kód předával název přes proměnnou env: a vytvářel JSON payload pomocí jq --arg, což je vzor, který drží nedůvěryhodný text mimo shell. Navrhovaná náhrada to nahradila přímým rozšířením řetězce:
“ run: | TITLE=$(echo '${{ github.event.issue.title }}' | sed 's/"/\"/g' | sed "s/'/\'/g") “
Escapování pomocí sed probíhá poté, co šablonovací engine GitHubu již vložil název do skriptu. Jednoduchá uvozovka v názvu prolomí obal echo '...' a vše, co následuje, se spustí jako shell. Dokumentace GitHubu k Copilot Autofix popisuje funkci jako generování „jednoho navrhovaného řešení pro upozornění, které si sami zkontrolujete a použijete“ — krok revize je místo, kde tento návrh prošel.
Workflow také obsahoval podmínku ochrany, která vypadala, že omezuje, kdo jej může spustit:
“ if: (github.event_name == 'issues' && github.event.pull_request.user.login != 'whitesource-for-github-com[bot]') “
U událostí issue je github.event.pull_request vždy null, takže porovnání vždy vyhodnotí pravdu. Každý uživatel GitHubu tak prošel branou.
An Agent on Each Side of the Exploit
První pokus Red Agentu o exfiltraci selhal. Jeho payload použil znak # pro komentář, aby pohltil zbytek injekčního řádku, ale komentář také pohltil závěrečnou závorku TITLE=$(...), a runner vrátil syntaktickou chybu bash místo provedení. Podle zprávy Wiz agent analyzoval chybu, přepsal svůj payload tak, aby uzavřel shellový blok pomocí ; echo ', a zkusil to znovu.
Funkční payload, doručený jako název issue, zakódoval base64 proměnné prostředí runneru JIRA_API_TOKEN, JIRA_USER_EMAIL a JIRA_BASE_URL a odeslal je mimo pásmo posluchači pomocí curl. Odezva přišla z Azure-hostovaného GitHub Actions runneru během několika sekund.
Získaný token se autentizoval jako [email protected] vůči snowflakecomputing.atlassian.net s oprávněním ke čtení napříč projekty Snowflake v oblasti inženýrství, bezpečnostní shody a sledování bug bounty.
Oprava Snowflake, sloučená v PR #1402 dne 23. června 2026, obnovila bezpečnou proměnnou env: a vzor parsování jq --arg. Jira token byl odvolán a rotován 24. června 2026. Wiz uvedl, že bezpečně smazal veškerá data přístupná během testování proof-of-concept.
“Snowflake oceňuje odpovědné hlášení a spolupráci společnosti Wiz na těchto zjištěních prostřednictvím našeho programu pro zveřejňování zranitelností a bug bounty, HackerOne,” uvedla společnost ve prohlášení publikovaném spolu se zprávou Wiz. “Zpráva byla přijata 23. června 2026, byla okamžitě prošetřena a opravena a naše šetření nenašlo žádné důkazy o neoprávněném přístupu.”
What the Five-Day Window Shows
Zveřejnění spadá doprostřed dokumentovaného vzoru: změny asistované AI procházejí revizí rychleji než bezpečnostní předpoklady kolem nich. Vlastní auditní logy Snowflake jsou tím, co činí tento incident čitelným: umožňují společnosti uvést a Wiz potvrdit, že během okna expozice nedošlo k žádnému přístupu třetí strany. Analýza auditních logů Snowflake potvrdila, že během pětideního okna k žádnému přístupu externích třetích stran k endpointu nedošlo.
Časová osa také zhušťuje sekvenci, kterou průmysl považoval za hypotetickou. Asistent pro kódování odstranil obranný vzor, který byl zaveden konkrétně k prevenci shellové injekce, protože asistent neměl záznam o tom, proč tento vzor existuje. Útočný agent pak během několika dní našel a zneužil výsledek, sám si opravoval exploit na základě výstupu chyb v reálném čase. Útočná strana běžela bez člověka u klávesnice; na straně kódování AI vygenerovala změnu, ale člověk aplikoval návrh a sloučil jej — což je přesně ten revizní krok, který selhal.
Zpráva Wiz doporučuje, aby AI-generované pull requesty procházely stejnou statickou analýzou jako lidský kód, aby týmy zkracovaly životnost pověření tak, aby odpovídala rychlosti automatického objevování, a aby ochranné zábrany blokovaly agenty před nahrazováním strukturovaných parserů přímým řetězcovým interpolací. Check Point přesunul kontrolu promptů pro AI provoz do podnikových firewallů na začátku tohoto léta, a Unite.AI pokryl úniky agentních sandboxů a agentické systémy dosahující reálných produkčních cílů jak útočná strana dozrává. Incident Snowflake je stejný příběh vyprávěný zevnitř CI pipeline: zranitelnost byla aktivní pět dní a jediný důvod, proč je prezentována jako případová studie místo oznámení o narušení, je který agent se dostal první.












