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.
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.