Hyökkäys alkoi noin kello 09.00 UTC 4. elokuuta. Hyökkääjä pääsi käsiksi Jared Wrayn GitHub-tiliin ja työnsi haitallista koodia suoraan keyv-projektin main-haaraan. Tämän jälkeen uusia julkaisuja tehtiin koko keyv- ja cacheable-pakettiperheestä .
Ensimmäinen levitysaalto käsitti 11 pakettia. Mukana olivat esimerkiksi keyv, cacheable-request, cache-manager, @cacheable/utils, flat-cache ja file-entry-cache . Aikido Security, StepSecurity, Socket ja Chainguard vahvistivat vaarantumisen itsenäisesti hyökkäyksen ensimmäisten tuntien aikana .
setup.mjs ja Math_Symbol.jsJokaiseen saastutettuun pakettiin lisättiin sama perusrakenne:
setup.mjs-tiedostoMath_Symbol.js-toisen vaiheen ohjelmapackage.json-tiedostoon lisätty "preinstall": "node setup.mjs" -komento Kun kehittäjä tai CI-järjestelmä suoritti npm install -komennon, setup.mjs käynnistyi automaattisesti ennen asennuksen valmistumista. Se latasi GitHub Releases -palvelusta aidon Bun-JavaScript-ajoympäristön ja käytti sitä noin 710–728 kilotavun kokoisen, obfuskoidun Math_Symbol.js-haittaohjelman käynnistämiseen .
Microsoft Threat Intelligence vahvisti, että kyseessä on Mini Shai-Hulud -muunnelma . Haittaohjelma etsii ympäristöstä laajan valikoiman tunnuksia ja salaisuuksia, kuten :
Hyökkäys ei jäänyt alkuperäiseen pakettiperheeseen. Varastettuaan npm:n julkaisutunnuksia ja GitHubin PAT-tunnuksia mato käytti niitä uusien haitallisten versioiden julkaisemiseen muiden, toisistaan riippumattomien ylläpitäjien paketeissa .
Havaintojen määrä kasvoi nopeasti:
Luvut vaihtelivat seurannan ajankohdan ja laskentatavan mukaan, mutta keskeinen havainto oli sama: mato ylitti namespace-rajat ja levisi nopeasti paketteihin, joita ylläpitivät muun muassa Deliveroo, Ornikar, OneReach, Picsart, Qlik ja ServiceTitan .
Varastetut tunnukset siirrettiin hyökkääjän hallitsemaan GitHub-repositorioon. Haittaohjelma saattoi luoda uuden repositorion tai käyttää tähän tarkoitukseen varattua tiedonkeruurepositoriota . Kuormaan oli rakennettu useita toisiaan varmistavia tiedonsiirtokanavia, joten yhden kanavan sulkeminen ei välttämättä pysäyttänyt tietojen vuotamista .
Tietoturvatutkijat suosittelivat, että jokainen saastunutta versiota asentanut järjestelmä käsitellään täysin vaarantuneena. Pelkkä haitallisten tiedostojen poistaminen ei riitä .
Poista vaarantuneet paketit ja siirry tunnetusti puhtaisiin versioihin. Käytä tarvittaessa npm:n, Yarnin tai pnpm:n ohituksia, kuten package.json-tiedoston overrides-määrittelyä, jotta haitallista versiota ei asenneta vahingossa uudelleen .
Tarkista myös riippuvuuksien lukitustiedostot, kuten package-lock.json, yarn.lock ja pnpm-lock.yaml. Tarkistus on tehtävä myös välillisille eli transitiivisille riippuvuuksille .
Jos työasema, rakennuspalvelin tai CI/CD-ajoympäristö suoritti npm install -komennon saastuneella versiolla, kaikkia siellä saatavilla olleita salaisuuksia on pidettävä vuotaneina . Luotettavin palautumistapa on rakentaa ympäristö uudelleen puhtaasta levykuvasta tai muusta varmennetusta lähtöpisteestä.
Mitätöi ja vaihda kaikki mahdollisesti paljastuneet tunnukset, kuten :
Haittaohjelma saattoi asentaa GitHub Actions -työnkulkuja tai muita tarkkailijoita, jotka pystyivät paljastamaan uuden tunnuksen heti sen luonnin jälkeen . Tämän vuoksi tutkijat neuvoivat poistamaan tai sulkemaan tällaiset seuranta- ja palautusmekanismit ennen tunnusten vaihtamista .
Tyhjennä npm-, pnpm- ja Yarn-välimuistit sekä Dockerin rakennusvälimuistit kehittäjien koneilta ja CI/CD-ajoympäristöistä . Rakenna ohjelmistot ja julkaisuartefaktit alusta alkaen, jotta saastuneet riippuvuudet eivät säily välimuisteissa tai Docker-kerroksissa .
Etsi uusia luvattomia repositorioita, työnkulkuja, epäilyttäviä committeja ja muita pysyvyyden merkkejä . Tutki myös tiedostoja, kuten .claude/settings.json ja .vscode/tasks.json, joita mato saattoi luoda . Tarkista lisäksi käyttö- ja julkaisutapahtumien lokit sekä mahdolliset uudet OAuth-sovellukset.
Hyökkäys osoitti, kuinka yhden ylläpitäjätilin vaarantuminen voi käynnistää ketjureaktion koko JavaScript-ekosysteemissä. Mato hyödynsi npm:n asennuksen yhteydessä automaattisesti suoritettavaa preinstall-komentoa, käytti aitoa Bun-ajoympäristöä haitallisen koodin käynnistämiseen ja levitti itseään varastettujen julkaisuoikeuksien avulla .
Kehitys- ja tietoturvatiimeille tapaus korostaa riippuvuuksien tarkkaa lukitsemista, asennusskriptien poistamista käytöstä aina kun mahdollista, GitHubin poikkeavan toiminnan valvontaa sekä valmista toimintamallia ohjelmistotoimitusketjun vaarantumisiin.