Tekoälyagentit ovat siirtyneet koodin kirjoittamisesta koodin tarkistamiseen ja koodin murtamiseen. Tietoturvayhtiö Wizin julkaisema tapausselostus näyttää molemmat roolit samassa tapahtumaketjussa.

Wizin autonominen Red Agent löysi kriittisen skriptinjektiohaavoittuvuuden Snowflaken julkisesta koodivarastosta. Aukko oli syntynyt muutoksessa, jonka GitHubin tekoälyavusteinen tarkistus oli päästänyt läpi puhtaana.


Turvallinen kuvio vaihtui haavoittuvaksi

Haavoittuvuus sijaitsi snowflake-connector-net-varaston jira_issue.yml-työnkulussa. Se aktivoitui 18. kesäkuuta, kun vetopyyntö 1218 yhdistettiin päähaaraan.

Muutos poisti varastossa aiemmin käytetyn turvallisen kuvion, jossa issuen otsikko välitettiin ympäristömuuttujan kautta ja JSON-kuorma rakennettiin jq-työkalulla. Tilalle tuli otsikon suora sijoittaminen komentotulkin skriptiin.

Uusi rivi yritti suojautua sed-korvauksilla, mutta ne ajetaan vasta GitHubin mallipohjalaajennuksen jälkeen. Yksittäinen puolilainausmerkki otsikossa riittää katkaisemaan echo-komennon ja avaamaan mielivaltaisen komennon suorituksen ajurilla.

Yhdistetyn muutoksen squash-commitissa on rinnakkaistekijänä Copilot Autofix powered by AI. Wiz täsmensi julkaisuaan maanantaina: Copilot toimi tarkistajana, joka kävi läpi muutoksen ja merkitsi sen puhtaaksi havaitsematta haavoittuvuutta. Se, onko itse koodimuutos tekoälyn tuottama, jää epäselväksi.


Näyttö hämärässä huoneessa, jolla punavihreä muutosnäkymä epäterävänä

Portti, joka ei koskaan sulkeutunut

Työnkulussa oli ehto, joka näytti suojaavalta. Se vertasi vetopyynnön tekijän tunnusta erään riippuvuusbotin tunnukseen ja esti ajon, jos ne täsmäsivät.

Issues-tyyppisissä tapahtumissa vetopyyntöä kuvaava kenttä on kuitenkin aina tyhjä. Ehto supistuu vertailuun, jossa tyhjä arvo eroaa botin nimestä, eli se on aina tosi.

Käytännössä portti päästi läpi jokaisen GitHub-käyttäjän. Koska työnkulku käynnistyi issuen avaamisesta, kuka tahansa pystyi laukaisemaan sen ilman mitään oikeuksia varastoon.

Tämä on tyypillinen virheluokka, jota staattinen analyysi harvoin nappaa. Syntaksi on kelvollista, logiikka näyttää oikealta, ja vika piilee alustan tapahtumamallissa.


Raskas turvaportti ammollaan tyhjässä teollisessa käytävässä kylmässä valaistuksessa

Agentti korjasi oman hyökkäyksensä

Red Agentin CI/CD-kyvykkyys skannasi Snowflaken GitHub-organisaation ja merkitsi työnkulun haavoittuvaksi. Sen jälkeen agentti rakensi issuen otsikon, joka murtautui ulos echo-merkkijonosta ja lähetti Jira-tunnukset ulkopuoliseen osoitteeseen.

Ensimmäinen yritys epäonnistui. Agentti käytti risuaitaa loppuosan kommentoimiseen, mikä söi myös komentokorvauksen sulkevan sulkumerkin ja tuotti komentotulkin syntaksivirheen.

Agentti ei pysähtynyt tähän. Se analysoi virheilmoituksen itsenäisesti, vaihtoi hyötykuorman päättymään puolipisteeseen ja uuteen echo-komentoon ja sai kutsun läpi. Sekunneissa Wizin kuuntelija vastaanotti GitHub Actions -ajurilta base64-koodatut tunnukset.

Vuotanut tunnus tunnistautui laatutestitunnuksena Snowflaken Atlassian-ympäristöön. Se avasi lukuoikeuden yhtiön tuotekehityksen, tietoturvan vaatimustenmukaisuuden ja bugipalkkio-ohjelman projekteihin.


Tutkamainen valokeila pyyhkii palvelinkaappien ruudukkoa, yksi solmu hehkuu punaisena

Viisi päivää on uusi aikaikkuna

Aikajana on tapauksen tärkein luku. Haavoittuvuus syntyi 18. kesäkuuta ja löytyi 23. kesäkuuta. Viisi päivää riitti automatisoidulle agentille löytää se, vahvistaa se ja käyttää sitä hyväksi.

Snowflake korjasi työnkulun samana päivänä ilmoituksen jälkeen, palautti turvallisen jäsennyskuvion, mitätöi vuotaneen tunnuksen ja kierrätti sen. Lokianalyysi vahvisti, ettei kukaan ulkopuolinen käyttänyt aukkoa altistumisikkunan aikana.

Wizin johtopäätös on suoraviivainen: kun löytäminen automatisoituu, korjaussyklien on lyhennyttävä ja tunnusten elinkaaren kutistuttava. Viikkojen mittainen paikkausrytmi ei enää vastaa uhkaa.

Toinen johtopäätös koskee tekoälyn puuttuvaa muistia. Automaattinen apuri ei tiennyt, miksi turvallinen jäsennyskuvio oli alun perin valittu. Wiz suosittaa suojakaiteita, jotka estävät agentteja korvaamasta rakenteisia jäsentimiä suoralla merkkijonosijoittelulla.


Teräksinen suojakaide kaartuu tummalla kävelysillalla sinisten valojen vieressä

Yhteenveto

Tapaus ei kerro yhden työkalun epäonnistumisesta vaan kokonaisen ketjun oletuksista. Tekoälyn merkitsemä tarkistus tulkittiin katselmoinniksi, eikä ehtolauseen todellista käyttäytymistä varmistanut kukaan.

Opetus on kaksijakoinen. Tekoälyn tuottamat ja tekoälyn hyväksymät muutokset kuuluvat saman staattisen analyysin ja katselmoinnin piiriin kuin ihmisen kirjoittamat. Ja koska hyökkääjän puolella toimii jo autonomisia agentteja, CI-putken oikeudet ja tunnukset kannattaa mitoittaa sen mukaan.