JulesJacker: Krimbi i rremë npm imiton Jules AI

JulesJacker: Një krimb npm i rremë PoC që imiton agjentin Jules të Google - dhe ndez sandbox-in duke e analizuar atë

TL; DR

Një operator i vetëm npm kaloi gjashtë javë duke publikuar paketa të rreme "shërbimesh" TypeScript, të tilla si ts-form-utils, ts-project-lintdhe ts-enum-helper.

Ndërsa paketat ekspozojnë ndihmës të vegjël validimi që duken legjitimë, ngarkesa reale ekzekutohet gjatë instalimit ose kërkesës së parë dhe kryen gjurmët e gishtërinjve të hostit, zbulimin e organizatës GitHub, klonimin e depove dhe nxjerrjen e kodit burimor.

Malware synon posaçërisht organizatat me vlerë të lartë në GitHub, duke përfshirë shumë Shopify depot, pastaj arkivon dhe ekfiltron pemët burimore të arritshme në një pikë fundore të centralizuar të koleksionit.

Si pjesë e rrjedhës së punës së kompromisit, ngarkesa commitskedari sa kthehet në depot e viktimave duke imituar identitetin autonom të kodimit të Google-it google-labs-jules[bot].

Ne e gjurmuam fushatën — e emëruar JulesJacker — në shumë fusha botuesish dhe të paktën pesë breza ngarkese, duke përfshirë variante të enkriptuara dhe të ndërgjegjshme për sandbox-in.

Varianti më i ri synon posaçërisht infrastrukturën e analizës së malware-it: aktivizohet vetëm brenda mjediseve të analizës, vjedh tokenët e shërbimit të llogarisë së meta të dhënave në cloud dhe teston planet e kontrollit të Kubernetes dhe kovat e ruajtjes në cloud.

IOC-ja kryesore e ndarë në të gjitha gjeneratat e ngarkesës është pika fundore e mbledhjes. aaronstack[.]com/jules-collect.

Ashpërsia: kritike.

Sulmi: Si funksionon

Çdo paketë JulesJacker ndjek të njëjtin model. package.json reklamon një ndihmës të mirë TypeScript me një licencë MIT dhe pa një depo burimi të lidhur. indeks.js eksporton një numër të vogël funksionesh reale dhe funksionale — regexe-e email-i, harta enum-imi, tabela rregullash lint — në mënyrë që një zhvillues që në fakt importon paketën të shohë sjellje të besueshme. Keqdashja ndodhet diku tjetër: në një post-instalim grep, ose në një bllok në fund të indeks.js që ekzekutohet në momentin që moduli kërkohet.

Ngarkesat kanë evoluar përmes fazave të brendshme të numëruara qartë (operatori etiketon ngjarjet e veta të telemetrisë) sc1-, sc3-, sc4-, e kështu me radhë), dhe vëzhgimi i këtij evolucioni është mënyra më e qartë për të kuptuar fushatën.

 Gjenerata 1–2: zbulimi dhe vjedhja e git-config

Paketat më të hershme ishin vjedhës informacioni të thjeshtë. Gjatë instalimit, ato mblidhnin variablat e mjedisit, skedarin e hosteve GitHub CLI dhe konfigurimin global të git (git config –global –list, git remote -v), pastaj e dërgoi paketën me POST në pikën fundore të koleksionit. Kjo përcaktoi nënshkrimin e operatorit: një histori mbuluese "shërbime validimi formularësh TypeScript", një sinjalizues dalës në një domen të vetëm dhe një shije për kredencialet e zhvilluesit në vend të të dhënave të konsumatorit.

Gjenerata 3: hipervizori dhe sondat e daljes nga bërthama

Një version i mesit të fushatës u përqendrua në sulme infrastrukturore. Në vend që të vidhte konfigurimin, ai ekzekutoi një sistem kontrolli zbulimi. AF_VSOCK prizat, rajonet virtio MMIO, / dev / mem, dhe flamuj të forcimit të bërthamës, dhe madje edhe përpjekje për rrëzime të bërthamës të shkaktuara nga sysrq — sjellje e lidhur me përpjekjet për të dalë nga një makinë ose kontejner virtual. Etiketat e telemetrisë (s0-vmm-rekonim, s1-vmm-vsock-fuzz, s2-vmm-mmio, sonda-bërthamore-s3) e bëri qëllimin të qartë. Ky variant synonte qartësisht mjedise cloud-sandbox dhe serverless-runner — lloji i VM-së kalimtare që ndërton dhe teston kod të pabesueshëm.

Gjenerata 3 (SC3): krimbi i shkrimit me depo të kryqëzuara

