Maaliskuussa 2026 kaksi ohjelmistopakettia oli jakelussa noin 40 minuuttia. Se riitti. Tietoturvayhtiö CloudSEK kertoo jäljittäneensä niistä yli 2 500 organisaatiota ja noin 434 000 rakennusputkea koskevan tunnusvuodon, joka on tämän vuoden laajin raportoitu tekoälyn toimitusketjuun kohdistunut murto.
Saastuneet paketit olivat LiteLLM-kirjaston versiot 1.82.7 ja 1.82.8. LiteLLM on välikappale: yritysten omat ohjelmat eivät yleensä puhu suoraan OpenAI:n, Anthropicin tai Googlen malleille, vaan lähettävät pyyntönsä tällaisen välittäjän läpi. Järjestely on kätevä, koska mallin voi vaihtaa toiseen ilman että sovellusta kirjoitetaan uusiksi. Se on myös vaarallinen, koska kaikki kulkee saman kohdan läpi.
Saastunut versio näki läpikulkevan liikenteen ja paljon muutakin. CloudSEK:n mukaan haittakoodi keräsi SSH-avaimia, pilvitunnuksia Amazonin, Googlen ja Microsoftin palveluihin, Kubernetes-tunnuksia, ympäristömuuttujia, koodivarastojen tunnuksia ja tekoälypalveluiden API-avaimia. Saalis pakattiin AES-256-salauksella ja lähetettiin joko kirjoitusvirheillä naamioituihin verkkotunnuksiin tai ladattiin liitetiedostoina kaapattuihin GitHub-tileihin.
Nokkelinta oli tapa, jolla koodi heräsi. Se asensi Python-ympäristöön niin sanotun .pth-tiedoston, joka suoritetaan aina kun Python käynnistyy. Kehittäjän ei tarvinnut kutsua LiteLLM:ää lainkaan. Riitti, että kirjasto oli asennettuna.
Mikä on CI/CD-putki?
Kun kehittäjä tallentaa uutta koodia, se ei siirry palvelimelle käsin. Automaatio hakee koodin, asentaa sen tarvitsemat kirjastot, ajaa testit ja vie valmiin tuloksen tuotantoon. Tätä liukuhihnaa kutsutaan CI/CD-putkeksi.
Putki on hyökkääjälle houkutteleva kohde, koska sen hallussa ovat kaikki julkaisuun tarvittavat avaimet: pilvipalvelujen tunnukset, tietokantasalasanat, allekirjoitusavaimet. Ja se asentaa kirjastonsa uudelleen joka ajolla, kysymättä keneltäkään.
Murto ei osunut LiteLLM:ään
Ketjussa on kolme mutkaa, ja vasta viimeinen näkyi käyttäjille. CloudSEK:n mukaan LiteLLM:ää itseään ei hyökätty vastaan lainkaan.
Alkupiste oli vuotanut automaatiotunnus. Se vaihdettiin, mutta vanhaa ei mitätöity kunnolla, ja auki jäi noin 20 päivän ikkuna. Sinä aikana hyökkääjä pystyi ylikirjoittamaan Trivy-nimisen tietoturvaskannerin koodihistorian omalla versiollaan.
Trivy on työkalu, jolla etsitään haavoittuvuuksia. LiteLLM:n rakennusputki asensi sen suoraan käyttöjärjestelmän pakettivarastosta ilman versiolukitusta, eli aina uusimman saatavilla olevan. Kun skanneri oli saastunut, se pääsi rakennusvaiheeseen automaattisesti, ja ulos tuli myrkytetty LiteLLM-julkaisu.
Yhdestä vuotaneesta tunnuksesta koko ekosysteemin laajuiseen altistumiseen. Google seuraa haittaohjelmaa nimellä SANDCLOCK, ja CloudSEK yhdistää kampanjan taloudellisesti motivoituneeseen TeamPCP-ryhmään.
20 päivää auki, 40 minuuttia jakelussa
Maaliskuu 2026
Tunnus vaihdetaan mutta jää voimaan
Vuotanutta automaatiotunnusta ei mitätöidä. Hyökkääjä pääsee muokkaamaan Trivy-skannerin koodia.
Maaliskuu 2026
Kaksi versiota PyPI:hin
LiteLLM 1.82.7 ja 1.82.8 ovat julkisessa pakettivarastossa noin 40 minuuttia. Haittakoodi kerää tunnuksia jokaisessa asennuksessa.
24.3.2026
LiteLLM poistaa versiot
Projekti tiedottaa epäillystä toimitusketjumurrosta ja vetää saastuneet versiot jakelusta.
2.7.2026
FBI:n FLASH-varoitus
FLASH-20260702-01 kertoo, että TeamPCP:n verkosto käyttää varastettuja tunnuksia vasta pitkällä viiveellä.
Elokuu 2026
Laajuus selviää
CloudSEK laskee yhteen yli 2 500 organisaatiota ja noin 434 000 putkea. Tunnusten laajasta vaihtamisesta ei ole vahvistusta.
CloudSEK:n listalla on nimiä, jotka kertovat mittakaavasta. X Corp esiintyy aineistossa 3 459 tunnuksella, S&P Global 1 218:lla ja Cisco 327:llä, joskin Ciscon kohdalla ajoja on eniten, noin 1 900. Mukana ovat myös AWS, Siemens, Samsung, Salesforce, ServiceNow, Airbus, John Deere, FedEx, Deloitte ja Orange.
Numerot kannattaa lukea tarkasti. CloudSEK merkitsee nämä korkean varmuuden osumiksi, mutta korostaa itse, että varmuus koskee osuman tunnistamista eikä sitä, olisiko hyökkääjä tosiasiassa käyttänyt tunnuksia. Yhtiön suosittelema muotoilu on ”mahdollisesti altistunut, vaatii varmistuksen”. Todistettua hyväksikäyttöä ei ole julkisesti vahvistettu yhdenkään organisaation kohdalla.
“Korkea varmuus viittaa altistumisosuman vahvuuteen, ei todisteeseen onnistuneesta murrosta tai siitä, että hyökkääjä olisi tunnuksia käyttänyt.”
Miksi elokuussa puhutaan maaliskuun murrosta
Pakettien poistaminen ei lopeta tapausta. Maaliskuussa vuotanut tunnus toimii niin kauan kuin se on voimassa, ja moni pilvipalvelun avain on voimassa vuosia tai kunnes joku muistaa vaihtaa sen. Juuri tähän FBI:n heinäkuinen varoitus perustuu: TeamPCP:hen kytköksissä olevien toimijoiden odotetaan hyödyntävän saalista pitkällä viiveellä, kun ensimmäinen kohu on laantunut.
Tavalliselle ihmiselle tämä ei näy sähköpostissa. Se näkyy siinä, että pankin, teleoperaattorin tai terveyspalvelun järjestelmiin voi olla olemassa avain, jota kukaan ei ole vaihtanut ja jonka olemassaolosta yritys ei tiedä. Tekoälyn nopea käyttöönotto on tuonut ohjelmistoihin tällaisia välikappaleita nopeammin kuin yritysten kyky valvoa niitä on kasvanut. LiteLLM on vain se, joka jäi kiinni.
Suomessa suora osumakohta on pienempi kuin Yhdysvalloissa, mutta ei olematon. Suomalaiset ohjelmistotalot käyttävät samoja avoimen lähdekoodin kirjastoja ja samoja pilvialustoja, ja moni tekee alihankintaa juuri niille yhtiöille, jotka CloudSEK:n listalla ovat. Alihankkijan putkessa oleva avain avaa tilaajan järjestelmän aivan yhtä hyvin.
Sanasto
Toimitusketjumurto
Hyökkäys, jossa ei murtauduta kohteeseen suoraan vaan saastutetaan jokin sen käyttämä ohjelmisto tai toimittaja. Uhri asentaa haittakoodin itse osana normaalia päivitystä.
Pakettivarasto (PyPI)
Julkinen kirjasto valmiita ohjelmakomponentteja, joita kehittäjät lataavat omiin ohjelmiinsa. PyPI on Python-kielen virallinen varasto.
Versiolukitus
Käytäntö, jossa ohjelmisto määrätään käyttämään tiettyä komponentin versiota eikä aina uusinta saatavilla olevaa. Ilman lukitusta saastunut päivitys päätyy käyttöön automaattisesti.
Tarkistuslista suomalaiselle kehitystiimille
1. Selvitä, onko LiteLLM-versio 1.82.7 tai 1.82.8 ollut asennettuna missään ympäristössä maaliskuun jälkeen. Katso lukitustiedostot ja vanhat rakennuslokit, älä pelkkää nykytilaa.
2. Jos osuma löytyy, vaihda kaikki tunnukset joihin kyseisellä prosessilla oli pääsy: pilvitunnukset, koodivarastojen tokenit, Kubernetes-tunnukset, pakettivarastojen julkaisuavaimet ja tekoälypalveluiden API-avaimet. Mitätöi vanhat, älä vain luo uusia rinnalle. Tästä koko ketju alun perin lähti liikkeelle.
3. Käy läpi GitHub-tilienne julkiset koodivarastot. Hyökkääjät loivat uhrien tileille julkisia varastoja silloin, kun tiedon ulossiirto ei muuten onnistunut.
4. Lukitse rakennusputken työkalut versioon ja tarkistussummaan, myös tietoturvatyökalut. Trivy asennettiin lukitsemattomana, ja se riitti.
5. Lyhennä tunnusten elinikää ja siirry mahdollisuuksien mukaan työkuormaidentiteetteihin, jolloin pitkäikäisiä avaimia ei tarvitse säilyttää putkessa lainkaan.
Viikoittainen uutiskirje
Tule firmasi fiksuimmaksi AI-osaajaksi
Yksi uutiskirje kerrallaan. Kokoamme viikon tärkeimmät tekoälyuutiset suomeksi ja kerromme, mitä ne tarkoittavat sinun työsi kannalta. Luet sen kahvitauolla.