JulesJacker: Worm npm Palsu Menyamar sebagai AI Jules

JulesJacker: Worm npm Palsu Berbasis Bukti Warna yang Menyamar sebagai Agen Jules Google — dan Memicu Sandbox yang Menganalisisnya

TL; DR

Seorang operator npm menghabiskan waktu enam minggu untuk menerbitkan paket "utilitas" TypeScript palsu seperti ts-form-utils, ts-project-lint, dan ts-enum-helper.

Meskipun paket-paket tersebut menampilkan fungsi bantu validasi kecil yang tampak sah, muatan sebenarnya dieksekusi saat instalasi atau saat pertama kali dibutuhkan dan melakukan identifikasi host, penemuan organisasi GitHub, kloning repositori, dan eksfiltrasi kode sumber.

Malware ini secara khusus menargetkan organisasi GitHub bernilai tinggi, termasuk beberapa organisasi lainnya. Shopify repositori, kemudian mengarsipkan dan mengekstrak pohon sumber yang dapat dijangkau ke titik akhir koleksi terpusat.

Sebagai bagian dari alur kerja kompromi, muatan (payload) commitsa mengembalikan berkas ke repositori korban sambil meniru identitas pengkodean otonom Google. google-labs-jules[bot].

Kami melacak kampanye tersebut — yang bernama JulesJacker — di berbagai lingkup penerbit dan setidaknya lima generasi muatan data, termasuk varian terenkripsi dan yang sadar akan lingkungan sandbox.

Varian terbaru secara khusus menargetkan infrastruktur analisis malware: varian ini hanya aktif di dalam lingkungan analisis, mencuri token akun layanan metadata cloud, dan menyelidiki bidang kontrol Kubernetes serta bucket penyimpanan cloud.

Indikator kompromi (IOC) utama yang digunakan bersama di semua generasi payload adalah titik akhir pengumpulan data. aaronstack[.]com/jules-collect.

Tingkat keparahan: kritis.

Serangan: Bagaimana Cara Kerjanya

Setiap paket JulesJacker mengikuti templat yang sama. Templat tersebut... package.json Menawarkan sebuah helper TypeScript yang tidak berbahaya dengan lisensi MIT dan tanpa tautan ke repositori sumber. index.js mengekspor sejumlah fungsi nyata yang berfungsi — regex email, peta enum, tabel aturan lint — sehingga pengembang yang benar-benar mengimpor paket tersebut melihat perilaku yang masuk akal. Kejahatannya terletak di tempat lain: di dalam sebuah pascainstal kait, atau di blok di bagian bawah index.js yang dieksekusi saat modul tersebut dibutuhkan.

Muatan data telah berevolusi melalui tahapan internal yang diberi nomor dengan jelas (operator memberi label pada peristiwa telemetri mereka sendiri). sc1-, sc3-, sc4-(dan seterusnya), dan mengamati evolusi tersebut adalah cara paling jelas untuk memahami kampanye ini.

 Generasi 1–2: pengintaian dan pencurian git-config

Paket-paket paling awal adalah infostealer yang sederhana. Saat diinstal, paket-paket tersebut mengumpulkan variabel lingkungan, file hosts CLI GitHub, dan konfigurasi git global (git config –global –list, git jarak jauh -v), lalu mengirimkan bundel tersebut ke titik akhir koleksi. Ini menetapkan ciri khas operator: cerita sampul "utilitas validasi formulir TypeScript", suar keluar ke satu domain, dan preferensi untuk kredensial pengembang daripada data konsumen.

Generasi 3: probe pelarian hypervisor dan kernel

Salah satu versi di tengah kampanye beralih sepenuhnya ke serangan infrastruktur. Alih-alih mencuri konfigurasi, ia menjalankan perangkat pengintaian yang menyelidiki AF_VSOCK soket, wilayah MMIO virtio, / dev / mem, dan flag pengerasan kernel, dan bahkan upaya crash kernel yang dipicu sysrq — perilaku yang terkait dengan upaya untuk keluar dari mesin virtual atau kontainer. Tag telemetri (s0-vmm-recon, s1-vmm-vsock-fuzz, s2-vmm-mmio, s3-kernel-probe) membuat maksudnya menjadi eksplisit. Varian ini jelas ditujukan pada lingkungan cloud-sandbox dan serverless-runner — semacam VM sementara yang membangun dan menguji kode yang tidak tepercaya.

Generasi 3 (SC3): worm tulis lintas repositori

