JulesJacker: Väärennetty npm-mato tekeytyy Julesin tekoälyksi

JulesJacker: Väärennetty PoC-mato, joka tekeytyy Googlen Jules-agentiksi ja käynnistää sitä analysoivan hiekkalaatikon

TL; DR

Yksi npm-operaattori käytti kuusi viikkoa julkaisten väärennettyjä TypeScript-"apuohjelmapaketteja", kuten ts-form-utils, ts-project-lintja ts-enum-helper.

Vaikka paketit paljastavat pieniä, laillisen näköisiä validointiavustajia, varsinainen hyötykuorma suoritetaan asennuksen tai ensimmäisen vaatimuksen yhteydessä ja suorittaa isännän sormenjälkien ottamisen, GitHub-organisaation etsinnän, arkiston kloonauksen ja lähdekoodin purkamisen.

Haittaohjelma kohdistuu erityisesti arvokkaisiin GitHub-organisaatioihin, mukaan lukien useita Shopify arkistoihin, arkistoi ja purkaa sitten saavutettavat lähdekoodipuut keskitettyyn kokoelman päätepisteeseen.

Osana kompromissityönkulkua hyötykuorma commitsa-tiedosto takaisin uhrien arkistoihin esiintyessään Googlen autonomisena koodausidentiteetinä google-labs-jules[bot].

Seurasimme kampanjaa – nimeltään JulesJacker — useiden julkaisijoiden laajuuksissa ja vähintään viidessä hyötykuormasukupolvessa, mukaan lukien salatut ja hiekkalaatikkoyhteensopivat variantit.

Uusin variantti kohdistuu erityisesti haittaohjelmien analysointiinfrastruktuuriin: se aktivoituu vain analyysiympäristöissä, varastaa pilvimetatietojen palvelutilin tokeneita ja tutkii Kubernetesin hallintatasoja ja pilvitallennustilan säilöjä.

Ensisijainen IOC, joka jaetaan kaikkien hyötykuormasukupolvien välillä, on kokoelman päätepiste. aaronstack[.]com/jules-collect.

Vakavuusaste: kriittinen.

Hyökkäys: Näin se toimii

Jokainen JulesJacker-paketti noudattaa samaa mallia. package.json mainostaa hyvänlaatuista TypeScript-apuohjelmaa, jolla on MIT-lisenssi eikä linkitettyä lähdekoodivarastoa. index.js vie kourallisen oikeita, toimivia funktioita – sähköpostin regexejä, enum-karttoja, lint-sääntötaulukoita – jotta kehittäjä, joka todellisuudessa tuo paketin, näkee uskottavan toiminnan. Pahantahtoisuus piilee muualla: asennuksen jälkeen koukussa tai lohkossa pohjassa index.js joka suoritetaan sillä hetkellä, kun moduulia tarvitaan.

Hyötykuormat ovat kehittyneet selkeästi numeroitujen sisäisten vaiheiden kautta (operaattori nimeää omat telemetriatapahtumansa sc1-, sc3-, sc4-, ja niin edelleen), ja tämän kehityksen seuraaminen on selkein tapa ymmärtää kampanjaa.

 Sukupolvet 1–2: tiedustelu ja git-config-varkaus

Varhaisimmat paketit olivat suoraviivaisia ​​infostealer-paketteja. Asennuksen yhteydessä ne keräsivät ympäristömuuttujia, GitHub CLI:n isäntätiedoston ja globaalin git-kokoonpanon (git config –global –list, git kauko -v), sitten lähetti paketin kokoelman päätepisteeseen. Tämä vahvisti operaattorin allekirjoituksen: ”TypeScript-lomakkeen validointiapuohjelmat” -kansiteksti, lähtevä majakka yksittäiseen verkkotunnukseen ja mieltymys kehittäjän tunnistetiedoille kuluttajatietojen sijaan.

Sukupolvi 3: hypervisor- ja kernel-pakoluotaimet

