JulesJacker: Falsk npm-orm efterligner Jules AI

JulesJacker: En falsk PoC npm-orm, der efterligner Googles Jules-agent – ​​og aktiverer sandkassen, der analyserer den

TL; DR

En enkelt npm-operatør brugte seks uger på at udgive falske TypeScript-"hjælpepakker" som f.eks. ts-form-utils, ts-project-lintog ts-enum-helper.

Mens pakkerne eksponerer små, legitimt udseende valideringshjælpere, udføres den virkelige nyttelast ved installation eller første krav og udfører værtsfingeraftryk, GitHub-organisationsopdagelse, kloning af arkiver og eksfiltrering af kildekode.

Malwaren er specifikt rettet mod værdifulde GitHub-organisationer, herunder flere Shopify lagre, arkiverer og eksfiltrerer derefter tilgængelige kildetræer til et centraliseret samlingsslutpunkt.

Som en del af kompromisarbejdsgangen, nyttelasten commitsa-fil tilbage i offerlagre, mens den efterligner Googles autonome kodende identitet google-labs-jules[bot].

Vi fulgte kampagnen — navngivet JulesJacker — på tværs af flere udgiverområder og mindst fem generationer af nyttelast, inklusive krypterede og sandbox-bevidste varianter.

Den nyeste variant er specifikt rettet mod malware-analyseinfrastruktur: den aktiveres kun i analysemiljøer, stjæler cloud-metadata-tjenestekontotokens og undersøger Kubernetes-kontrolplaner og cloud-lagringsbuckets.

Den primære IOC, der deles på tværs af alle nyttelastgenerationer, er indsamlingsslutpunktet aaronstack[.]com/jules-collect.

Sværhedsgrad: kritisk.

Angrebet: Sådan fungerer det

Hver JulesJacker-pakke følger den samme skabelon. pakke.json reklamerer for en godartet TypeScript-hjælper med en MIT-licens og intet linket kildekodelager. index.js eksporterer en håndfuld rigtige, fungerende funktioner — e-mail-regexer, enum-kort, lint-regeltabeller — så en udvikler, der rent faktisk importerer pakken, ser plausibel opførsel. Ondskaben findes et andet sted: i en efterinstallation krog, eller i en blok i bunden af index.js der udføres i det øjeblik modulet er nødvendigt.

Nyttelasterne har udviklet sig gennem tydeligt nummererede interne faser (operatøren mærker sine egne telemetrihændelser sc1-, sc3-, sc4-osv.), og at observere denne udvikling er den klareste måde at forstå kampagnen på.

 Generation 1-2: rekognoscering og git-config-tyveri

De tidligste pakker var simple infostealere. Ved installationen indsamlede de miljøvariabler, GitHub CLI-hosts-filen og den globale git-konfiguration (git config –global –list, git fjernbetjening -v), og sendte derefter bundtet til indsamlingsslutpunktet. Dette etablerede operatørens signatur: en forsidehistorie om "TypeScript form validation utilities", en udgående beacon til et enkelt domæne og en smag for udviklerlegitimationsoplysninger frem for forbrugerdata.

Generation 3: hypervisor- og kernel-escape-prober

En version midt i kampagnen drejede sig kraftigt mod infrastrukturangreb. I stedet for at stjæle konfiguration, kørte den en rekognosceringsharness-probing. AF_VSOCK sockets, virtio MMIO-regioner, / dev / mem, og kernelhærdningsflag, og endda forsøg på sysrq-udløste kernelnedbrud — adfærd forbundet med forsøg på at bryde ud af en virtuel maskine eller container. Telemetri-tagsene (s0-vmm-rekognoscering, s1-vmm-vsock-fuzz, s2-vmm-mmio, s3-kerne-probe) gjorde intentionen eksplicit. Denne variant var tydeligvis rettet mod cloud-sandbox og serverless-runner-miljøer — den slags flygtige VM, der bygger og tester upålidelig kode.

Generation 3 (SC3): cross-repo write-ormen

