JulesJacker: Falošný npm červ sa vydáva za Julesovu umelú inteligenciu

JulesJacker: Falošný červ npm s PoC, ktorý sa vydáva za agenta Jules od Googlu – a zapína sandbox, ktorý ho analyzuje

TL; DR

Jeden operátor npm strávil šesť týždňov publikovaním falošných „úžitkových“ balíkov TypeScript, ako napríklad ts-form-utils, ts-project-linta ts-enum-helper.

Zatiaľ čo balíky sprístupňujú malé, legitímne vyzerajúce pomocné programy na overovanie, skutočné užitočné zaťaženie sa spustí pri inštalácii alebo pri prvom vyžiadaní a vykoná odtlačky hostiteľa, objavenie organizácie GitHub, klonovanie repozitárov a exfiltráciu zdrojového kódu.

Malvér sa zameriava najmä na hodnotné organizácie GitHub vrátane viacerých Shopify repozitáre, potom archivuje a exfiltruje dostupné zdrojové stromy do centralizovaného koncového bodu kolekcie.

Ako súčasť pracovného postupu kompromisu, užitočné zaťaženie commitvracať súbor sa späť do repozitárov obetí a zároveň sa vydávať za autonómnu kódovaciu identitu spoločnosti Google google-labs-jules[bot].

Sledovali sme kampaň s názvom JulesJacker — naprieč viacerými rozsahmi vydavateľov a najmenej piatimi generáciami užitočného zaťaženia vrátane šifrovaných variantov a variantov s podporou sandboxu.

Najnovší variant sa špecificky zameriava na infraštruktúru analýzy škodlivého softvéru: aktivuje sa iba v analytických prostrediach, kradne tokeny služieb cloudových metadát a skúma riadiace roviny Kubernetes a cloudové úložiská.

Primárny IOC zdieľaný medzi všetkými generáciami užitočného zaťaženia je koncový bod kolekcie. aaronstack[.]com/jules-collect.

Závažnosť: kritická.

Útok: Ako to funguje

Každý balík JulesJacker sa riadi rovnakou šablónou. package.json propaguje neškodný pomocník TypeScript s licenciou MIT a bez prepojeného repozitára zdrojového kódu. index.js exportuje niekoľko skutočných, funkčných funkcií – regulárne výrazy pre e-maily, mapy výčtov, tabuľky pravidiel pre lint – aby vývojár, ktorý balík skutočne importuje, videl vierohodné správanie. Zlomyseľnosť sa skrýva niekde inde: v po inštalácii háčik alebo v bloku v spodnej časti index.js ktorý sa vykoná v momente, keď je modul potrebný.

Užitočné zaťaženie prešlo jasne očíslovanými internými fázami (operátor si označuje vlastné telemetrické udalosti sc1-, sc3-, sc4-, a tak ďalej), a sledovanie tohto vývoja je najjasnejší spôsob, ako pochopiť kampaň.

 Generácia 1–2: prieskum a krádež konfigurácie git

Najstaršie balíčky boli priamočiare informačno-kradnúce balíčky. Pri inštalácii zhromažďovali premenné prostredia, súbor hosts z rozhrania CLI GitHub a globálnu konfiguráciu gitu (git config –globálny –zoznam, git remote -v), potom odoslal balík do koncového bodu kolekcie. Tým sa vytvoril podpis operátora: titulný príbeh „nástroje na overovanie formulárov TypeScript“, odchádzajúci signál do jednej domény a záľuba v povereniach vývojárov namiesto údajov o spotrebiteľoch.

Generácia 3: hypervízor a únikové sondy jadra

Jedna verzia v polovici kampane sa tvrdo zamerala na útoky na infraštruktúru. Namiesto krádeže konfigurácie spustila prieskumné sondovanie postrojov. AF_VSOCK sokety, regióny Virtio MMIO, / dev / mem, a príznaky sprísňovania jadra a dokonca aj pokusy o zlyhanie jadra vyvolané funkciou sysrq – správanie spojené s pokusmi o opustenie virtuálneho počítača alebo kontajnera. Značky telemetrie (s0-vmm-recon, s1-vmm-vsock-fuzz, s2-vmm-mmio, s3-jadro-sonda) explicitne uviedol zámer. Tento variant bol jednoznačne zameraný na cloudové sandboxové a serverless-runnerové prostredia — druh prchavého virtuálneho počítača, ktorý vytvára a testuje nedôveryhodný kód.

Generácia 3 (SC3): červ na zápis medzi úložiskami