Yksi kampanjan keskivaiheilla ollut versio siirtyi voimakkaasti infrastruktuurihyökkäyksiin. Konfiguraatioiden varastamisen sijaan se suoritti tiedusteluvaljaiden luotauksen. AF_VSOCK soketit, virtio MMIO -alueet, / dev / memja ytimen koventamislippuja, ja jopa sysrq:n laukaisemia ytimen kaatumisia – käyttäytymistä, joka liittyy virtuaalikoneesta tai säilöstä murtautumiseen liittyviin yrityksiin. Telemetriatunnisteet (s0-vmm-recon, s1-vmm-vsock-fuzz, s2-vmm-mmio, s3-ytimen koetin) teki tarkoituksen selväksi. Tämä variantti oli selvästi suunnattu pilvipohjaiset hiekkalaatikko- ja palvelimettomat ympäristöt — sellainen lyhytaikainen virtuaalikone, joka rakentaa ja testaa epäluotettavaa koodia.

Sukupolvi 3 (SC3): ristirepokirjoitusmato

Kampanjan painopisteeksi tuli itseään levittävä repovaras. Asennuksen yhteydessä hyötykuorma suorittaa viisivaiheisen ajastetun sekvenssin:

  • Stage 0 (~100 ms): sormenjälki isännästä — isäntänimi, käyttäjätiedot, git-identiteetti.
  • Stage 1 (~3 s): selvitä uhrin organisaatioon kuuluminen tarkastamalla git kauko -v, etsi sitten kovakoodattu ORG_CONFIG taulukko- ja testirepositorion käyttöoikeus git ls-remote — reititetään hyökkääjän hallitseman SSRF-välityspalvelimen kautta osoitteessa http://git@192.168.0.1:8080.
  • Stage 2 (~10 sekuntia): git-klooni jokainen kohdeluettelon tavoitettavissa oleva arkisto, tallenna puu tarball-tiedostoon ja zip-tiedostoon, base64-koodaa se ja pura se paloiksi.
  • Stage 3 (~45 s): ”käyttöoikeuden todistus” — kloonataan kirjoitettava arkisto, pudotetaan tiedosto nimeltä SECURITY-POC.md ja commit se kirjoittajan ollessa asetettu arvoon google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> ja viesti chore: update dependency cache, then push to the victim's mainline branch.

Kovakoodattu kohdeluettelo ei ole geneerinen. Se luettelee yli kolmekymmentä Shopify arkistot nimen mukaan — Shopify/shopify, Shopify/identiteetti, Shopify/laskutus, Shopify/holvi, Shopify/salaisuudet, Shopify/infrastruktuuri, Shopify/.githubja monia muita – testiorganisaation rinnalla, AaronStackBarnes, jota operaattori näyttää hallitsevan ja käyttää kirjoituskohteena.

Sukupolvi 4 (SC4): salattu ja suojattu

Uusin kehittäjille suunnattu variantti lisää kaksi väistökerrosta SC3-madon päälle.

Ensinnäkin hyötykuorma ei enää toimiteta selkokielisenä. Todellinen logiikka sijaitsee AES-256-CBC-salatussa blobissa, lib/.perf.dat, jossa IV on sen ensimmäisten kuudentoista tavun sisällä. Lataaja index.js rekonstruoi salausavaimen yhdistetyistä merkkijono-osista, purkaa blobin salauksen ja suorittaa sen uusi funktio()Jopa moduulien nimet on jaettu staattisten skannerien väistämiseksi — vaatia('krypta' + 'o'), vaatia('f' + 's').

Toiseksi, se on isäntärajoitteinen. Yksi variantti purkaa salauksen ja toimii vain, kun os.hostname() on yhtä suuri kuin kehittäjälaatikko or ubuntu-fc-uvm (Firecrackerin microVM-oletus) tai sisältää alimerkkijonon kehittäjälaatikkoToinen portti riippuu jonkin läsnäolosta. .jules/ työhakemisto:

