JulesJacker: Falsk npm-orm imiterer Jules AI

JulesJacker: En falsk PoC npm-orm som utgir seg for å være Googles Jules-agent – ​​og slår på sandkassen som analyserer den

TL; DR

En enkelt npm-operatør brukte seks uker på å publisere falske TypeScript-"verktøy"-pakker som ts-form-utils, ts-project-lintog ts-enum-helper.

Selv om pakkene eksponerer små valideringshjelpere som ser legitime ut, kjøres den virkelige nyttelasten ved installasjon eller første krav og utfører fingeravtrykksanalyse av vertsserveren, GitHub-organisasjonsoppdagelse, kloning av depot og eksfiltrering av kildekode.

Skadevaren retter seg spesifikt mot verdifulle GitHub-organisasjoner, inkludert flere Shopify depoter, og arkiverer og eksfiltrerer deretter tilgjengelige kildetrær til et sentralisert samlingsendepunkt.

Som en del av kompromissarbeidsflyten, nyttelasten commitsa-filen tilbake i offerlagre mens den utgir seg for å være Googles autonome kodende identitet google-labs-jules[bot].

Vi sporet kampanjen – navngitt JulesJacker – på tvers av flere utgiveromfang og minst fem nyttelastgenerasjoner, inkludert krypterte og sandkassebevisste varianter.

Den nyeste varianten retter seg spesifikt mot infrastruktur for analyse av skadevare: den aktiveres kun i analysemiljøer, stjeler tokener for tjenestekontoer i skymetadata og undersøker Kubernetes kontrollplan og skylagringsbøtter.

Den primære IOC-en som deles på tvers av alle nyttelastgenerasjoner er innsamlingsendepunktet aaronstack[.]com/jules-collect.

Alvorlighetsgrad: kritisk.

Angrepet: Hvordan det fungerer

Hver JulesJacker-pakke følger den samme malen. pakke.json annonserer en godartet TypeScript-hjelper med en MIT-lisens og uten et lenket kildekodelager. index.js eksporterer en håndfull ekte, fungerende funksjoner – e-postregekser, enum-kart, lint-regeltabeller – slik at en utvikler som faktisk importerer pakken ser plausibel oppførsel. Ondskapen finnes et annet sted: i en etterinstallasjon krok, eller i en blokk nederst på index.js som kjøres i det øyeblikket modulen er nødvendig.

Nyttelastene har utviklet seg gjennom tydelig nummererte interne stadier (operatøren merker sine egne telemetrihendelser sc1-, sc3-, sc4-, og så videre), og å se på denne utviklingen er den klareste måten å forstå kampanjen på.

 Generasjon 1–2: rekognosering og git-config-tyveri

De tidligste pakkene var enkle infotyveripakker. Ved installasjon høstet de miljøvariabler, GitHub CLI-hosts-filen og den globale git-konfigurasjonen (git-konfigurasjon –global –liste, git fjernkontroll -v), og deretter POSTET pakken til samlingsendepunktet. Dette etablerte operatørens signatur: en forsidehistorie om «TypeScript-skjemavalideringsverktøy», en utgående beacon til et enkelt domene og en smak for utviklerlegitimasjon i stedet for forbrukerdata.

Generasjon 3: hypervisor- og kernel escape-prober

En versjon midt i kampanjen dreide seg kraftig mot infrastrukturangrep. I stedet for å stjele konfigurasjon, kjørte den en rekognoseringsanalyse. AF_VSOCK sokler, virtio MMIO-regioner, / dev / mem, og kjerneherdingsflagg, og til og med forsøk på sysrq-utløste kjernekrasj – atferd knyttet til forsøk på å bryte seg ut av en virtuell maskin eller container. Telemetri-taggene (s0-vmm-recon, s1-vmm-vsock-fuzz, s2-vmm-mmio, s3-kjernesonde) gjorde intensjonen eksplisitt. Denne varianten var tydelig rettet mot skybaserte sandkasse- og serverløse løpermiljøer — den typen flyktige VM som bygger og tester upålitelig kode.

Generasjon 3 (SC3): kryssrepo-skriveormen

