Kyberturvallisuus
Copilot Autofix avasi Shell-injektion Snowflaken CI/CD-putkessa

GitHubin Copilot Autofixin kirjoittama tietoturvakorjaus, joka yhdistettiin Snowflaken repositorioon 18. kesäkuuta 2026, poisti puhdistetun syötemallin ja jätti yrityksen CI/CD-putken avoimeksi komento‑injektiolle, ja viisi päivää myöhemmin autonominen tekoälytutkimusagentti löysi aukon, käytti sitä hyväksikäyttöön ja poimi toimivat Jira‑tunnistetiedot GitHub Actions -ajurilta, Wiz Research paljasti 17. elokuuta 2026.
Haavoittuvuus sijaitsi tiedostossa jira_issue.yml, GitHub Actions -työnkulussa snowflakedb/snowflake-connector-net, julkisessa repositoriossa Snowflaken .NET‑datakytkimelle. Työnkulku käynnistyi aina, kun joku avasi GitHub‑ongelman, ja se upotti ongelman otsikon (teksti täysin hakijan hallussa) suoraan shell‑skriptiin. Koska laukaisija oli issues: opened, mikä tahansa internetin GitHub‑tili pystyi saavuttamaan sen ilman todennusta.
Wizin “Red Agent”, autonominen turvallisuustutkimustyökalu, joka toimii Snowflaken HackerOne‑bug bounty -ohjelman kautta, merkkasi työnkulun, rakensi toimivan hyväksikäytön ja poimi Jira API -tokentin ajurin ympäristöstä. Snowflake korjasi työnkulun samana päivänä, kun se sai raportin, 23. kesäkuuta 2026, kiersi tunnistetiedon päivän kuluttua ja kertoi Wizille, että audit‑logit eivät näyttäneet muun toimijan koskettaneen altistuneita järjestelmiä viiden päivän ikkunan aikana.
„Autofix“ poisti puhdistimen
Sitoutuminen, joka toi injektoitavan mallin, saapui PR #1218, “SNOW-2069227: Update jira workflows” kautta, yhdistetty 18. kesäkuuta 2026. Vedonpyynnön historia osoittaa ihmisen tekijän työskentelevän Jira‑automaatiossa elokuusta 2025 lähtien — ja puolivälissä commitin, jonka mukana kirjoitti Copilot Autofix powered by AI, GitHub Advanced Security -botti, joka luo ehdotettuja korjauksia koodin skannaushälytyksiin.
AI‑ehdotus muutti tapaa, jolla työnkulku käsitteli ongelman otsikkoa. Nykyinen koodi siirsi otsikon env:-muuttujan kautta ja rakensi JSON‑payloadin jq --arg-mallilla, mikä pitää epäluotettavan tekstin pois shellistä. Ehdotettu korvaus poisti sen suoran merkkijonolaajennuksen hyväksi:
“ run: | TITLE=$(echo '${{ github.event.issue.title }}' | sed 's/"/\"/g' | sed "s/'/\'/g") “
sed-pakotus suoritetaan sen jälkeen, kun GitHubin mallimoottori on jo korvannut otsikon skriptiin. Yksittäinen lainausmerkki otsikossa rikkoo echo '...'-kääreen, ja kaikki sen jälkeen suoritetaan shellinä. GitHubin oma dokumentaatio Copilot Autofixille kuvaa ominaisuuden tuottavan “yksi ehdotettu korjaus hälytykseen, jonka tarkastelet ja otat itse käyttöön” — tarkastusvaihe on se, jossa tämä pääsi läpi.
Työnkulku sisälsi myös suojavaatimuksen, joka näytti rajoittavan sitä, kuka voi käynnistää sen:
“ if: (github.event_name == 'issues' && github.event.pull_request.user.login != 'whitesource-for-github-com[bot]') “
Ongelmatapahtumissa github.event.pull_request on aina null, joten vertailu arvioituu aina todeksi. Jokainen GitHub‑käyttäjä läpäisi portin.
Agentti jokaisella hyökkäyksen puolella
Red Agentin ensimmäinen tietojen poimintayritys epäonnistui. Sen payload käytti #-kommenttimerkkiä nielemään injektoidun rivin lopun, mutta kommentti myös kulutti TITLE=$(...)-sulkevan sulkumerkin, ja ajuri palautti bash‑syntaksivirheen sen sijaan, että se olisi suorittanut. Wizin kirjoituksen mukaan agentti analysoi virheen, kirjoitti payloadin uudelleen sulkemaan shell‑lohkon ; echo '-komennolla ja yritti uudelleen.
Toimiva payload, toimitettuna ongelman otsikkona, base64‑koodasi ajurin JIRA_API_TOKEN-, JIRA_USER_EMAIL– ja JIRA_BASE_URL-ympäristömuuttujat ja lähetti ne ulkopuoliselle kuuntelijalle curlin kautta. Paluuviesti saapui Azure‑hostatusta GitHub Actions -ajurista sekunneissa.
Palautettu token todenmansi qa@snowflake.net-tilinä snowflakecomputing.atlassian.net-palvelussa, antaen lukuoikeudet Snowflaken insinööri‑, tietoturva‑yhteensopivuus‑ ja bug bounty -seurantaprojekteihin.
Snowflaken korjaus, yhdistetty PR #1402 23. kesäkuuta 2026, palautti turvallisen env:-muuttujan ja jq --arg-jäsennysmallin. Jira‑token peruutettiin ja kierrätettiin 24. kesäkuuta 2026. Wiz kertoi, että se poisti turvallisesti kaikki konseptitestauksen aikana käytetyt tiedot.
“Snowflake arvostaa Wizin vastuullista raportointia ja yhteistyötä näiden löydösten ympärillä haavoittuvuuksien ilmoitus- ja bug bounty -ohjelmamme, HackerOne, kautta,” yritys sanoi Wizin raportin kanssa julkaistussa lausunnossa. “Ilmoitus vastaanotettiin 23. kesäkuuta 2026, ja se tutkittiin ja korjattiin välittömästi, eikä tutkimuksemme löytänyt todisteita luvattomasta pääsystä.”
Mitä viiden päivän ikkuna näyttää
Ilmoitus sijoittuu dokumentoidun mallin keskelle: tekoälyavusteiset muutokset kulkevat tarkastuksen läpi nopeammin kuin niiden ympärillä olevat turvallisuusolettamukset. Snowflaken omat audit‑logit tekevät tästä tapauksesta luettavan: ne antavat yrityksen väittää, ja Wiz vahvistaa, että altistumisikkuna ei tuottanut kolmannen osapuolen pääsyä. Snowflaken audit‑lokianalyysi vahvisti, ettei ulkoiset kolmannet osapuolet päässeet päätepisteeseen viiden päivän ikkunan aikana.
Aikajana myös tiivistää sarjan, jonka alaala on pitänyt hypoteettisena. Koodausavustaja poisti puolustavan mallin, joka oli asetettu nimenomaan estämään shell‑injektiota, koska avustajalla ei ollut tietoa siitä, miksi malli oli olemassa. Hyökkäävä agentti löysi ja aseisti tuloksen päivissä, korjaten itse hyökkäyksensä live‑virhevastauksen perusteella. Hyökkäyspuoli toimi ilman ihmistä näppäimistön äärellä; koodauspuolella tekoäly loi muutoksen, mutta ihminen toteutti ehdotuksen ja yhdisti sen — juuri se tarkastusvaihe, joka epäonnistui.
Wizin raportti suosittelee, että AI:n luomat pull requestit käyvät läpi saman staattisen analyysin kuin ihmiskoodi, että tiimit lyhentävät tunnistetietojen elinkaaria vastaamaan automaattisen löytämisen nopeutta, ja että suojarakenteet estävät agenteja korvaamasta rakenteellisia jäseniä suoraan merkkijonolaajennuksella. Check Point siirsi AI‑liikenteen kehotteiden tarkastuksen yritystulolaseihin tänä kesänä, ja Unite.AI on käsitellyt agenttien hiekkalaatikkopakoja sekä agenttipohjaisia järjestelmiä, jotka saavuttavat todelliset tuotantotavoitteet kun hyökkäävä puoli kehittyy. Snowflake‑tilanne on sama tarina kerrottuna CI‑putken sisästä: haavoittuvuus oli aktiivinen viisi päivää, ja ainoa syy, miksi se luetaan tapaustutkimukseksi eikä tietomurtoilmoitukseksi, on se, kumpi agentti pääsi sinne ensin.