Kampagnens tyngdepunkt blev en selvudbredende repo-tyv. Ved installationen kører nyttelasten en tidsbestemt sekvens i fem trin:

  • Stage 0 (~100 ms): fingeraftryk af værten — værtsnavn, brugerinfo, git-identitet.
  • Stage 1 (~3 s): Bestem hvilken organisation offeret tilhører ved at inspicere git fjernbetjening -v, og slå derefter en hardcoded op ORG_CONFIG adgang til tabeller og testrepositorier med git ls-remote — dirigeres gennem en angriberkontrolleret SSRF-proxy på http://git@192.168.0.1:8080.
  • Stage 2 (~10 sekunder): git klon alle tilgængelige repositories i mållisten, tarball og gzip træet, base64-encode det og chunk-exfiltrate det.
  • Stage 3 (~45 s): "adgangsbeviset" — klon et skrivbart lager, slip en fil med navnet SECURITY-POC.md, og commit den med forfatteren indstillet til google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> og meddelelsen chore: update dependency cache, og send derefter til offerets hovedgren.

Den hardcodede målliste er ikke generisk. Den opregner mere end tredive Shopify arkiver efter navn — Shopify/Shopify, Shopify/identitet, Shopify/fakturering, Shopify/hvælving, Shopify/hemmeligheder, Shopify/infrastruktur, Shopify/.githubog mange flere — sammen med en testorganisation, AaronStackBarnes, som operatoren tilsyneladende kontrollerer og bruger som skrivemål.

Generation 4 (SC4): krypteret og gated

Den nyeste udviklervendte variant tilføjer to lag af undvigelse oven på SC3-ormen.

For det første sendes nyttelasten ikke længere som klartekst. Den virkelige logik ligger i en AES-256-CBC-krypteret blob, lib/.perf.dat, med IV'en i dens første seksten bytes. Indlæseren i index.js rekonstruerer dekrypteringsnøglen fra sammenkædede strengfragmenter, dekrypterer bloben og kører den med ny funktion()Selv modulnavnene er opdelt for at undgå statiske scannere — require('crypt' + 'o'), kræver('f' + 's').

For det andet er den værtsbaseret. Én variant dekrypterer og kører kun, når os.værtsnavn() lige med udviklerboks or ubuntu-fc-uvm (en Firecracker microVM-standard) eller indeholder delstrengen udviklerboksEn anden port på tilstedeværelsen af ​​en .jules/ arbejdsmappe:

Med andre ord er SC4-nyttelasten designet til at forblive inaktiv på en almindelig udviklers bærbare computer og kun vågne op inde i den automatiserede AI-agent. sandkassemiljøer Operatøren ønsker faktisk at gå på kompromis.

Tænd for laboratoriet: Analyse-infrastrukturvarianten

Den mest nyskabende pakke i kampagnen, ts-enum-hjælper, angriber slet ikke udviklere eller Shopify. Dens postinstall.sh åbner med en port, der afslører spillet:

Scriptet gør ingenting, medmindre en miljøvariabel specifik for en platform til malware-analyse er indstillet. Når den er det, ved nyttelasten, at den kører inde i den sandkasse, der findes for at detonere og studere pakker præcis som denne - og den foretager et modangreb.

Den trækker først GCP-servicekontoens OAuth-token fra instansens metadataserver og eksfiltrerer den. Derefter bruger den tokenet til at scanne Kubernetes kontrolfly nås kl kubernetes.default.svc:

  • viser ClusterRoleBindings, ClusterRoles og Nodes;
  • undersøger pods, hemmeligheder og konfigurationskort på tværs kube-system, standard, kube-offentlig, kube-node-leasing, og analysenavneområdet;
  • udfører SelfSubjectAccessReview-kald for at kortlægge præcis, hvad den stjålne identitet har tilladelse til at gøre.

Endelig brute-forcerer den Google Cloud Storage bucket-navne bygget ud fra et hardcodet GCP-projekt-ID (sjælden-underskriver-437603-p9) og projektnummer, gætte kombinationer som f.eks. *-bygger, *-artefakter, og flere malyse- præfikser (malyse-resultater, malysis-pakker, malyse-scanninger). Hver svarkode og -tekst logges og sendes tilbage til den samme jules-collect slutpunkt.

Dette er det sjældne tilfælde af en forsyningskæde-nyttelast, der er bygget specifikt til at angribe forsvarernes egen infrastruktur. Dækhistorien på tværs af hele kampagnen – hvoraf fragmenter vises inde i nyttelastene som kommentarer, der indrammer adfærden som en "Security Research PoC ... cross-repo write via overscoped git proxy token" – er den samme selvretfærdiggørelse, uanset om runtime-målet er et Shopify monorepo eller analyseklyngens metadataserver.