Qendra e gravitetit të fushatës u bë një hajdut deposh vetëpërhapës. Gjatë instalimit, ngarkesa ekzekuton një sekuencë kohore me pesë faza:

  • Faza 0 (~100 ms): gjurmë gishtash e hostit — emri i hostit, informacioni i përdoruesit, identiteti i git.
  • Faza 1 (~3 s): përcaktoni se cilës organizatë i përket viktima duke inspektuar git remote -v, pastaj kërkoni një kod të ngurtë ORG_CONFIG tabelë dhe qasje në depo testimi me git ls-remote — i drejtuar përmes një proxy SSRF të kontrolluar nga sulmuesi në http://git@192.168.0.1:8080.
  • Faza 2 (~10 s): klon git çdo depo e arritshme në listën e synuar, tarball dhe gzip pemën, kodojeni atë me bazë64 dhe ekfiltroni atë me chunk-e.
  • Faza 3 (~45 s): "prova e aksesit" — klononi një depo të shkrueshme, hidhni një skedar të quajtur SECURITY-POC.md dhe commit me autorin të vendosur në google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> dhe mesazhin chore: përditëso memorien e varësisë, pastaj shtyje në degën kryesore të viktimës.

Lista e objektivave të koduara në mënyrë të ngurtë nuk është gjenerike. Ajo numëron më shumë se tridhjetë Shopify depo sipas emrit — Shopify/shopify, Shopify/identitet, Shopify/faturim, Shopify/kasafortë, Shopify/sekrete, Shopify/infrastrukturë, Shopify/.github, dhe shumë të tjera — së bashku me një organizatë testimi, AaronStackBarnes, që operatori duket se e kontrollon dhe e përdor si objektiv shkrimi.

Gjenerata 4 (SC4): e enkriptuar dhe e kontrolluar

Varianti më i ri i fokusuar te zhvilluesit shton dy shtresa shmangieje përveç krimbit SC3.

Së pari, ngarkesa nuk dërgohet më si tekst i thjeshtë. Logjika e vërtetë ndodhet në një blob të enkriptuar me AES-256-CBC, lib/.perf.dat, me IV në gjashtëmbëdhjetë bajtët e parë. Ngarkuesi në indeks.js rindërton çelësin e deshifrimit nga fragmente të vargjeve të bashkuara, deshifron blob-in dhe e ekzekuton atë me Funksion i ri()Edhe emrat e moduleve janë të ndarë për të shmangur skanerët statikë — kërkoj('kript' + 'o'), kërkoj('f' + 's').

Së dyti, është i kontrolluar nga host-i. Një variant deshifrohet dhe ekzekutohet vetëm kur os.emri i hostit() është e barabartë me kutia e zhvilluesve or ubuntu-fc-uvm (një microVM Firecracker parazgjedhur) ose përmban nënvargun kutia e zhvilluesveNjë tjetër portë në praninë e një .jules/ drejtoria e punës:

Me fjalë të tjera, ngarkesa SC4 është projektuar të qëndrojë e fjetur në laptopin e një zhvilluesi të zakonshëm dhe të zgjohet vetëm brenda agjentit të automatizuar të IA-së dhe mjedise sandbox Operatori në të vërtetë dëshiron të bëjë kompromis.

Ndezja e Laboratorit: Varianti i Analizës-Infrastrukturës

Paketa më e re në fushatë, ndihmësi-ts-enum, nuk sulmon fare zhvilluesit ose Shopify. Është postinstall.sh hapet me një portë që zbulon lojën:

Skripti nuk bën asgjë nëse nuk është vendosur një variabël mjedisi specifik për një platformë analize të malware-it. Kur është vendosur, ngarkesa e di se po funksionon brenda sandbox-it që ekziston për të shpërthyer dhe studiuar paketa pikërisht si kjo - dhe kundërsulmon.

Së pari tërheq tokenin OAuth të llogarisë së shërbimit GCP nga serveri i meta të dhënave të instancës dhe e nxjerr atë. Pastaj, duke përdorur atë token, ai fshin Aeroplani i kontrollit Kubernetes i arritshëm në kubernetes.default.svc:

  • liston ClusterRoleBindings, ClusterRoles dhe Nodes;
  • sondat pod, sekretet dhe hartat e konfigurimit në të gjithë sistemi kube, parazgjedhur, kube-publike, kube-node-leasedhe hapësira e emrave të analizës;
  • probleme me thirrjet SelfSubjectAccessReview për të hartuar saktësisht se çfarë lejohet të bëjë identiteti i vjedhur.

