Kolme tuntia, jotka horjuttivat npm-ekosysteemin luottamusta
Axios on JavaScript-maailman käytetyin HTTP-kirjasto. Se hoitaa verkkoliikenteen lähes jokaisessa modernissa verkkosovelluksessa ja Node.js-palvelussa. Wizin arvion mukaan kirjasto löytyy noin 80 prosentista pilviympäristöjä, ja sitä ladataan npm-pakettirekisteristä yli 100 miljoonaa kertaa viikossa. Jos olet koskaan rakentanut verkkosovellusta, olet todennäköisesti käyttänyt axiosia – tai jokin riippuvuutesi on käyttänyt sitä puolestasi.
Maanantaina 31. maaliskuuta 2026, kello 00.21 UTC, joku julkaisi kaksi uutta versiota kirjastosta: axios 1.14.1 ja axios 0.30.4. Versiot näyttivät tavallisilta päivityksiltä, mutta niiden riippuvuuksiin oli ujutettu tuntematon paketti nimeltä plain-crypto-js. Se asensi kolmen tunnin aikana etähallintahaittaohjelman tuntemattomalle määrälle koneita ympäri maailmaa, ennen kuin npm ehti poistaa saastuneet versiot.
Näin ylläpitäjätili kaapattiin
Hyökkäys alkoi axios-kirjaston pääylläpitäjän Jason Saaymanin tilien haltuunotolla. Hyökkääjä vaihtoi sekä GitHub- että npm-tiliin liitetyn sähköpostin kertakäyttöiseen ProtonMail-osoitteeseen, mikä lukitsi oikean omistajan ulos. Sen jälkeen saastuneet versiot julkaistiin kahdessa minuutissa.
Saastuneissa versioissa itse axios-koodi oli ennallaan. Ainoa muutos oli uusi riippuvuus: plain-crypto-js, jonka postinstall-koukku käynnisti automaattisesti tiedoston nimeltä setup.js aina kun kehittäjä asensi paketin. Npm-ekosysteemissä postinstall-koukut suoritetaan oletuksena asennuksen yhteydessä ilman erillistä lupaa, mikä tekee niistä tehokkaan hyökkäysvektorin.
Skripti sisälsi kaksi obfuskaatiokerrosta – käännetyn Base64-koodauksen ja XOR-salauksen – ja otti yhteyttä hallintapalvelimeen 15 sekunnissa. Tämän jälkeen se latasi käyttöjärjestelmäkohtaisen etähallintaohjelman ja tuhosi itsensä jälkiensä peittämiseksi. Step Securityn tutkijat kuvasivat prosessia ytimekkäästi: asennuksesta täyteen järjestelmän hallintaan kului noin 15 sekuntia.
Haittaohjelma, joka tunnistaa käyttöjärjestelmän
Googlen uhka-analytiikkaryhmä GTIG tunnisti haittaohjelman WAVESHAPER.V2:ksi. Se on päivitetty versio takaportista, jota on käytetty aiemmin kryptovaluuttayritysten vakoilussa.
macOS-koneilla ohjelma naamioitui Applen järjestelmäprosessiksi ja asettui polulle, joka muistutti aitoa järjestelmädemonia. Windows-koneilla PowerShell-pohjainen versio piiloutui Windows Terminalin nimiin. Linux-koneilla Python-pohjainen versio käynnistyi hiljaa taustaprosessina. Kaikki kolme versiota katosivat tavallisen käyttäjän silmistä välittömästi asennuksen jälkeen.
Kaikki versiot ottivat yhteyttä hallintapalvelimeen minuutin välein ja käyttivät vanhentunutta Internet Explorer 8:n User-Agent-merkkijonoa liikenteen naamioimiseksi. Ohjelma tuki neljää komentoa: tiedostojen selaamista, komentojen suorittamista käyttöjärjestelmän omalla skriptikielellä, ulkoisten ohjelmien injektointia sekä haittaohjelman sammuttamista. Komentovalikoima kertoo, että kyseessä on täysiverinen vakoilutyökalu, ei pelkkä kryptovaluuttojen louhija.
Jäljet johtavat Pohjois-Koreaan
GTIG yhdisti hyökkäyksen UNC1069-ryhmään, jota se on seurannut vuodesta 2018. Ryhmä on aiemmin kohdistanut operaationsa kryptovaluutta- ja hajautetun rahoituksen yrityksiin. Attribuutio perustuu useaan tekniseen todisteeseen: WAVESHAPER.V2 jakaa edeltäjänsä kanssa saman C2-protokollan ja harvinaisen User-Agent-merkkijonon, ja macOS-version kehittäjäpolut viittaavat BlueNoroff-ryhmän aiempiin RustBucket- ja Hidden Risk -kampanjoihin.
Googlen uhka-analyytikko John Hultquist kuvasi taustaa suoraan: "Pohjois-Korean hakkereilla on syvä kokemus toimitusketjuhyökkäyksistä, joita he ovat perinteisesti käyttäneet kryptovaluuttojen varastamiseen." Tässä tapauksessa haittaohjelmasta ei kuitenkaan löytynyt louhintaan tai kiristykseen liittyviä komponentteja. Se viittaa siihen, että operaation tarkoitus oli tiedustelu, ei suora rahallinen hyöty.
Help Net Securityn mukaan noin kolme prosenttia altistuneista ympäristöistä ehti suorittaa haittakoodin. Luku kuulostaa pieneltä, mutta axiosin asennuspohjan mittakaavassa se voi tarkoittaa tuhansia järjestelmiä.