Pusat gravitasi kampanye ini menjadi pencuri repositori yang dapat menyebar sendiri. Saat diinstal, muatan berbahaya menjalankan urutan waktu lima tahap:

  • Tahap 0 (~100 ms): Mengidentifikasi host — nama host, informasi pengguna, identitas git.
  • Tahap 1 (~3 detik): tentukan organisasi mana yang menjadi anggota korban dengan melakukan inspeksi git jarak jauh -vlalu cari yang dikodekan secara permanen KONFIGURASI ORGANISASI akses tabel dan repositori pengujian dengan git ls-remote — dialihkan melalui proksi SSRF yang dikendalikan penyerang di http://git@192.168.0.1:8080.
  • Tahap 2 (~10 detik): kloning git Setiap repositori yang dapat dijangkau dalam daftar target, ekstrak ke dalam tarball dan gzip pohonnya, encode dengan base64, dan ekstrak per bagian.
  • Tahap 3 (~45 detik): “bukti akses” — klon repositori yang dapat ditulis, seret file bernama SECURITY-POC.md, dan commit dengan penulis yang diatur ke google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> dan pesan tugas: perbarui cache dependensi, lalu dorong ke cabang utama korban.

Daftar target yang dikodekan secara permanen bukanlah daftar generik. Daftar tersebut mencakup lebih dari tiga puluh target. Shopify repositori berdasarkan nama — Shopify/Shopify, Shopify/identitas, Shopify/penagihan, Shopify/vault, Shopify/rahasia, Shopify/infrastruktur, Shopify/.github, dan masih banyak lagi — bersama dengan organisasi pengujian, AaronStackBarnes, yang tampaknya dikendalikan oleh operator dan digunakan sebagai target penulisan.

Generasi 4 (SC4): terenkripsi dan terkunci

Varian terbaru yang ditujukan untuk pengembang menambahkan dua lapisan penghindaran di atas worm SC3.

Pertama, muatan data tidak lagi dikirim dalam bentuk teks biasa. Logika sebenarnya tersimpan dalam blob yang dienkripsi menggunakan AES-256-CBC. lib/.perf.dat, dengan IV di enam belas byte pertamanya. Loader di index.js merekonstruksi kunci dekripsi dari fragmen string yang digabungkan, mendekripsi blob, dan menjalankannya dengan Fungsi baru()Bahkan nama modul pun dipisah untuk menghindari pemindai statis — memerlukan('crypt' + 'o'), memerlukan ('f' + 's').

Kedua, ini bergantung pada host. Satu varian hanya mendekripsi dan berjalan ketika host tersebut aktif. os.hostname() sama dengan kotak pengembang or ubuntu-fc-uvm (default microVM Firecracker) atau berisi substring kotak pengembang. Gerbang lain pada keberadaan sebuah .jules/ direktori kerja:

Dengan kata lain, muatan SC4 dirancang untuk tetap tidak aktif pada laptop pengembang biasa dan hanya aktif di dalam agen AI otomatis. lingkungan kotak pasir Operator tersebut sebenarnya ingin berkompromi.

Mengaktifkan Laboratorium: Varian Infrastruktur Analisis

Kemasan paling inovatif dalam kampanye ini, ts-enum-helper, sama sekali tidak menyerang pengembang atau Shopify. postinstall.sh dimulai dengan sebuah gerbang yang membongkar rahasianya:

Skrip ini tidak melakukan apa pun kecuali jika variabel lingkungan khusus untuk platform analisis malware diatur. Ketika variabel tersebut diatur, muatan berbahaya (payload) mengetahui bahwa ia berjalan di dalam sandbox yang ada untuk mendeteksi dan mempelajari paket-paket seperti ini — dan ia melakukan serangan balik.

Pertama-tama, ia mengambil token OAuth akun layanan GCP dari server metadata instance dan mengeksfiltrasinya. Kemudian, menggunakan token tersebut, ia melakukan pemindaian terhadap... Bidang kontrol Kubernetes dapat dijangkau di kubernetes.default.svc:

  • mencantumkan ClusterRoleBindings, ClusterRoles, dan Nodes;
  • memeriksa pod, rahasia, dan configmap di seluruh sistem kube, kegagalan, kube-publik, sewa node kube, dan ruang nama analisis;
  • Masalah yang ditimbulkan oleh panggilan SelfSubjectAccessReview adalah untuk memetakan secara tepat apa yang diizinkan dilakukan oleh identitas yang dicuri.

