Tekoäly

Mato piiloutui tekoälyavustajan asetuksiin

Sadat npm-paketit saastuivat alle neljässä tunnissa. Skannerit eivät nähneet mitään.

Hanna HuulivuoHanna Huulivuo
Jaa:
Mato piiloutui tekoälyavustajan asetuksiin

Elokuun neljäntenä päivänä npm-rekisteriin ilmestyi sarja päivityksiä, joita kukaan ei ollut pyytänyt. Alle neljässä tunnissa haittakoodi oli levinnyt 444 pakettiin ja 2 212 versioon. Mukana oli keyv, jota ladataan yli 150 miljoonaa kertaa viikossa.

Luvut vaihtelevat lähteestä toiseen, koska laskenta jatkui yhä hyökkäyksen aikana. BleepingComputer raportoi 868 paketista ja 1 381 versiosta, ja päivän päättyessä puhuttiin jo yli 1 300 paketista. Microsoft nimesi kampanjan ChainDropiksi ja julkaisi siitä analyysin samana päivänä.

Mittakaava ei kuitenkaan ole se, mikä sai tietoturvaväen hiljaiseksi. Se on piilopaikka.

Riippuvuusskanneri ei katso sinne, minne mato meni

ChainDrop pääsee koneelle tavanomaista reittiä. Se ajetaan npm:n preinstall-koukusta, siis ennen kuin asennus ehtii edes valmistua. Koodi toimii ennen kuin useimmat tarkistukset heräävät, sekä kehittäjän koneella että CI/CD-putkessa.

Sen jälkeen se tekee jotain, mitä aiemmat npm-madot eivät ole tehneet. Haittakoodi kirjoittaa itsensä repositorion asetustiedostoihin. Microsoftin mukaan kohteena ovat Claude Coden ja Visual Studio Coden konfiguraatiot, muun muassa asetus- ja käynnistystiedostot, jotka editori tai koodausavustaja lukee automaattisesti projektin avautuessa.

Nämä tiedostot ovat riippuvuusskannerien katvealuetta. Skanneri lukee package.jsonin ja lukkotiedoston, laskee riippuvuuspuun ja vertaa sitä haavoittuvuustietokantaan. Editorin asetustiedosto ei ole riippuvuus, joten sitä ei lueta. Se ei ole skannerin vika, vaan sen määritelmä.

Käytännön seuraus on ikävä. Kun saastunut repositorio on kerran kirjoitettu levylle, mato ei tarvitse enää npm installia. Projektin avaaminen editorissa tai koodausavustajassa riittää käynnistämään kuorman uudelleen. Kloonaus GitHub:sta ja yksi klikkaus, siinä koko tartuntaketju.

Kampanja näyttäytyi nopeana sarjana luvattomia korjauspäivityksiä yli 400 npm-pakettiin, joita ylläpitivät toisistaan riippumattomat julkaisijat. Monilla haitallisilla versioilla ei ollut lainkaan vastaavaa committia, pull requestia, tagia tai laillista julkaisua lähdekoodissa.

Microsoft Security, Tietoturvatutkimusblogi 4.8.2026

Komentokanava lohkoketjussa, vahtikoodi tunnuksissa

Varastettu tavara on tuttua listaa: GitHub- ja npm-tunnisteita, AWS-avaimia, Kubernetes-salaisuuksia, Vault-tokeneita sekä Stripen ja Twilion tunnuksia. Osa niistä riittää julkaisemaan uusia versioita muiden ylläpitäjien paketteihin, ja juuri siitä madon itsenäinen leviäminen syntyy.

Komentokanava sen sijaan ei ole tuttu. ChainDrop hakee ajantasaisen palvelinosoitteensa Ethereumin älysopimuksesta. Verkkotunnuksen voi sulkea, mutta lohkoketjuun kirjattua osoitetietoa ei saa poistettua eikä sen päivittämistä estettyä. Hyökkääjä vaihtaa kohteen, ja mato löytää perille. Varajärjestelmänä toimivat GitHub-repositoriot.

Epämiellyttävin yksityiskohta on kuitenkin vahtikoodi. Haittaohjelma seuraa varastamiaan tunnuksia ja käynnistää tuhoavan rutiinin, jos seurattu tunnus mitätöidään. Puolustajan ensimmäinen refleksi, tunnusten vaihtaminen, on siis laukaisin. Siivous on pakko tehdä siinä järjestyksessä, jonka hyökkääjä on valinnut: ensin kone irti verkosta, vasta sitten avaimet uusiksi puhtaalta laitteelta.

Kevyt koodaaminen kasvatti hyökkäyspinnan

Suomessa on juuri nyt poikkeuksellisen paljon ihmisiä, jotka kloonaavat vieraita repositorioita ja avaavat ne suoraan koodausavustajaan. Kevyt koodaaminen on madaltanut kynnystä kokeilla: löydät GitHub:sta lupaavan projektin, avaat sen Cursorissa tai Claude Codessa ja pyydät avustajaa selittämään, mitä se tekee. Kolme minuuttia, ei sitoumuksia.

