Mistä on kyse
Tietoturvayhtiö Aikido julkaisi viime viikolla raportin, jonka mukaan Googlen API-avaimet jäävät toimimaan keskimäärin 16 minuuttia ja pisimmillään 23 minuuttia sen jälkeen, kun kehittäjä on poistanut avaimen Google Cloudista. Lyhin havaittu poistoviive oli noin 8 minuuttia.
Käytännössä tämä tarkoittaa, että jos kehittäjä huomaa avaimen vuotaneen esimerkiksi julkiseen GitHub-arkistoon ja poistaa sen välittömästi, hyökkääjä ehtii edelleen tehdä kutsuja Geminiin, BigQueryyn tai muuhun käytössä olevaan rajapintaan. Aikidon mittauksissa onnistumisprosentti vaihteli minuuteittain: joinakin minuutteina yli 90 prosenttia kutsuista meni läpi.
Tutkija Joseph Leon kuvasi tulosta blogissaan ennakoimattomaksi. Hyökkääjä voi yksinkertaisesti toistaa samaa pyyntöä, kunnes se osuu palvelimeen joka ei ole vielä saanut tietoa avaimen mitätöinnistä. Haavoittuvuus koskee kaikkia rajapintoja, joihin sama avain on kytketty, eli ei pelkästään Geminin tekoälykutsuja vaan myös esimerkiksi Cloud Visionia ja Mapsia.
Kymppitonnin lasku puolessa tunnissa
Aiheen vakavuus näkyy yksittäisten kehittäjien laskuissa. Yhdysvaltalaisen Prentus-yhtiön toimitusjohtaja Rod Danan kertoi TechCrunchille saaneensa noin puolen tunnin ikkunan aikana 10 138 dollarin laskun, kun hänen API-avaimensa joutui hyökkääjän käsiin.
Sydneyläinen kehittäjä Isuru Fonseka raportoi vielä isommasta yllätyksestä: noin 17 000 Australian dollarin lasku, vaikka hän kuvitteli 250 dollarin kuukausikaton olevan voimassa. Google oli automaattisesti nostanut hänen laskutustasonsa 100 000 dollarin rajalle, eikä erillistä lupaa korotukseen kysytty.
Tämä on monille uutinen sinänsä. Google Cloudissa kuukausikatto ei tarkoita kovaa kattoa, vaan järjestelmä korottaa tilin tasoa automaattisesti, kun käyttö lähestyy ylärajaa. Molemmat kehittäjät saivat lopulta hyvitykset, mutta Google on ilmoittanut, ettei se aio muuttaa automaattista tasonkorotusta. Yhtiön mukaan palvelun jatkuvuus on rajoituksia tärkeämpää.
Miksi propagaatio kestää näin kauan
API-avaimen tarkistus ei tapahdu yhdessä paikassa. Google ajaa kutsuja kymmenissä alueissa ja sadoissa palvelimissa, ja tieto avaimen mitätöinnistä leviää näiden välillä vaiheittain. Osa palvelimista saa tiedon sekunneissa, osa vasta minuuteissa. Sillä välin sama avain joko menee läpi tai ei mene, riippuen täysin siitä mihin solmuun kutsu osuu.
Vertailun vuoksi service account -tunnukset peruuntuvat Googlen omissa testeissä noin viidessä sekunnissa, ja Geminin uudempi AQ-alkuinen avainmuoto noin minuutissa. Aikidon Leonin mukaan tämä todistaa, ettei vanhempien API-avainten viive ole tekninen välttämättömyys vaan arkkitehtuurivalinta.
Google merkitsi alkuun Aikidon raportin tilaan Won't Fix (Infeasible) ja kommentoi, että poiston propagaatioviive toimii suunnitellusti. Perjantaina 22. toukokuuta yhtiö kuitenkin avasi raportin uudelleen ja luokitteli sen P0-tason vakavuudeksi. Korjausaikataulusta ei ole annettu tietoa.
Suomi-kulma: kuinka moni on jo maksanut
Suomalaiset kehittäjät ja yritykset käyttävät Geminiä laajasti niin sovelluskehityksessä kuin sisäisissä työkaluissa, koska hinnoittelu on ollut Googlella alusta asti houkutteleva. Kyberturvallisuuskeskuksen viikkokatsauksissa ei toistaiseksi näy avoimesti raportoituja tapauksia tästä nimenomaisesta haavoittuvuudesta, mutta tilanne todennäköisesti muuttuu kun yritykset käyvät läpi laskutushistoriaansa.
WithSecure ja muut suomalaiset tietoturvayhtiöt ovat varoittaneet pilvitilien laskutusrajojen heikkouksista jo ennen Aikidon raporttia. Kyberturvallisuuskeskus on suositellut avainten kierrättämistä tasaisin väliajoin ja salaisuuksien hallintaa Secret Managerin kaltaisilla työkaluilla. Nyt nuo neuvot saavat kouriintuntuvan hintalapun.
Käytännössä jokaisen suomalaisen tiimin, joka käyttää Googlen API-avaimia, kannattaa tarkistaa kaksi asiaa: ovatko avaimet missään sellaisessa paikassa missä ne eivät kuulu (julkiset arkistot, sisäiset chatit, sähköpostit, vanhat docker-imaget), ja onko Google Cloudin laskutustilin tasonkorotus rajattu manuaaliseksi.
Mitä tehdä jos avain vuotaa
Poista avain Google Cloud Consolesta heti, mutta älä luota poiston olevan välitön. Vaihda kaikki sovellukset uudelle avaimelle ja seuraa lokeja ainakin 30 minuuttia poiston jälkeen.
Aseta Google Cloudin laskutustili manuaaliselle tasolle, ei automaattiselle. Kytke laskutushälytys ja varaa kovan rajan automaatio, kuten Cloud Function joka sammuttaa projektin tietyllä summalla. Vaihda mahdollisuuksien mukaan AQ-alkuiseen uudempaan avainmuotoon tai service account -tunnukseen, joiden mitätöinti on nopeampaa.



