JulesJacker: Lažni npm crv oponaša Julesovu umjetnu inteligenciju

JulesJacker: Lažni PoC npm crv koji se predstavlja kao Googleov Jules Agent - i uključuje sandbox analizirajući ga

TL; DR

Jedan NPM operater proveo je šest tjedana objavljujući lažne TypeScript "uslužne" pakete kao što su ts-form-utils, ts-project-linti ts-enum-helper.

Dok paketi otkrivaju male, legitimno izgledajuće pomoćne programe za validaciju, pravi se korisni teret izvršava prilikom instalacije ili prvog zahtjeva i obavlja otiske prstiju hosta, otkrivanje GitHub organizacije, kloniranje repozitorija i uklanjanje izvornog koda.

Zlonamjerni softver posebno cilja visokovrijedne GitHub organizacije, uključujući više Shopify repozitorije, zatim arhivira i izvlači dostupna izvorna stabla u centraliziranu krajnju točku kolekcije.

Kao dio tijeka rada za kompromis, korisni teret commitsa datoteku natrag u repozitorije žrtava dok se lažno predstavlja kao Googleov autonomni identitet kodiranja google-labs-jules[bot].

Pratili smo kampanju — pod nazivom JulesJacker — na više područja djelovanja izdavača i s najmanje pet generacija korisnog tereta, uključujući šifrirane i varijante koje su svjesne sandboxa.

Najnovija varijanta posebno cilja infrastrukturu za analizu zlonamjernog softvera: aktivira se samo unutar analitičkih okruženja, krade tokene servisnih računa metapodataka u oblaku i ispituje Kubernetes kontrolne ravnine i spremnike za pohranu u oblaku.

Primarni IOC koji se dijeli među svim generacijama korisnog tereta je krajnja točka kolekcije. aaronstack[.]com/jules-collect.

Ozbiljnost: kritična.

Napad: Kako funkcionira

Svaki JulesJacker paket slijedi isti predložak. paket.json reklamira benigni TypeScript pomoćnik s MIT licencom i bez povezanog repozitorija izvornog koda. index.js izvozi nekoliko stvarnih, funkcionalnih funkcija - regularne izraze e-pošte, mape nabrajanja, tablice pravila lint-a - tako da programer koji zapravo uvozi paket vidi uvjerljivo ponašanje. Zloba se nalazi negdje drugdje: u nakon instalacije kuku ili u bloku na dnu index.js koji se izvršava u trenutku kada je modul potreban.

Korisni tereti su se razvijali kroz jasno numerirane interne faze (operator sam označava svoje telemetrijske događaje sc1-, sc3-, sc4-, i tako dalje), a promatranje te evolucije najjasniji je način za razumijevanje kampanje.

 Generacija 1–2: izviđanje i krađa git-config-a

Najraniji paketi bili su jednostavni kradljivci informacija. Prilikom instalacije prikupljali su varijable okruženja, GitHub CLI hosts datoteku i globalnu git konfiguraciju (git config –global –list, git daljinski -v), a zatim je POST-ao paket na krajnju točku kolekcije. Time je utvrđen potpis operatera: naslovna priča „uslužni programi za validaciju obrazaca TypeScript“, izlazni beacon prema jednoj domeni i sklonost vjerodajnicama programera, a ne podacima potrošača.

Generacija 3: hipervizor i sonde za bijeg kernela

Jedna verzija sredinom kampanje snažno se okrenula napadima na infrastrukturu. Umjesto krađe konfiguracije, pokrenula je izviđačko ispitivanje opreme. AF_VSOCK utičnice, virtio MMIO regije, / dev / mem, i zastavice za pojačavanje kernela, pa čak i pokušaji rušenja kernela izazvanih sysrq-om - ponašanje povezano s pokušajima izlaska iz virtualnog stroja ili kontejnera. Oznake telemetrije (s0-vmm-izviđanje, s1-vmm-vsock-fuzz, s2-vmm-mmio, s3-kernel-probe) je eksplicitno naznačio namjeru. Ova varijanta je očito bila usmjerena na okruženja u oblaku sandbox i serverless-runneru — vrsta kratkotrajnog VM-a koji gradi i testira nepouzdani kod.

Generacija 3 (SC3): crv za pisanje unakrsnih repozitorija