Kampanjens tyngdepunkt ble en selvforplantende repo-tyv. Ved installasjon kjører nyttelasten en tidsbestemt sekvens i fem trinn:

  • Stage 0 (~100 ms): fingeravtrykk av verten — vertsnavn, brukerinformasjon, git-identitet.
  • Stage 1 (~3 s): avgjør hvilken organisasjon offeret tilhører ved å inspisere git fjernkontroll -v, og slå deretter opp en hardkodet ORG_CONFIG tabell- og testrepositoritilgang med git ls-remote — rutet gjennom en angriperkontrollert SSRF-proxy på http://git@192.168.0.1:8080.
  • Stage 2 (~10 sekunder): git klon alle tilgjengelige depoter i mållisten, tarball og gzip treet, base64-kode det og chunk-eksfiltrer det.
  • Stage 3 (~45 s): «tilgangsbeviset» – klon et skrivbart repo, slipp en fil med navnet SECURITY-POC.md, og commit den med forfatteren satt til google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> og meldingen chore: oppdater avhengighetsbuffer, og send deretter til offerets hovedgren.

Den hardkodede mållisten er ikke generisk. Den lister opp mer enn tretti Shopify arkiver etter navn — Shopify/Shopify, Shopify/identitet, Shopify/fakturering, Shopify/hvelv, Shopify/hemmeligheter, Shopify/infrastruktur, Shopify/.github, og mange flere – sammen med en testorganisasjon, AaronStackBarnes, som operatoren tilsynelatende kontrollerer og bruker som skrivemål.

Generasjon 4 (SC4): kryptert og portet

Den nyeste utviklervendte varianten legger til to lag med unnvikelse oppå SC3-ormen.

For det første sendes ikke lenger nyttelasten som klartekst. Den virkelige logikken ligger i en AES-256-CBC-kryptert blob, lib/.perf.dat, med IV i de første seksten bytene. Lasteren i index.js rekonstruerer dekrypteringsnøkkelen fra sammenkoblede strengfragmenter, dekrypterer bloben og kjører den med ny funksjon()Selv modulnavnene er delt for å unngå statiske skannere – krever('krypt' + 'o'), krever('f' + 's').

For det andre er den vertsstyrt. Én variant dekrypterer og kjører bare når os.vertsnavn() er lik utviklerboks or ubuntu-fc-uvm (en Firecracker microVM-standard) eller inneholder delstrengen utviklerboksEn annen port på tilstedeværelsen av en .jules/ arbeidskatalog:

Med andre ord er SC4-nyttelasten designet for å forbli inaktiv på en vanlig utviklers bærbare datamaskin og bare våkne opp inne i den automatiserte AI-agenten. sandkassemiljøer operatøren ønsker faktisk å inngå kompromisser.

Slå på laboratoriet: Analyse-infrastrukturvarianten

Den mest nyskapende pakken i kampanjen, ts-enum-hjelper, angriper ikke utviklere eller Shopify i det hele tatt. Dens postinstall.sh åpner med en port som avslører spillet:

Skriptet gjør ingenting med mindre en miljøvariabel spesifikk for en plattform for skadevareanalyse er satt. Når den er det, vet nyttelasten at den kjører inne i sandkassen som finnes for å detonere og studere pakker akkurat som denne – og den foretar et motangrep.

Den henter først OAuth-tokenet for GCP-tjenestekontoen fra forekomstens metadataserver og eksfiltrerer det. Deretter, ved hjelp av dette tokenet, feier den Kubernetes kontrollfly nås kl kubernetes.default.svc:

  • lister opp ClusterRoleBindings, ClusterRoles og Nodes;
  • undersøker pods, hemmeligheter og konfigurasjonskart på tvers kube-system, standard~~POS=TRUNC, kube-offentlig, kube-node-lease, og navnerommet for analyse;
  • sender SelfSubjectAccessReview-kall for å kartlegge nøyaktig hva den stjålne identiteten har lov til å gjøre.

Til slutt bruker den brute-force Google Cloud Storage-bucket-navn bygget fra en hardkodet GCP-prosjekt-ID (sjeldne-signerte-437603-p9) og prosjektnummer, og gjette kombinasjoner som *-bygg, *-artefakter, og flere malyse- prefikser (malyse-resultater, malysis-pakker, malyse-skanninger). Hver responskode og -tekst logges og POSTES tilbake til samme sted Jules-collect endepunkt.

Dette er det sjeldne tilfellet av en forsyningskjede-nyttelast som er spesielt bygget for å angripe forsvarernes egen infrastruktur. Dekkhistorien gjennom hele kampanjen – hvorav fragmenter vises inne i nyttelastene som kommentarer som rammer inn oppførselen som en «Security Research PoC … cross-repo writing via overscoped git proxy token» – er den samme selvrettferdiggjøringen, enten kjøretidsmålet er et Shopify-monorepo eller analyseklyngens metadataserver.