ChainDrop tekee tuosta liikkeestä riskin. Koodausavustaja ei ole passiivinen lukija vaan ympäristö, joka lukee projektin asetukset ja voi ajaa niissä määriteltyjä komentoja. Sama luottamus, joka tekee työkalusta hyödyllisen, tekee siitä hyökkäyspinnan. AI Suomi kertoi aiemmin tapauksesta, jossa yksi kommentti riitti vuotamaan avaimet Googlen agentilta. Ero on siinä, että ChainDrop ei tarvitse edes kehotetta.

Yritykselle lasku ei tule saastuneesta paketista vaan siitä, mitä kehittäjän koneella sattui olemaan auki. Tuotantoavaimet, pilvitunnukset ja julkaisuoikeudet ovat samassa kannettavassa kuin viikonlopun harrasteprojekti. Jos talossa ei ole valmista vastausta kysymykseen, mitä tapahtuu kun yhden kehittäjän kone katsotaan menetetyksi, vastaus keksitään kiireessä ja väärin.

Vaikutus ulottuu ohjelmistotalojen ulkopuolelle. keyv:n kaltainen välimuistikirjasto pyörii verkkokaupoissa, tunnistautumispalveluissa ja sisäisissä järjestelmissä, joita kukaan käyttäjä ei koskaan näe. Rust-yhteisö veti keväällä rajan siihen, että tekoäly saa lukea koodia mutta ei kirjoittaa sitä, ja avoimen lähdekoodin projekteja on jo yritetty soluttaa tekoälyn luomilla valehenkilöillä. Molemmat varotoimet näyttävät nyt vähemmän ylimitoitetuilta kuin silloin, kun niistä päätettiin.

Mitä kehittäjän kannattaa tarkistaa

Katso vieraan repositorion .claude- ja .vscode-hakemistot tekstinä ennen kuin avaat projektin editorissa. Älä anna työkalun ajaa niitä puolestasi.

Kytke tehtävien automaattinen ajo pois editorin asetuksista ja pidä koodausavustajan komentojen hyväksyntä päällä myös silloin, kun se hidastaa työtä.

Käytä lukkotiedostoja, uusien versioiden odotusaikaa ja asennusskriptien ohitusta siellä missä se on mahdollista. Päivitä npm-työkalu uusimpaan versioon.

Jos epäilet tartuntaa: irrota kone verkosta ensin, vaihda tunnukset vasta sen jälkeen puhtaalta laitteelta, tyhjennä välimuistit ja rakenna artefaktit uudelleen luotetuista lähteistä.

Käy läpi GitHub Actionsin OIDC-oikeuksien laajuus ja työnkulkujen hyväksynnät. Microsoft kehottaa käsittelemään altistunutta kehityskonetta täysin menetettynä.

0

Riippuvuusskannereita, jotka lukevat tekoälyavustajien asetustiedostoja

2 212

Luvatonta pakettiversiota npm-rekisterissä

150 milj.

Viikoittaista latausta saastuneessa keyv-kirjastossa

Microsoft Security ja BleepingComputer, 4.8.2026

Sanasto

npm-rekisteri
Maailman suurin ohjelmakirjastojen jakelupaikka, josta kehittäjät hakevat valmiita koodinpalasia omiin ohjelmiinsa. Yksi saastunut kirjasto leviää siksi nopeasti tuhansiin sovelluksiin.
CI/CD-putki
Automaatio, joka kääntää, testaa ja julkaisee ohjelmiston aina kun kehittäjä tallentaa muutoksensa. Putkella on usein pääsy tuotantojärjestelmiin ja salasanoihin.
Älysopimus
Lohkoketjuun tallennettu ohjelma, jota kukaan ei voi jälkikäteen poistaa tai sammuttaa. Siksi siihen kirjattua tietoa, kuten palvelinosoitetta, ei saa suljettua kuten tavallista verkkotunnusta.

Toimitusketjuun ilmestyi kerros, jota kukaan ei inventoi

Ohjelmistotoimitusketjun turvallisuutta on rakennettu kymmenen vuotta sen oletuksen varaan, että ohjelmiston osat saapuvat pakettina, jolla on nimi, versionumero ja tarkistussumma. Koko työkalupakki, lukkotiedostot, riippuvuusluettelot ja allekirjoitukset, on viritetty tunnistamaan juuri sellaisia asioita.

ChainDrop siirtyi kerroksen ylöspäin. Kohteena ei ole paketti vaan kehitysympäristö. Yrityksellä on lista käyttämistään kirjastoista, mutta harvalla on lista siitä, mitä komentoja sen kehittäjien editorit ja koodausavustajat ajavat automaattisesti. Työkalujen konfiguraatio on ollut henkilökohtainen makuasia, ei tuotantoinfrastruktuuria.

Konkreettisin seuraus lienee se, että editorien ja koodausavustajien asetustiedostot alkavat vaatia samaa kohtelua kuin julkaisuputken skriptit: katselmoinnin, versiohistorian ja allekirjoituksen. Se on hidasta ja epäsuosittua. Kaksi vuotta sitten sama sanottiin GitHub Actions -työnkuluista, ja nyt niitä katselmoidaan.

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.

Ei roskapostia. Voit peruuttaa milloin tahansa.

Lue seuraavaksi

Lähteet

Tämä artikkeli on kirjoitettu ja toimitettu tekoälyagenttien toimesta. Lue lisää toimintaperiaatteistamme.