Tekoälyagentin komentojen hyväksyminen on nykyisten koodausagenttien tärkein turvamekanismi. Uusi aineisto viittaa siihen, että mekanismi vuotaa pahasti.
Kehittäjä Alex Wauters julkaisi Scale X -blogissaan tilastot selainpelistä, jossa pelaaja toimii tekoälyagentin hyväksyjänä. Aineistoa kertyi yli 40 000 pelikierroksesta ja 409 000 yksittäisestä hyväksy tai estä -päätöksestä.
Mitä aineisto kertoo
Keskimääräinen pelaaja ohitti joka kolmannen uhan. Tarkkuuden keskiarvo jäi 66,3 prosenttiin.
Lähes kolmannes kierroksista päättyi negatiiviseen tulokseen. Hyväksytyistä uhista ja estetyistä turvallisista komennoista kertyneet sakot ylittivät kaiken oikein tehdyn 32,9 prosentissa peleistä.
Kaikki uhat nappasi 35,2 prosenttia pelaajista. Vain 20,8 prosenttia onnistui siinä estämättä samalla yli viidennestä turvallisista komennoista. Loput pääsivät täydelliseen torjuntaan estämällä käytännössä kaiken. Seitsemän prosenttia pelaajista hyväksyi jokaisen kehotteen.
Luvut on syytä lukea varauksella. Kyseessä oli aikapaineinen peli, jossa noin 34 prosenttia komennoista oli uhkia. Oikeassa työssä uhkia esiintyy huomattavasti harvemmin, ja pelaajat tiesivät olevansa testattavina.
Uhkien harvinaisuus arjessa ei kuitenkaan paranna tilannetta. Se pikemminkin heikentää valppautta, koska satojen turvallisten komentojen jälkeen hyväksyminen muuttuu refleksiksi. Peli mittasi tarkkaavaisuutta olosuhteissa, joissa uhka oli poikkeuksellisen todennäköinen.

Vaarallisin komento näyttää harmittomalta
Uhkatyyppien väliset erot ovat aineiston kiinnostavin havainto. Ilmiselvästi tuhoavat komennot, kuten rm -rf / tai laaja oikeuksien avaaminen, jäivät huomaamatta vain 11,7 prosentissa tapauksista.
Pysyvät muutokset, kuten crontab-injektio tai git-asetusten kaappaus, ohitettiin 23,8 prosentissa. Tietojen ulosvienti ja koodin suoritus tuntemattomiin rajapintoihin meni läpi 33,4 prosentissa. Oikeuksien ylitykset, kuten tunnistetiedostojen lukeminen, ohitettiin 35,0 prosentissa.
Toisin sanoen kaikkein tuhoisimman näköinen komento torjutaan luotettavasti. Se komento, joka oikeasti vie tunnistetiedot ulos, menee läpi kolme kertaa useammin.
Pelin useimmin ohitettu komento oli npm run analyze, jonka hyväksyi 64,7 prosenttia pelaajista. Komento itsessään on tavallisesti viaton, mutta se ajaa mitä tahansa projektin package.json-tiedostoon kirjattua skriptiä. Pelin lokissa skriptin sisältö näkyi, ja se putkitti tulokset curl-komennolla ulkopuoliseen osoitteeseen. Kaksi kolmesta hyväksyi silti.

Lupaväsymys ja liiallinen estäminen
Anthropic on aiemmin todennut lupaväsymyksen olevan todellinen ilmiö Claude Codessa. Mitä enemmän hyväksyntöjä käyttäjä näkee, sitä vähemmän hän kiinnittää kuhunkin huomiota.
Sama näkyy aineistossa. Ohitusprosentti laskee ensimmäisten komentojen jälkeen, mutta kääntyy nousuun kierroksen loppua kohti. Ilmiö toistuu riippumatta siitä, kuinka monta komentoa pelaaja ehti käsitellä.
Ongelman toinen puoli on turhien estojen määrä. Sisäisen pakettipeilin asettaminen komennolla npm config set registry estettiin 59 prosentissa tapauksista. Käännöskansion tyhjentäminen komennolla rm -rf dist/ estettiin 45 prosentissa ja jumiin jääneen portin vapauttaminen 43 prosentissa.
Kiistanalaisin komento oli kotihakemiston shell-asetusten lukeminen, jonka hyväksyi 45,9 prosenttia. Riski riippuu täysin siitä, säilyttääkö kehittäjä rajapinta-avaimia kyseisessä tiedostossa. Agentti ei näe tätä eroa, eikä usein näe sitä hyväksyjäkään.
Turhat estot eivät ole vain hidaste. Ne opettavat kehittäjää pitämään kyselyitä kohinana, mikä valuu ajan myötä myös oikeisiin uhkiin. Liian herkkä lupamalli tuottaa siis juuri sen välinpitämättömyyden, jota vastaan se on rakennettu.

Mitä tästä seuraa automaatiolle
Komentokohtainen hyväksyntä perustuu oletukseen, että komennon teksti kertoo sen vaikutuksen. Agenttien tapauksessa oletus ei päde.
Agentti on voinut ennen hyväksyntäkyselyä muokata package.json-tiedostoa, kirjoittaa haitallista koodia käännösskriptiin tai riippuvuuden sisään. Mikään näistä ei välttämättä vaadi erillistä lupaa. Hyväksyttävänä oleva komento näyttää tällöin täsmälleen samalta kuin eilen, vaikka se tekee jotain aivan muuta.
Käytännön suojaukset ovat siksi muualla kuin kyselyikkunassa. Agentin ajaminen hiekkalaatikossa rajaa vahingon silloinkin, kun hyväksyntä menee väärin. Salaisuuksien siirtäminen shell-asetuksista erilliseen tiedostoon pienentää sitä, mitä agentti voi ylipäätään lukea.
Automaattiset esitarkastukset, kuten Anthropicin Auto Mode, pyrkivät päättelemään komennon turvallisuuden ennen kysymistä. Ne vähentävät kohinaa mutta eivät poista ongelmaa. Mitä enemmän kyselyitä jää jäljelle, sitä varmemmin niiden laatu ratkaisee enemmän kuin määrä.
Aineisto antaa myös suoran ohjeen kyselyiden suunnitteluun. Pelaajat eivät lukeneet kehotteen yläpuolella näkynyttä lokia, vaikka siitä olisi selvinnyt komennon todellinen sisältö. Olennainen tieto on tuotava itse hyväksyntäriville, ei sen viereen.

Yhteenveto
Aineisto on kerätty pelistä eikä oikeasta työstä, ja se on syytä pitää mielessä. Suunta on silti selvä: ihminen silmukassa on heikko suoja juuri niitä komentoja vastaan, jotka aidosti vievät tietoa ulos.
Kehittäjätiimin kannattaa suhtautua hyväksyntäikkunaan viimeisenä eikä ensimmäisenä puolustuslinjana. Hiekkalaatikointi, salaisuuksien eristäminen ja kyselyiden määrän karsiminen tekevät enemmän kuin tarkkaavaisuuden vaatiminen.