Toisin sanoen SC4-hyötykuorma on suunniteltu pysymään lepotilassa tavallisen kehittäjän kannettavalla tietokoneella ja heräämään vasta automatisoidun tekoälyagentin sisällä. hiekkalaatikkoympäristöt operaattori itse asiassa haluaa tehdä kompromissin.

Laboratorion käynnistäminen: analyysi-infrastruktuurivariantti

Kampanjan uutuuspaketti ts-enum-helper, ei hyökkää kehittäjiä tai Shopifytä vastaan ​​lainkaan. Sen postinstall.sh avautuu portilla, joka paljastaa pelin:

Skripti ei tee mitään, ellei haittaohjelmien analysointialustalle määritettyä ympäristömuuttujaa ole asetettu. Kun se on asetettu, hyötykuorma tietää, että se toimii hiekkalaatikossa, joka on olemassa tällaisten pakettien räjäyttämistä ja tutkimista varten – ja se tekee vastahyökkäyksen.

Se hakee ensin GCP-palvelutilin OAuth-tokenin instanssin metatietopalvelimelta ja poistaa sen. Sitten se pyyhkäisee kyseisen tunnuksen avulla Kubernetes ohjaustaso tavoitettavissa osoitteessa kubernetes.default.svc:

  • listaa ClusterRoleBindings-, ClusterRoles- ja Nodes-arvot;
  • tutkii podeja, salaisuuksia ja määrityskarttoja kaikkialla kube-järjestelmä, oletusarvo, kube-public, kube-node-leaseja analyysin nimiavaruuden;
  • lähettää SelfSubjectAccessReview-kutsuja kartoittaakseen tarkasti, mitä varastetulla identiteetillä on oikeus tehdä.

Lopuksi se pakottaa raa'asti Google Cloud Storagen säiliöiden nimet, jotka on rakennettu kovakoodatusta GCP-projektitunnuksesta (harvinainen-signer-437603-p9) ja projektinumero, arvaamalla yhdistelmiä, kuten *-koontiversiot, *-esineitä, ja useita malyysi- etuliitteet (malyysitulokset, malysis-paketit, malyysi-skannaukset). Jokainen vastauskoodi ja runko kirjataan lokiin ja lähetetään takaisin samalle jules-collect päätepiste.

Tämä on harvinainen tapaus, jossa toimitusketjun hyötykuorma on rakennettu erityisesti hyökkäämään puolustajien omaa infrastruktuuria vastaan. Koko kampanjan peitetarina – jonka osia näkyy hyötykuormissa kommentteina, jotka kehystävät toiminnan "Security Research PoC … ristirepokirjoitus ylilaajentuneen git-välityspalvelimen tunnuksen kautta" – on sama itseoikeutus, olipa ajonaikainen kohde Shopify-monorepo tai analyysiklusterin metatietopalvelin.

Aikajana ja laajuusmuutto

JulesJacker ei ole kertaluonteinen pudotus. Se on pitkäaikainen operaatio, joka selvisi rekisterin poistosta yksinkertaisesti muuttamalla nimeään.

Kun Tapahtuma
Huhtikuun puoliväli 2026 Ensimmäiset paketit ilmestyvät alkuperäisen julkaisijan laajuusalueelle: TS-utility facade, environment ja git-config exfiltration.
Toukokuun alussa 2026 Hypervisor ja kernel-escape-tiedusteluvariantti julkaistu.
Toukokuun puolivälistä loppupuolelle 2026 SC3-ristirepokirjoitusmato esiintyy Shopifyhin kohdistettujen hyötykuormien rinnalla ja google-labs-jules[bot] henkilöllisyyden anastus. SC4 esittelee AES-salatut ja isäntäohjatut lataustoiminnot.
Toukokuun loppu 2026 npm poistaa alkuperäisen julkaisijan laajuuden; pakettien nimet ratkeavat tyhjiksi suojausta säilyttäviksi paikkamerkeiksi.
Sama viikko Operaattori siirtyy lähes identtiseen, kaksoiskappalemaiseen laajuusalueeseen ja julkaisee madon uudelleen, mukaan lukien analyysi-infrastruktuurivariantin.