Ťažisko kampane sa stalo samovoľne sa šíriacim zlodejom repozitárov. Po inštalácii sa užitočné zaťaženie spustí v päťstupňovej časovo ohraničenej sekvencii:

  • Stage 0 (~100 ms): odtlačok prsta hostiteľa — názov hostiteľa, informácie o používateľovi, identita git.
  • Stage 1 (~3 s): určiť, do ktorej organizácie patrí obeť, na základe kontroly git remote -v, potom vyhľadajte pevne zakódovaný ORG_CONFIG prístup k tabuľke a testovaciemu repozitáru s git ls-vzdialený — smerované cez útočníkom ovládaný SSRF proxy server na adrese http://git@192.168.0.1:8080.
  • Stage 2 (~10 s): git klon každý dosiahnuteľný repozitár v cieľovom zozname, tarball a gzip strom, kódovanie v base64 a extrahovanie chunk.
  • Stage 3 (~45 s): „dôkaz o prístupe“ – naklonovať zapisovateľný repozitár, odstrániť súbor s názvom SECURITY-POC.md a commit s autorom nastaveným na google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> a úlohou správy: aktualizovať vyrovnávaciu pamäť závislostí a potom odoslať do hlavnej vetvy obete.

Zoznam cieľov v pevnom kóde nie je všeobecný. ​​Obsahuje viac ako tridsať Shopify úložiská podľa názvu — Shopify/shopify, Shopify/identita, Shopify/fakturácia, Shopify/trezor, Shopify/tajomstvá, Shopify/infraštruktúra, Shopify/.githuba mnoho ďalších – spolu s testovacou organizáciou, AaronStackBarnes, ktorý operátor zrejme ovláda a používa ako cieľ zápisu.

Generácia 4 (SC4): šifrovaná a zabezpečená

Najnovší variant pre vývojárov pridáva k červu SC3 dve vrstvy úniku.

Po prvé, užitočné zaťaženie sa už neposiela ako obyčajný text. Skutočná logika sa nachádza v blobe šifrovanom pomocou AES-256-CBC, lib/.perf.dat, s IV v prvých šestnástich bajtoch. Zavádzač v index.js rekonštruuje dešifrovací kľúč zo zreťazených fragmentov reťazcov, dešifruje blob a spustí ho s nová funkcia()Dokonca aj názvy modulov sú rozdelené, aby sa predišlo statickým skenerom — vyžadovať('krypta' + 'o'), vyžadovať('f' + 's').

Po druhé, je zabezpečený obmedzene. Jeden variant dešifruje a spúšťa sa iba vtedy, keď os.názovhostiteľa() rovná vývojársky box or ubuntu-fc-uvm (predvolené nastavenie Firecracker microVM) alebo obsahuje podreťazec vývojársky boxĎalšia brána za prítomnosti .jules/ pracovný adresár:

Inými slovami, užitočné zaťaženie SC4 je navrhnuté tak, aby zostalo neaktívne na bežnom notebooku vývojára a prebudilo sa iba v rámci automatizovaného agenta umelej inteligencie. prostrediach sandboxov Prevádzkovateľ v skutočnosti chce dosiahnuť kompromis.

Zapnutie laboratória: variant analytickej infraštruktúry

Najnovejší balíček v kampani, pomocník pre výpočet ts, vôbec neútočí na vývojárov ani na Shopify. Jeho postinstall.sh otvára sa bránou, ktorá prezrádza hru:

Skript nerobí nič, pokiaľ nie je nastavená premenná prostredia špecifická pre platformu na analýzu škodlivého softvéru. Keď je nastavená, užitočné zaťaženie vie, že beží v sandboxe, ktorý existuje na detonáciu a štúdium balíkov presne ako tento – a vykoná protiútok.

Najprv stiahne token OAuth servisného účtu GCP zo servera metadát inštancie a extrahuje ho. Potom pomocou tohto tokenu vyhľadá Riadiaca rovina Kubernetes dosiahnuteľný na kubernetes.default.svc:

  • vypíše viazania klastrov, klastrové roly a uzly;
  • skúma pody, tajné zložky a konfiguračné mapy naprieč kube-systém, štandardné, kube-public, prenájom uzla kubea menný priestor analýzy;
  • vydáva volania funkcie SelfSubjectAccessReview na presné mapovanie toho, čo je ukradnutá identita oprávnená robiť.