Terakhir, ia melakukan pencarian secara paksa untuk nama-nama bucket Google Cloud Storage yang dibangun dari ID proyek GCP yang telah ditentukan sebelumnya (penandatangan langka-437603-hal.9) dan nomor proyek, menebak kombinasi seperti *-bangunan, *-artefak, dan beberapa mallisis- awalan (hasil malanalisis, paket-paket-malisis, pemindaian malolisisSetiap kode respons dan isi respons dicatat dan dikirim kembali ke alamat yang sama. koleksi jules titik akhir.

Ini adalah kasus langka dari muatan rantai pasokan yang dibangun khusus untuk menyerang infrastruktur pihak bertahan sendiri. Narasi yang digunakan di seluruh kampanye — yang sebagian muncul di dalam muatan sebagai komentar yang menggambarkan perilaku tersebut sebagai "PoC Riset Keamanan … penulisan lintas repositori melalui token proksi git yang cakupannya terlalu luas" — adalah pembenaran diri yang sama, baik target runtime-nya adalah monorepo Shopify atau server metadata klaster analisis.

Garis Waktu & Lingkup Migrasi

JulesJacker bukanlah serangan sekali tembak. Ini adalah operasi berkelanjutan yang berhasil bertahan dari penghapusan registrasi hanya dengan mengubah namanya.

Ketika Acara
Pertengahan April 2026 Paket pertama muncul di bawah cakupan penerbit asli: TS-utility façade, environment, dan git-config exfiltration.
Awal Mei 2026 Varian pengintaian hypervisor dan kernel-escape telah diterbitkan.
Pertengahan hingga akhir Mei 2026 Worm tulis lintas repositori SC3 muncul bersamaan dengan muatan yang ditargetkan pada Shopify dan google-labs-jules[bot] Peniruan identitas. SC4 memperkenalkan loader terenkripsi AES dan yang dikendalikan oleh host.
Akhir Mei 2026 npm menghapus cakupan penerbit asli; nama paket diubah menjadi placeholder kosong untuk keperluan keamanan.
Minggu yang sama Operator tersebut bermigrasi ke lingkungan yang hampir identik dan menerbitkan ulang worm tersebut, termasuk varian infrastruktur analisisnya.

Migrasi adalah bagian yang harus diperhatikan oleh para pemain bertahan. Penangkapan target pertama tidak mengakhiri kampanye atau bahkan memperlambatnya. Operator tersebut telah membuat target paralel yang namanya berbeda dari yang asli hanya dengan satu karakter, dan terus menerbitkannya dalam minggu yang sama. Hingga tulisan ini dibuat, target baru tersebut... ts-form-utils (versi 1.0.0 hingga 1.1.0), ts-project-lint (1.0.0 dan 1.1.0), dan versi mandiri ts-enum-helper (1.0.0) tetap dapat diinstal.

Indikator Kompromi

Semua indikator di bawah ini telah dikonfirmasi dengan sumber paket.

Tipe Indikator Catatan
Jaringan (C2) aaronstack[.]com/jules-collect Satu titik akhir pengumpulan data di setiap generasi; menerima telemetri JSON dan potongan tarball repositori base64-gzip.
Jaringan (proxy SSRF) http://git@192.168.0.1:8080 Antarmuka untuk token proksi Git yang cakupannya terlalu luas, digunakan untuk mengakses repositori organisasi target.
Jaringan (awan) metadata.google.internal/computeMetadata/v1
kubernetes.default.svc
storage.googleapis.com/storage/v1/b
Hanya digunakan oleh varian infrastruktur analisis untuk pencurian token dan pengintaian control-plane Kubernetes.
identitas google-labs-jules[bot]
161369871+google-labs-jules[bot]@users.noreply.github.com
Tertempa commit Identitas penulis disebarluaskan ke cabang utama korban.
File lib/.perf.dat Blob payload terenkripsi AES-256-CBC; IV disimpan dalam 16 byte pertama dan kunci direkonstruksi secara dinamis di index.js.
File SECURITY-POC.md Dijatuhkan dan commitdikembalikan ke repositori korban dengan pesan chore: update dependency cache.
File scripts/postinstall.sh Dipagari di $MALYSIS_ANALYSIS_ID; mengidentifikasi varian penargetan infrastruktur analisis.
Perilaku os.hostname() memeriksa devbox / ubuntu-fc-uvm Pembatasan lingkungan sandbox dan agen AI sebelum dekripsi dan eksekusi muatan.
Perilaku .jules/ ke /app/.jules direktori membaca Penargetan eksplisit terhadap lingkungan ruang kerja agen AI.
Perilaku sc1-, sc3-, sc4-, s0-vmm-recon Label tahap telemetri yang ditentukan operator berguna untuk deteksi dan pencarian.
Target awan rare-signer-437603-p9
malysis-* tebakan ember
Pengidentifikasi proyek GCP yang dikodekan secara permanen dan pola enumerasi bucket penyimpanan tertanam dalam varian infrastruktur analisis.
Bentuk kemasan Fasad paket utilitas TS tanpa bidang repositori Templat kampanye yang konsisten: paket utilitas TypeScript palsu dengan muatan berbahaya yang tertanam di dalamnya. postinstall hooks atau ditambahkan ke index.js.
perangkat lunak analisis komposisi sca
Prioritaskan, perbaiki, dan amankan risiko perangkat lunak Anda.
Dapatkan Akun Gratis Anda.
Tidak perlu kartu kredit.

Amankan Pengembangan dan Pengiriman Perangkat Lunak Anda

dengan Rangkaian Produk Xygeni