Puolustajien tulisi tyytyä tähän siirtoon. Ensimmäisen tähtäinkiihdyttimen poistaminen ei lopettanut kampanjaa eikä edes hidastanut sitä. Operaattori oli jo ladannut rinnakkaisen tähtäinkiihdyttimen, jonka nimi eroaa alkuperäisestä yhdellä merkillä, ja jatkoi julkaisemista samalla viikolla. Tämän kirjoitushetkellä uuden tähtäinkiihdyttimen... ts-lomake-utils (versiot 1.0.0–1.1.0), sen ts-project-lint (1.0.0 ja 1.1.0) ja erillisversio ts-enum-helper (1.0.0) pysyvät asennettavina.

Kompromissin indikaattorit

Kaikki alla olevat indikaattorit vahvistettiin pakettilähdettä vasten.

Tyyppi Osoitin Huomautuksia
Verkko (C2) aaronstack[.]com/jules-collect Yksi kokoelman päätepiste jokaisessa sukupolvessa; vastaanottaa JSON-telemetriaa ja base64-gzip-arkiston tarball-osia.
Verkko (SSRF-välityspalvelin) http://git@192.168.0.1:8080 Ylilaajentuneen git-välityspalvelimen tunnuksen etuosa, jota käytetään kohdeorganisaation tietovarastoihin pääsemiseksi.
Verkko (pilvi) metadata.google.internal/computeMetadata/v1
kubernetes.default.svc
storage.googleapis.com/storage/v1/b
Käytössä vain analyysi-infrastruktuurivariantissa token-varkauksiin ja Kubernetes-ohjaustason tiedusteluun.
Identiteetti google-labs-jules[bot]
161369871+google-labs-jules[bot]@users.noreply.github.com
Taotut commit tekijän identiteetti työnnetään uhrin päälinjan haaroihin.
filee lib/.perf.dat AES-256-CBC-salattu hyötykuormablob; IV tallennettu ensimmäisiin 16 tavuun ja avain rekonstruoitu dynaamisesti index.js.
filee SECURITY-POC.md Pudotti ja committakaisin uhrien arkistoihin viestin kanssa chore: update dependency cache.
filee scripts/postinstall.sh Aidattu $MALYSIS_ANALYSIS_ID; tunnistaa analyysi-infrastruktuuriin kohdistuvan variantin.
Behavioral os.hostname() tarkastukset devbox / ubuntu-fc-uvm Hiekkalaatikon ja tekoälyagenttiympäristön portitus ennen hyötykuorman salauksen purkamista ja suorittamista.
Behavioral .jules/ ja /app/.jules hakemiston lukeminen Tekoälyagenttien työtilaympäristöjen eksplisiittinen kohdentaminen.
Behavioral sc1-, sc3-, sc4-, s0-vmm-recon Käyttäjän määrittämät telemetriavaiheiden merkinnät, jotka ovat hyödyllisiä havaitsemisessa ja metsästyksessä.
Pilvikohde rare-signer-437603-p9
malysis-* ämpäriarvauksia
Analyysi-infrastruktuurivarianttiin upotetut kovakoodatut GCP-projektitunnisteet ja tallennussäiliöiden luettelointimallit.
Pakkauksen muoto TS-apuohjelmapaketin julkisivu ilman arkistokenttää Johdonmukainen kampanjamalli: väärennetyt TypeScript-apuohjelmapaketit, joihin on upotettu haitallisia hyötykuormia postinstall hooks tai liitettynä index.js.
sca-työkalut-ohjelmisto-koostumusanalyysityökalut
Priorisoi, korjaa ja suojaa ohjelmistoriskisi
Hanki ilmainen tili.
Luottokorttia ei vaadita.

Turvaa ohjelmistokehityksesi ja -toimituksesi

Xygeni-tuotepaketin kanssa