Tidslinje og omfangsmigrering

JulesJacker er ikke en engangsfjernelse. Det er en vedvarende operation, der overlevede en fjernelse fra registret ved blot at ændre dens navn.

Når Begivenhed
Midt i april 2026 De første pakker vises under det oprindelige udgiveromfang: TS-utility facade, environment og git-config exfiltration.
Begyndelsen af ​​maj 2026 Hypervisor og kernel-escape rekognosceringsvariant udgivet.
Midt til slutningen af ​​maj 2026 SC3 cross-repo write worm vises sammen med Shopify-målrettede nyttelaster og google-labs-jules[bot] efterligning. SC4 introducerer AES-krypterede og værtsstyrede indlæsere.
Slutningen af ​​maj 2026 npm fjerner det oprindelige udgiveromfang; pakkenavne omdannes til tomme sikkerhedsholdende pladsholdere.
Samme uge Operatøren migrerer til et næsten identisk omfang og genudgiver ormen, inklusive analyse-infrastrukturvarianten.

Migreringen er den del, forsvarerne bør forholde sig til. Nedtagningen af ​​det første scope afsluttede ikke kampagnen eller bremsede den endda. Operatøren havde allerede iscenesat et parallelt scope, hvis navn adskiller sig fra originalen med et enkelt tegn, og fortsatte med at udgive inden for samme uge. I skrivende stund er det nye scopes ts-formular-utils (version 1.0.0 til 1.1.0), dens ts-projekt-lint (1.0.0 og 1.1.0) og den separate version ts-enum-hjælper (1.0.0) kan stadig installeres.

Indikatorer for kompromis

Alle nedenstående indikatorer blev bekræftet mod pakkekilden.

Type Indikator Noter
Netværk (C2) aaronstack[.]com/jules-collect Enkelt samlingsslutpunkt på tværs af hver generation; modtager JSON-telemetri og base64-gzip-arkivets tarball-stykker.
Netværk (SSRF-proxy) http://git@192.168.0.1:8080 Forside for et overscoped git proxy-token, der bruges til at nå målorganisationens arkiver.
Netværk (sky) metadata.google.internal/computeMetadata/v1
kubernetes.default.svc
storage.googleapis.com/storage/v1/b
Bruges kun af analyse-infrastrukturvarianten til token-tyveri og Kubernetes-kontrolplanrekognoscering.
Identity google-labs-jules[bot]
161369871+google-labs-jules[bot]@users.noreply.github.com
Smedet commit forfatteridentitet skubbet ind i offerets hovedgrene.
File (Felt) lib/.perf.dat AES-256-CBC-krypteret nyttelastblob; IV gemt i de første 16 bytes og nøgle rekonstrueret dynamisk i index.js.
File (Felt) SECURITY-POC.md Faldt og committilbage til offerarkivene med beskeden chore: update dependency cache.
File (Felt) scripts/postinstall.sh Gated på $MALYSIS_ANALYSIS_ID; identificerer varianten, der er målrettet mod analyse-infrastruktur.
Behavioral os.hostname() kontrollerer for devbox / ubuntu-fc-uvm Sandbox- og AI-agentmiljøgating før dekryptering og udførelse af nyttelast.
Behavioral .jules/ og /app/.jules mappelæsninger Eksplicit målretning af AI-agent-arbejdsområdemiljøer.
Behavioral sc1-, sc3-, sc4-, s0-vmm-recon Operatørdefinerede telemetri-faseetiketter, der er nyttige til detektion og jagt.
Cloud-mål rare-signer-437603-p9
malysis-* spandgæt
Hardkodede GCP-projektidentifikatorer og storage-bucket-optællingsmønstre integreret i analyse-infrastrukturvarianten.
Pakkeform TS-forsyningspakkefacade uden depotfelt Konsekvent kampagneskabelon: falske TypeScript-hjælpepakker med indlejret skadelig data postinstall hooks eller tilføjet til index.js.
sca-tools-software-kompositionsanalyseværktøjer
Prioriter, afhjælp og sørg for dine softwarerisici
Få din gratis konto.
Der kræves ikke noget kreditkort.

Sikr din softwareudvikling og -levering

med Xygeni-produktsuite