Nakoniec hrubou silou vynúti názvy kontajnerov služby Google Cloud Storage vytvorené z pevne zakódovaného ID projektu GCP (vzácny-signer-437603-p9) a číslo projektu, hádanie kombinácií ako napríklad *-zostavuje, *-artefakty, a niekoľko malátnosť- predpony (výsledky-malýzy, balíčky-malysis, skeny malysisKaždý kód odpovede a telo sa zaznamená a odošle späť na to isté jules-collect koncový bod.

Toto je zriedkavý prípad užitočného zaťaženia dodávateľského reťazca vytvoreného špeciálne na útok na vlastnú infraštruktúru obrancov. Krycí príbeh v celej kampani – ktorého fragmenty sa objavujú vo vnútri užitočných zaťažení ako komentáre rámujúce správanie ako „PoC bezpečnostného výskumu ... zápis medzi úložiskami cez preťažený token proxy git“ – je rovnakým sebazdôvodnením, či už je cieľom runtime monorepozitár Shopify alebo server metadát analytického klastra.

Časová os a migrácia rozsahu

JulesJacker nie je jednorazový zásah. Je to trvalá operácia, ktorá prežila odstránenie z registra jednoduchou zmenou názvu.

Kedy udalosť
Polovica apríla 2026 Prvé balíky sa objavujú v pôvodnom rozsahu vydavateľa: TS-utility facade, environment a git-config exfiltration.
Začiatkom mája 2026 Publikovaný hypervízor a variant prieskumu s únikom jadra.
Polovica až koniec mája 2026 Červ SC3, ktorý sa zapisuje do rôznych repozitárov, sa objavuje popri úložných systémoch zameraných na Shopify. google-labs-jules[bot] zosobnenie. SC4 zavádza zavádzače šifrované AES a riadené hostiteľom.
Koniec mája 2026 npm odstráni pôvodný rozsah vydavateľa; názvy balíkov sa prevedú na prázdne zástupné symboly uchovávajúce zabezpečenie.
Ten istý týždeň Operátor migruje do takmer identického podobného rozsahu a znova publikuje červa vrátane variantu analytickej infraštruktúry.

Obrancovia by sa mali zmieriť s migráciou. Zrušenie prvého puškohľadu neukončilo kampaň, ani ju nespomalilo. Prevádzkovateľ už spustil paralelný puškohľad, ktorého názov sa od pôvodného líši o jeden znak, a pokračoval v publikovaní v tom istom týždni. V čase písania tohto článku bol nový puškohľad... ts-form-utils (verzie 1.0.0 až 1.1.0), jeho ts-project-lint (1.0.0 a 1.1.0) a samostatný pomocník pre výpočet ts (1.0.0) zostávajú inštalovateľné.

Indikátory kompromisu

Všetky nižšie uvedené indikátory boli potvrdené oproti zdroju balíka.

Typ Indikátor Poznámky
Sieť (C2) aaronstack[.]com/jules-collect Jeden koncový bod kolekcie naprieč každou generáciou; prijíma telemetriu JSON a tarballové súbory z repozitára base64-gzip.
Sieť (proxy SSRF) http://git@192.168.0.1:8080 Predná strana pre preťažený token proxy servera git, ktorý sa používa na dosiahnutie repozitárov cieľovej organizácie.
Sieť (cloud) metadata.google.internal/computeMetadata/v1
kubernetes.default.svc
storage.googleapis.com/storage/v1/b
Používa sa iba variantom analytickej infraštruktúry na krádež tokenov a prieskum riadiacej roviny Kubernetes.
Identita google-labs-jules[bot]
161369871+google-labs-jules[bot]@users.noreply.github.com
Kovaný commit identita autora vložená do hlavných vetiev obete.
rezeň lib/.perf.dat Blob užitočného zaťaženia šifrovaný pomocou AES-256-CBC; IV uložený v prvých 16 bajtoch a kľúč rekonštruovaný dynamicky v index.js.
rezeň SECURITY-POC.md Padol a commitvrátené späť do úložísk obetí so správou chore: update dependency cache.
rezeň scripts/postinstall.sh Uzavreté $MALYSIS_ANALYSIS_IDidentifikuje variant zameraný na analytickú infraštruktúru.
behaviorálna os.hostname() kontroly pre devbox / ubuntu-fc-uvm Ochrana prostredia sandbox a AI-agent pred dešifrovaním a spustením užitočného zaťaženia.
behaviorálna .jules/ a /app/.jules čítanie adresára Explicitné zacielenie pracovných prostredí agentov umelej inteligencie.
behaviorálna sc1-, sc3-, sc4-, s0-vmm-recon Operátorom definované označenia telemetrických etáp užitočné na detekciu a lov.
Cieľ v cloude rare-signer-437603-p9
malysis-* hádanie z vedier
Pevne zakódované identifikátory projektov GCP a vzory enumerácie úložných priestorov vložené do variantu analytickej infraštruktúry.
Tvar balenia Fasáda balíka TS-utility bez poľa repozitára Konzistentná šablóna kampane: falošné balíky nástrojov TypeScript so škodlivými dátami vloženými do nich postinstall hooks alebo pripojené k index.js.
nástroje na analýzu zloženia softvéru SCA
Stanovte si priority, odstraňujte a zabezpečte svoje softvérové ​​riziká
Získajte svoj bezplatný účet.
Nie je potrebná kreditná karta.

Zabezpečte si vývoj a dodávku softvéru

s produktovým balíkom Xygeni