Težište kampanje postalo je samorazmnožavajući kradljivac repozitorija. Prilikom instalacije, korisni teret izvršava vremenski ograničeni slijed od pet faza:

  • Pozornica 0 (~100 ms): otisak prsta hosta — naziv hosta, korisnički podaci, git identitet.
  • Pozornica 1 (~3 s): utvrditi kojoj organizaciji žrtva pripada pregledom git daljinski -v, a zatim potražite čvrsto kodiranu ORG_CONFIG pristup tablici i testnom repozitoriju s git ls-remote — usmjerava se putem SSRF proxyja kojim upravlja napadač na http://git@192.168.0.1:8080.
  • Pozornica 2 (~10 s): git klon svako dostupno spremište na ciljnom popisu, tarball i gzip stablo, base64 kodiranje i izdvajanje dijelova iz njega.
  • Pozornica 3 (~45 s): „dokaz pristupa“ — klonirajte repozitorij u koji se može pisati, ispustite datoteku pod nazivom SECURITY-POC.md i commit s autorom postavljenim na google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> i zadatkom poruke: ažuriranje predmemorije ovisnosti, a zatim slanje na glavnu granu žrtve.

Popis ciljeva u kodu nije generički. Navodi više od trideset Shopify repozitoriji po imenu — Shopify/shopify, Shopify/identitet, Shopify/naplata, Shopify/trezor, Shopify/tajne, Shopify/infrastruktura, Shopify/.githubi mnogi drugi — uz organizaciju za testiranje, AaronStackBarnes, koju operator čini se kontrolira i koristi kao cilj pisanja.

Generacija 4 (SC4): šifrirana i zaštićena

Najnovija varijanta usmjerena na razvojne programere dodaje dva sloja izbjegavanja na vrh crva SC3.

Prvo, korisni teret se više ne isporučuje kao običan tekst. Prava logika nalazi se u blobu šifriranom AES-256-CBC-om, lib/.perf.dat, s IV-om u svojih prvih šesnaest bajtova. Učitavač u index.js rekonstruira ključ za dešifriranje iz spojenih fragmenata niza znakova, dešifrira blob i pokreće ga s nova funkcija()Čak su i nazivi modula podijeljeni kako bi se izbjegli statički skeneri — zahtijevati('kripta' + 'o'), zahtijevati('f' + 's').

Drugo, ograničen je na host-gate. Jedna varijanta dešifrira i pokreće se samo kada os.naziv_host() jednak razvojni okvir or ubuntu-fc-uvm (zadana vrijednost Firecracker microVM-a) ili sadrži podniz razvojni okvirJoš jedna vrata o prisutnosti .jules/ radni direktorij:

Drugim riječima, SC4 korisni teret dizajniran je da ostane neaktivan na običnom prijenosnom računalu programera i da se probudi samo unutar automatiziranog AI-agenta. sandbox okruženja operater zapravo želi kompromis.

Uključivanje laboratorija: varijanta infrastrukture za analizu

Najnoviji paket u kampanji, ts-enum-helper, uopće ne napada programere ili Shopify. Njegov postinstall.sh otvara se vratima koja otkrivaju igru:

Skripta ne radi ništa osim ako nije postavljena varijabla okruženja specifična za platformu za analizu zlonamjernog softvera. Kada je postavljena, korisni teret zna da se izvršava unutar sandboxa koji postoji za detoniranje i proučavanje paketa upravo poput ovog - i protunapada.

Prvo povlači OAuth token GCP servisnog računa s poslužitelja metapodataka instance i izdvaja ga. Zatim, koristeći taj token, pomete Kubernetes kontrolna ravnina dostupno na kubernetes.default.svc:

  • navodi ClusterRoleBindings, ClusterRoles i Nodes;
  • ispituje podove, tajne podatke i mape konfiguracije kube-sustav, zadani, kube-public, najam kube-čvorai prostor imena za analizu;
  • izdaje pozive SelfSubjectAccessReview kako bi točno mapirao što ukradeni identitet smije raditi.

Konačno, brutalnom silom provjerava nazive spremnika Google Cloud Storagea izgrađenih iz čvrsto kodiranog ID-a GCP projekta (rijedak-potpisnik-437603-p9) i broj projekta, pogađanje kombinacija kao što su *-gradi, *-artefaktima, i nekoliko malazija- prefiksi (rezultati-malysisa, paketi-malysis, malysis-skeniranje). Svaki kod i tijelo odgovora se bilježe i šalju natrag na isti jules-collect krajnja točka.

Ovo je rijedak slučaj korisnog tereta u lancu opskrbe izgrađenog posebno za napad na vlastitu infrastrukturu branitelja. Naslovna priča kroz cijelu kampanju - čiji se fragmenti pojavljuju unutar korisnih tereta kao komentari koji uokviruju ponašanje kao "Security Research PoC ... pisanje unakrsnog repozitorija putem preopsežnog git proxy tokena" - isto je samoopravdanje, bez obzira je li cilj vremena izvođenja Shopify monorepozitorij ili poslužitelj metapodataka analitičkog klastera.