Së fundmi, ai përdor me forcë emrat e kovave të Google Cloud Storage të ndërtuar nga një ID projekti GCP i koduar fort (nënshkrues-i-rarë-437603-p9) dhe numri i projektit, duke hamendësuar kombinime të tilla si *-ndërton, *-artefakte, dhe disa malizë- parashtesa (rezultatet e malizës, paketa-malize, skanime melizeÇdo kod dhe trup përgjigjeje regjistrohet dhe POSTohet përsëri në të njëjtën adresë. koleksioni i jules pika e fundit.

Ky është rasti i rrallë i një ngarkese të zinxhirit të furnizimit të ndërtuar posaçërisht për të sulmuar infrastrukturën e vetë mbrojtësve. Historia kryesore në të gjithë fushatën - fragmente të së cilës shfaqen brenda ngarkesave si komente që e paraqesin sjelljen si një "PoC të Kërkimit të Sigurisë ... shkrim në depo të kryqëzuara nëpërmjet tokenit të proxy-t të git të mbivendosur" - është i njëjti vetë-justifikim, pavarësisht nëse objektivi i kohës së ekzekutimit është një monorepo e Shopify apo serveri i meta të dhënave të klasterit të analizës.

Afati kohor dhe migrimi i fushëveprimit

JulesJacker nuk është një operacion i menjëhershëm. Është një operacion i vazhdueshëm që i mbijetoi një rrëzimi të regjistrit thjesht duke ndryshuar emrin e tij.

Kur ngjarje
Mesi i prillit 2026 Paketat e para shfaqen nën fushëveprimin origjinal të botuesit: fasada e shërbimeve TS, mjedisi dhe eksfiltrimi i git-config.
Në fillim të majit 2026 U publikua hypervisor dhe varianti i zbulimit të kernel-escape.
Nga mesi deri në fund të majit 2026 Krimbi i shkrimit SC3 në repozitorë të kryqëzuar shfaqet së bashku me ngarkesat e synuara për Shopify dhe google-labs-jules[bot] imitim. SC4 prezanton ngarkues të enkriptuar me AES dhe të kontrolluar nga host-gated.
Fundi i majit 2026 npm heq fushëveprimin origjinal të botuesit; emrat e paketave zgjidhen për të zbrazur mbajtësit e vendeve që mbajnë sigurinë.
E njëjta javë Operatori migron në një fushëveprim pothuajse identik dhe e ripublikon krimbin, duke përfshirë variantin e infrastrukturës së analizës.

Migrimi është pjesa me të cilën mbrojtësit duhet të merren vesh. Heqja e vizorit të parë nuk e përfundoi fushatën dhe as nuk e ngadalësoi atë. Operatori kishte organizuar tashmë një vizorit paralel, emri i të cilit ndryshon nga origjinali me një karakter të vetëm, dhe vazhdoi publikimin brenda të njëjtës javë. Deri në momentin e shkrimit të këtij teksti, vizori i ri... ts-form-utils (versionet 1.0.0 deri në 1.1.0), e saj ts-project-lint (1.0.0 dhe 1.1.0), dhe versioni i pavarur ndihmësi-ts-enum (1.0.0) mbeten të instalueshme.

Treguesit e Kompromisit

Të gjithë treguesit më poshtë u konfirmuan kundrejt burimit të paketës.

Tipi Tregues Shënimet
Rrjeti (C2) aaronstack[.]com/jules-collect Pikë fundore e vetme e koleksionit në çdo brez; merr telemetrinë JSON dhe pjesë të tarball-it të repozitorit base64-gzip.
Rrjeti (proxy SSRF) http://git@192.168.0.1:8080 Përpara për një token git proxy të mbi-scopuar të përdorur për të arritur depot e organizatës së synuar.
Rrjeti (cloud) metadata.google.internal/computeMetadata/v1
kubernetes.default.svc
storage.googleapis.com/storage/v1/b
Përdoret vetëm nga varianti i infrastrukturës së analizës për vjedhjen e tokenëve dhe zbulimin e planit të kontrollit Kubernetes.
Identitet google-labs-jules[bot]
161369871+google-labs-jules[bot]@users.noreply.github.com
Falsifikuara commit Identiteti i autorit i shtyrë në degët kryesore të viktimës.
Skedar lib/.perf.dat Blob i ngarkesës së enkriptuar me AES-256-CBC; IV i ruajtur në 16 bajtët e parë dhe çelësi i rindërtuar dinamikisht në index.js.
Skedar SECURITY-POC.md U rrëzua dhe commitu kthye në depot e viktimave me mesazhin chore: update dependency cache.
Skedar scripts/postinstall.sh Me portë $MALYSIS_ANALYSIS_ID; identifikon variantin e synimit të analizës-infrastrukturës.
sjelljes os.hostname() kontrolle për devbox / ubuntu-fc-uvm Kontroll i mjedisit sandbox dhe agjentit të inteligjencës artificiale (AI-agent) përpara deshifrimit dhe ekzekutimit të ngarkesës së dobishme.
sjelljes .jules/ /app/.jules leximet e drejtorisë Targetim i qartë i mjediseve të hapësirës së punës të agjentëve të IA-së.
sjelljes sc1-, sc3-, sc4-, s0-vmm-recon Etiketa të fazës së telemetrisë të përcaktuara nga operatori të dobishme për zbulimin dhe gjueti.
Objektivi i reve rare-signer-437603-p9
malysis-* hamendësime të kovave
Identifikuesit e projekteve GCP të koduar fort dhe modelet e numërimit të kovës së ruajtjes të integruara në variantin e infrastrukturës së analizës.
Forma e paketimit Fasada e paketës TS-utility pa fushë depozitimi Shabllon i qëndrueshëm i fushatës: paketa të rreme të shërbimeve TypeScript me ngarkesa të dëmshme të integruara në postinstall hooks ose i bashkangjitur index.js.
mjetet-e-për-përbërjes-së-softuerit-sca-tools
Përparësoni, korrigjoni dhe siguroni rreziqet e softuerit tuaj
Merrni Llogarinë tuaj Falas.
Nuk kërkohet kartë krediti.

Siguroni Zhvillimin dhe Ofrimin e Softuerit tuaj

me Xygeni Product Suite