jqecho '…'Myöhemmin käytetty sed-suodatus ei voinut korjata ongelmaa, koska GitHub oli jo laajentanut lausekkeen ennen shellin suorittamaa komentoa. Tässä vaiheessa hyökkääjän syöte oli siis jo tulkittu osaksi komentoriviä.
Työnkulun issues: opened
Muutoksen tekijätiedoissa Copilot Autofix powered by AI mainittiin kanssatekijänä, eikä tekoälyavusteinen tarkistus nostanut ongelmaa esiin. Saatavilla oleva näyttö ei kuitenkaan osoita, loiko Copilot vaarallisen muutoksen vai tarkasteliko se ihmisen tekemää muutosta ja jätti haavoittuvuuden huomaamatta. Täsmällisin johtopäätös on, että Copilot liittyi muutokseen eikä havainnut injektiota – mallin varmaa tekijyyttä ei ole osoitettu.
Wizin Red Agent analysoi Snowflaken julkista GitHub-organisaatiota etsien riskialttiita CI/CD-malleja. Se tunnisti Jira-työnkulun, jossa epäluotettavaa ongelman tietoa käytettiin shellin run:-lohkossa, ja päätteli, että erityisesti muotoiltu julkinen ongelman otsikko voisi johtaa komentojen mielivaltaiseen suorittamiseen GitHubin ylläpitämällä Actions-suorittimella.
Kyse ei ollut luvattomasta tunkeutumisesta vaan hyväksytystä tietoturvatestistä. Löydön tekninen merkitys oli silti todellinen: julkisen ongelman avaaminen saattoi johtaa koodin suorittamiseen työnkulussa, joka käsitteli sisäisiä tunnistetietoja.
Hyödynnetyllä työnkululla oli käytössään Snowflaken sisäisen Jiran asetuksia, kuten Jiran osoite, käyttäjän sähköpostiosoite ja API-tunnus. Palautunut tunnus liittyi osoitteeseen qa@snowflake.net. Wiz käytti sitä kirjautuakseen sisäiseen Jira-portaaliin ja arvioidakseen mahdollista altistumista.
Raportoinnin mukaan tunnuksella oli lukuoikeus projekteihin, jotka liittyivät muun muassa suunnitteluun, tietoturvan vaatimustenmukaisuuteen ja bug bounty -toimintaan. Saatavilla oleva näyttö ei kuitenkaan määritä tunnuksen koko oikeusjoukkoa eikä luettele lopullisesti kaikkia tietueita, joihin sillä olisi ollut pääsy. Vahvin tuettu johtopäätös on, että tunnus mahdollisti pääsyn arkaluonteiseen sisäiseen Jira-sisältöön – ei rajoittamatonta pääsyä Snowflaken järjestelmiin.
Haavoittunut kohde oli repositorion CI/CD-automaatio. Julkaistusta Snowflake Connector for .NET -versiosta ei raportoitu haavoittunutta versiota, koska ongelma oli GitHub Actions -työnkulussa, ei liittimen ajonaikaisessa koodissa.
Wiz ilmoitti haavoittuvuudesta 23. kesäkuuta. Snowflake korjasi työnkulun samana päivänä ja vaihtoi altistuneen Jira-tunnuksen seuraavana päivänä.
Snowflake tarkasteli tämän jälkeen lokitietoja ja ilmoitti, että Wiz oli ainoa toimija altistumisjakson aikana. Wiz puolestaan kertoi poistaneensa turvallisesti käyttämänsä konseptitodisteen tiedot.
Luvattomasta kolmannen osapuolen pääsystä ei raportoitu. Tapaukselle ei ilmoitettu CVE-tunnusta, eikä yhdenkään julkaistun liitinversion raportoitu kärsineen ongelmasta. Nämä rajaukset kuvaavat vahvistettua vaikutusta, mutta eivät tee alkuperäisestä työnkulkusuunnittelusta turvallista: julkisen ongelman otsikon ei olisi pitänyt päästä osaksi shell-komentoa työnkulussa, joka käsitteli sisäisiä tunnistetietoja.
Snowflaken tapaus ulottuu Copilotia laajemmalle. GitHub-lausekkeista peräisin olevia ongelmien ja pull requestien otsikoita, haarojen nimiä ja kommentteja on käsiteltävä vihamielisenä syötteenä aina, kun ne siirtyvät shell-komennon käsiteltäväksi.
Turvallisempi työnkulkusuunnittelu sisältää esimerkiksi seuraavat käytännöt:
run:-skripteihin.jq:lla, älä kokoamalla shell-merkkijonoja käsin.Tapaus tiivistää uudenlaisen tietoturvariskin: yksi tekoälyavusteinen koodausjärjestelmä voi jättää vaarallisen CI/CD-muutoksen huomaamatta, kun taas autonominen hyökkäysagentti löytää ja todentaa sen muutamassa päivässä. Automaatio voi nopeuttaa sekä korjaamista että hyväksikäyttöä – mutta se ei korvaa riippumatonta tarkistusta.