Vremenska crta i migracija opsega

JulesJacker nije jednokratni pad. To je održiva operacija koja je preživjela brisanje registra jednostavnom promjenom imena.

Kada događaj
Sredina travnja 2026. Prvi paketi pojavljuju se pod izvornim opsegom izdavača: TS-utility facade, environment i git-config exfiltration.
Početkom svibnja 2026 Objavljeni hipervizor i varijanta izviđanja za izbjegavanje kernela.
Sredina do kraja svibnja 2026. SC3 crv za pisanje unakrsnih repozitorija pojavljuje se uz korisne terete usmjerene na Shopify i google-labs-jules[bot] oponašanje. SC4 uvodi AES-šifrirane i host-gated učitavače.
Kraj svibnja 2026. npm uklanja izvorni opseg izdavača; imena paketa se rješavaju kao prazne rezervirane stavke za sigurnosne objekte.
Isti tjedan Operator migrira na gotovo identičan sličan opseg i ponovno objavljuje crva, uključujući varijantu infrastrukture za analizu.

Branitelji bi trebali prihvatiti migraciju. Uklanjanje prvog nišana nije završilo kampanju niti je usporilo. Operater je već postavio paralelni nišan čije se ime razlikuje od originalnog za jedan znak i nastavio je objavljivati ​​unutar istog tjedna. U trenutku pisanja ovog teksta, novi nišan... ts-form-utils (verzije od 1.0.0 do 1.1.0), njegove ts-project-lint (1.0.0 i 1.1.0) i samostalni ts-enum-helper (1.0.0) ostaju instalirati.

Pokazatelji kompromisa

Svi dolje navedeni pokazatelji potvrđeni su u odnosu na izvor paketa.

Tip Pokazatelj Bilješke
Mreža (C2) aaronstack[.]com/jules-collect Jedna krajnja točka kolekcije u svakoj generaciji; prima JSON telemetriju i dijelove tarballa repozitorija base64-gzip.
Mreža (SSRF proxy) http://git@192.168.0.1:8080 Prednja strana za preopsežni git proxy token koji se koristi za dosezanje repozitorija ciljne organizacije.
Mreža (oblak) metadata.google.internal/computeMetadata/v1
kubernetes.default.svc
storage.googleapis.com/storage/v1/b
Koristi se samo od strane varijante analitičke infrastrukture za krađu tokena i izviđanje Kubernetes kontrolne ravnine.
Identitet google-labs-jules[bot]
161369871+google-labs-jules[bot]@users.noreply.github.com
Krivotvoren commit identitet autora uguran u glavne grane žrtve.
file lib/.perf.dat AES-256-CBC-šifrirani blob korisnog tereta; IV pohranjen u prvih 16 bajtova, a ključ dinamički rekonstruiran u index.js.
file SECURITY-POC.md Ispušteno i commitvraćeno u spremišta žrtava s porukom chore: update dependency cache.
file scripts/postinstall.sh Zatvoreno $MALYSIS_ANALYSIS_ID; identificira varijantu ciljanja na infrastrukturu analize.
bihevioralna os.hostname() provjerava devbox / ubuntu-fc-uvm Zaštita okruženja sandbox i AI-agent prije dešifriranja i izvršavanja korisnog tereta.
bihevioralna .jules/ i /app/.jules čitanja direktorija Eksplicitno ciljanje okruženja radnog prostora AI-agenata.
bihevioralna sc1-, sc3-, sc4-, s0-vmm-recon Oznake telemetrijskih faza koje definira operater, korisne za otkrivanje i lov.
Cilj u oblaku rare-signer-437603-p9
malysis-* nagađanja iz kante
Tvrdo kodirani identifikatori GCP projekta i obrasci nabrajanja spremnika za pohranu ugrađeni u varijantu infrastrukture za analizu.
Oblik pakiranja Fasada TS-komunalnog paketa bez polja spremišta Dosljedan predložak kampanje: lažni paketi uslužnih programa TypeScript s ugrađenim zlonamjernim sadržajem postinstall hooks ili dodano uz index.js.
alati-za-analizu-sastava-softvera-sca-tools
Prioritizirajte, sanirajte i osigurajte softverske rizike
Nabavite svoj besplatni račun.
Nije potrebna kreditna kartica.

Osigurajte svoj razvoj i isporuku softvera

s Xygeni paketom proizvoda