TL; DR
Hiji operator npm nyéépkeun genep minggu pikeun nyebarkeun pakét "utilitas" TypeScript palsu sapertos ts-form-utils, ts-project-lint, sarta ts-enum-helper.
Sanaos pakét-pakét éta ngalaan alat bantu validasi leutik anu katingalina sah, muatan anu saleresna dijalankeun nalika dipasang atanapi diperyogikeun heula sareng ngalaksanakeun sidik jari host, panemuan organisasi GitHub, kloning repositori, sareng éksfiltrasi kode sumber.
Malware ieu khusus narajang organisasi GitHub anu bernilai tinggi, kalebet sababaraha Shopify gudang, teras ngaarsipkeun sareng ngekstrak tangkal sumber anu tiasa dihontal ka titik tungtung koleksi terpusat.
Salaku bagian tina alur kerja kompromi, muatan commitfile sa deui kana gudang korban bari nyamar jadi idéntitas coding otonom Google google-labs-jules[bot].
Kami ngalacak kampanye éta — dingaranan JulesJacker — di sababaraha ruang lingkup penerbit sareng sahenteuna lima generasi payload, kalebet varian anu dienkripsi sareng sadar sandbox.
Varian pang anyarna sacara khusus narékahan infrastruktur analisis malware: éta ngan ukur ngaktipkeun di jero lingkungan analisis, maok token akun layanan metadata awan, sareng nyidik planet kontrol Kubernetes sareng ember panyimpenan awan.
IOC utama anu dibagikeun di sakumna generasi payload nyaéta titik tungtung pangumpulan. aaronstack[.]com/jules-collect.
Parahna: kritis.
Serangan éta: Kumaha Cara Gawéna
Unggal pakét JulesJacker nuturkeun témplat anu sami. rangkep.json ngiklankeun helper TypeScript anu teu bahaya kalayan lisénsi MIT sareng teu aya repositori sumber anu ditautan. indéks.js ngékspor sababaraha fungsi nyata anu tiasa dianggo — regexe email, peta enum, tabel aturan lint — supados pamekar anu leres-leres ngimpor pakét ningali paripolah anu masuk akal. Kedengkian éta aya di tempat sanés: dina saatos dipasang hook, atanapi dina blok di handapeun indéks.js anu dijalankeun nalika modul diperyogikeun.
Muatan parantos mekar ngaliwatan tahapan internal anu dinomeran sacara jelas (operator ngalabel kajadian telemetri sorangan sc1-, sc3-, sc4-, jeung saterusna), sarta ningali évolusi éta mangrupa cara anu pangjelasna pikeun ngartos kampanye ieu.
Generasi 1–2: pangintipan sareng maling git-config
Paket-paket anu pangheulana nyaéta infostealer anu lugas. Nalika dipasang, aranjeunna ngumpulkeun variabel lingkungan, file host GitHub CLI, sareng konfigurasi git global (konfigurasi git –global –daptar, git jarak jauh -v), teras ngeposkeun pakét ka titik tungtung koleksi. Ieu netepkeun tanda tangan operator: carita panutup "utilitas validasi formulir TypeScript", suar kaluar ka hiji domain, sareng rasa pikeun kredensial pamekar tinimbang data konsumen.
Generasi 3: hypervisor sareng probe escape kernel
Hiji vérsi pertengahan kampanye condong ka serangan infrastruktur. Gantina maok konfigurasi, éta ngajalankeun sistem recon harness probing. AF_VSOCK soket, daérah virtio MMIO, /dev/mem, sareng umbul-umbul pengerasan kernel, sareng bahkan usaha ngadatna kernel anu dipicu ku sysrq — paripolah anu aya hubunganana sareng usaha pikeun kaluar tina mesin virtual atanapi wadahna. Tag telemetri (s0-vmm-recon, s1-vmm-vsock-fuzz, s2-vmm-mmio, probe-kernel-s3) ngajantenkeun maksudna jelas. Varian ieu sacara jelas ditujukeun pikeun lingkungan cloud-sandbox sareng serverless-runner — jenis VM éfémeral anu ngawangun sareng nguji kode anu teu dipercaya.
Generasi 3 (SC3): cacing panulis cross-repo
Pusat gravitasi kampanye janten maling repo anu nyebarkeun diri. Nalika dipasang, payload ngajalankeun runtuyan waktos lima tahapan:
- tahap 0 (~100 ms): sidik jari host — ngaran host, info pangguna, idéntitas git.
- tahap 1 (~3 detik): nangtukeun organisasi mana korban kagabung ku cara mariksa git jarak jauh -v, teras milarian hardcoded ORG_CONFIG aksés tabel sareng repo tés nganggo git ls-remote — diarahkeun ngaliwatan proxy SSRF anu dikontrol ku panyerang di http://git@192.168.0.1:8080.
- tahap 2 (~10 detik): git klon Unggal repositori anu tiasa dihontal dina daptar target, tarball sareng gzip tangkalna, base64-encode, sareng chunk-exfiltrate.
- tahap 3 (~45 detik): "bukti aksés" — klonkeun repo anu tiasa ditulis, leupaskeun file anu namina SECURITY-POC.md, sareng commit éta kalayan pangarang disetel ka google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> sareng pesen tugas: apdet cache katergantungan, teras dorong ka cabang utama korban.
Daptar target anu di-hardcode henteu umum. Éta ngadaptar langkung ti tilu puluh Shopify gudang dumasar kana ngaran — Shopify/shopify, Shopify/idéntitas, Shopify/tagihan, Shopify/gudang, Shopify/rahasia, Shopify/infrastruktur, Shopify/.github, sareng seueur deui — sareng organisasi uji coba, AaronStackBarnes, anu sigana dikontrol ku operator sareng dianggo salaku target tulis.
Generasi 4 (SC4): dienkripsi sareng dipager
Varian pang anyarna anu nuju ka pamekar nambihan dua lapisan panghindaran di luhur cacing SC3.
Mimitina, payload-na teu dikirimkeun deui salaku plaintext. Logika anu saleresna aya dina blob anu dienkripsi AES-256-CBC, lib/.perf.dat, kalawan IV dina genep belas bait munggaranana. Loader na indéks.js ngawangun deui konci dekripsi tina fragmen string anu digabungkeun, ngadekripsi blob, sareng ngajalankeunana nganggo Fungsi anyar()Malah ngaran modulna ogé dibagi pikeun nyingkahan pamindai statis — merlukeun('crypt' + 'o'), merlukeun('f' + 's').
Kadua, éta di-host-gated. Hiji varian ngan ukur ngadekripsi sareng jalan nalika os.ngaranhost() sarua kotak pamekar or ubuntu-fc-uvm (microVM Firecracker standar) atanapi ngandung substring kotak pamekarGerbang séjén dina ayana hiji .jules/ diréktori gawé:
Ku kituna, muatan SC4 dirancang pikeun tetep teu aktip dina laptop pamekar biasa sareng ngan ukur hudang di jero agén AI otomatis sareng lingkungan sandbox operator sabenerna hoyong kompromi.
Ngahurungkeun Lab: Varian Analisis-Infrastruktur
Pakét anu paling anyar dina kampanye ieu, ts-enum-helper, henteu nyerang pamekar atanapi Shopify pisan. Na postinstall.sh dibuka ku gerbang anu masihan kaulinan:
Skripna teu ngalakukeun nanaon kajaba variabel lingkungan anu khusus pikeun platform analisis malware disetel. Nalika éta disetel, payload terang yén éta dijalankeun di jero sandbox anu aya pikeun ngabeledugkeun sareng nalungtik pakét sapertos kieu — teras éta nyerang balik.
Mimitina, éta narik token OAuth akun layanan GCP tina server metadata instansi sareng ngaluarkeun éta. Teras, nganggo token éta, éta nyapu Bidang kontrol Kubernetes ngahontal di kubernetes.default.svc:
- ngadaptar ClusterRoleBindings, ClusterRoles, sareng Nodes;
- nalungtik pod, rusiah, sareng peta konfigurasi di sakuliah sistem kube, standar, kube-publik, kube-node-lease, sareng rohangan nami analisis;
- ngaluarkeun panggero SelfSubjectAccessReview pikeun memetakan sacara pasti naon anu diidinan dilakukeun ku idéntitas anu dipaling.
Tungtungna éta sacara brutal maksa ngaran ember Google Cloud Storage anu diwangun tina ID proyék GCP anu di-hardcode (tandatangan-langka-437603-p9) sareng nomer proyék, ngira-ngira kombinasi sapertos *-ngawangun, *-artéfak, sareng sababaraha malisis- awalan (hasil-malisis, pakét-malysis, malysis-scans). Unggal kode sareng awak réspon dirékam sareng di-POST deui ka anu sami. jules-collect titik tungtung.
Ieu mangrupikeun kasus anu jarang tina muatan ranté suplai anu didamel khusus pikeun nyerang infrastruktur pembela sorangan. Carita utama dina sakumna kampanye — fragmen-fragmenna muncul di jero muatan salaku koméntar anu ngabingkai paripolah salaku "PoC Panalungtikan Kaamanan ... tulisan cross-repo via token proxy git anu di-overscope" — mangrupikeun justifikasi diri anu sami, naha target runtime mangrupikeun monorepo Shopify atanapi server metadata klaster analisis.
Garis Waktu & Migrasi Ruang Lingkup
JulesJacker sanés kajadian sakali. Éta mangrupikeun operasi anu terus-terusan anu salamet tina panyabutan pendaptaran ku ngan saukur ngarobih namina.
| Iraha | kajadian |
|---|---|
| Pertengahan April 2026 | Paket-paket munggaran muncul dina ruang lingkup penerbit aslina: TS-utility façade, environment sareng git-config exfiltration. |
| Awal Méi 2026 | Varian hypervisor sareng kernel-escape reconnaissance parantos dipedalkeun. |
| Pertengahan nepi ka ahir Méi 2026 | Cacing nulis cross-repo SC3 muncul bareng jeung payload anu ditujukeun ka Shopify sareng google-labs-jules[bot] paniruan. SC4 ngenalkeun loader anu dienkripsi AES sareng host-gated. |
| Telat Méi 2026 | npm ngahapus ruang lingkup penerbit aslina; nami pakét ngarengsekeun pikeun ngosongkeun tempat panyimpen kaamanan. |
| Minggu anu sami | Operator migrasi ka ruang lingkup anu ampir sami sareng nyebarkeun deui cacing éta, kalebet varian infrastruktur analisis. |
Migrasi mangrupikeun bagian anu kedah diurus ku para pembela. Ngaleungitkeun scope anu munggaran henteu mungkas kampanye atanapi malah ngalambatkeunana. Operator parantos ngayakeun scope paralel anu namina béda ti aslina ku hiji karakter, sareng teras medalkeun dina minggu anu sami. Nalika tulisan ieu ditulis, scope anu énggal ts-form-utils (versi 1.0.0 nepi ka 1.1.0), na ts-project-lint (1.0.0 sareng 1.1.0), sareng anu mandiri ts-enum-helper (1.0.0) tetep tiasa dipasang.
Indikator Kompromi
Sadaya indikator di handap ieu dikonfirmasi ngalawan sumber pakét.
| ngetik | indikator | Catetan |
|---|---|---|
| Jaringan (C2) | aaronstack[.]com/jules-collect | Titik tungtung koleksi tunggal di unggal generasi; nampi telemetri JSON sareng potongan tarball repositori base64-gzip. |
| Jaringan (proksi SSRF) | http://git@192.168.0.1:8080 | Hareup pikeun token proxy git anu di-overscope anu dianggo pikeun ngahontal repositori organisasi target. |
| Jaringan (awan) | metadata.google.internal/computeMetadata/v1kubernetes.default.svcstorage.googleapis.com/storage/v1/b | Dianggo ngan ukur ku varian analisis-infrastruktur pikeun maling token sareng pangintipan pesawat-kontrol Kubernetes. |
| Identity | google-labs-jules[bot]161369871+google-labs-jules[bot]@users.noreply.github.com | ngajalin commit idéntitas pangarang diasupkeun kana dahan-dahan arus utama korban. |
| file | lib/.perf.dat | Gumpalan payload anu dienkripsi AES-256-CBC; IV disimpen dina 16 bait munggaran sareng konci diwangun deui sacara dinamis dina index.js. |
| file | SECURITY-POC.md | Dijatuhkeun sareng commitdisimpen deui kana gudang korban nganggo pesen chore: update dependency cache. |
| file | scripts/postinstall.sh | Dipager $MALYSIS_ANALYSIS_ID; ngaidentipikasi varian panargetan analisis-infrastruktur. |
| Paripolah | os.hostname() cék pikeun devbox / ubuntu-fc-uvm | Ngajaga lingkungan sandbox sareng AI-agent sateuacan dekripsi sareng palaksanaan payload. |
| Paripolah | .jules/ jeung /app/.jules diréktori dibaca | Targeting eksplisit pikeun lingkungan rohangan gawé agén AI. |
| Paripolah | sc1-, sc3-, sc4-, s0-vmm-recon | Labél tahapan telemetri anu ditetepkeun ku operator mangpaat pikeun deteksi sareng moro. |
| Target awan | rare-signer-437603-p9malysis-* tebakan ember | Identifier proyék GCP anu di-hardcode sareng pola enumerasi storage-bucket anu dipasang dina varian analisis-infrastruktur. |
| Bentuk pakét | Fasad pakét utilitas TS tanpa widang repositori | Citakan kampanye anu konsisten: pakét utilitas TypeScript palsu kalayan muatan jahat anu dipasang dina postinstall hooks atanapi dilampirkeun kana index.js. |