Tidslinje og omfangsmigrering

JulesJacker er ikke en engangsoperasjon. Det er en vedvarende operasjon som overlevde en fjerning av registeret ved ganske enkelt å endre navnet.

Når Event
Midt i april 2026 De første pakkene dukker opp under det opprinnelige utgiveromfanget: TS-utility fasade, miljø og git-config-eksfiltrering.
Tidlig i mai 2026 Hypervisor og kernel-escape rekognoseringsvariant publisert.
Midt til sent i mai 2026 SC3 kryssrepo-skriveorm dukker opp sammen med Shopify-målrettede nyttelaster og google-labs-jules[bot] etterligning. SC4 introduserer AES-krypterte og vertsstyrte lastere.
Sent i mai 2026 npm fjerner det opprinnelige utgiveromfanget; pakkenavn løses opp til tomme sikkerhetsholdende plassholdere.
Samme uke Operatøren migrerer til et nesten identisk omfang og publiserer ormen på nytt, inkludert varianten av analyseinfrastruktur.

Migreringen er den delen forsvarerne bør forholde seg til. Nedmonteringen av det første scopet verken avsluttet eller bremset kampanjen. Operatøren hadde allerede iscenesatt et parallelt scope med et navn som skiller seg fra originalen med ett enkelt tegn, og fortsatte å publisere i løpet av samme uke. I skrivende stund er det nye scopets ts-form-utils (versjoner 1.0.0 til 1.1.0), dens ts-prosjekt-lint (1.0.0 og 1.1.0), og den frittstående ts-enum-hjelper (1.0.0) kan fortsatt installeres.

Indikatorer for kompromiss

Alle indikatorene nedenfor ble bekreftet mot pakkekilden.

typen Indikator Merknader
Nettverk (C2) aaronstack[.]com/jules-collect Enkelt samlingsendepunkt på tvers av hver generasjon; mottar JSON-telemetri og tarball-biter for base64-gzip-repositoriet.
Nettverk (SSRF-proxy) http://git@192.168.0.1:8080 Front for et overscoped git proxy-token som brukes til å nå målorganisasjonens repositorier.
Nettverk (sky) metadata.google.internal/computeMetadata/v1
kubernetes.default.svc
storage.googleapis.com/storage/v1/b
Brukes kun av analyseinfrastrukturvarianten for tokentyveri og Kubernetes kontrollplanrekognosering.
Identitet google-labs-jules[bot]
161369871+google-labs-jules[bot]@users.noreply.github.com
Smidd commit forfatteridentitet presset inn i offerets hovedgrener.
filet lib/.perf.dat AES-256-CBC-kryptert nyttelastblob; IV lagret i de første 16 bytene og nøkkel rekonstruert dynamisk i index.js.
filet SECURITY-POC.md Droppet og committilbake til offerarkivene med meldingen chore: update dependency cache.
filet scripts/postinstall.sh Inngjerdet $MALYSIS_ANALYSIS_ID; identifiserer varianten som er målrettet mot analyse-infrastruktur.
Behavioral os.hostname() sjekker for devbox / ubuntu-fc-uvm Sandkasse- og AI-agentmiljøgating før dekryptering og utførelse av nyttelast.
Behavioral .jules/ og /app/.jules kataloglesninger Eksplisitt målretting av arbeidsmiljøer med AI-agenter.
Behavioral sc1-, sc3-, sc4-, s0-vmm-recon Operatørdefinerte telemetri-trinnetiketter som er nyttige for deteksjon og jakt.
Skymål rare-signer-437603-p9
malysis-* bøttegjetninger
Hardkodede GCP-prosjektidentifikatorer og opplistingsmønstre for lagringsbøtter innebygd i analyseinfrastrukturvarianten.
Pakkeform TS-verktøypakkefasade uten depotfelt Konsekvent kampanjemal: falske TypeScript-verktøypakker med innebygd skadelig nyttelast postinstall hooks eller lagt til index.js.
sca-tools-programvare-verktøy for komposisjonsanalyse
Prioriter, utbedre og sikre programvarerisikoene dine
Få din gratis konto.
Ingen kredittkort kreves.

Sikre programvareutviklingen og -leveringen din

med Xygeni-produktpakken