TL; DR
En sam operater npm je šest tednov objavljal lažne pakete »uporabnih programov« TypeScript, kot je ts-form-utils, ts-project-lintin ts-enum-helper.
Medtem ko paketi razkrivajo majhne, na videz legitimne pomočnike za preverjanje, se dejanski koristni tovor izvede ob namestitvi ali prvi zahtevi in izvede prstni odtis gostitelja, odkrivanje organizacije GitHub, kloniranje repozitorija in izvlečenje izvorne kode.
Zlonamerna programska oprema cilja posebej na visoko vredne organizacije GitHub, vključno z več Shopify repozitorijev, nato arhivira in izvleče dosegljiva izvorna drevesa v centralizirano končno točko zbirke.
Kot del delovnega procesa kompromisa je koristni tovor commitsa datoteko nazaj v repozitorije žrtev, medtem ko se izdaja za Googlovo avtonomno kodno identiteto google-labs-jules[bot].
Spremljali smo kampanjo – poimenovano JulesJacker — v več obsegih založnikov in vsaj petih generacijah koristnega tovora, vključno s šifriranimi in različicami, ki upoštevajo peskovnik.
Najnovejša različica je posebej usmerjena v infrastrukturo za analizo zlonamerne programske opreme: aktivira se samo znotraj analitičnih okolij, krade žetone računov storitev metapodatkov v oblaku ter preiskuje nadzorne ravnine Kubernetes in vedra za shranjevanje v oblaku.
Primarni IOC, ki si ga delijo vse generacije koristnih podatkov, je končna točka zbiranja. aaronstack[.]com/jules-collect.
Resnost: kritična.
Napad: Kako deluje
Vsak paket JulesJacker sledi isti predlogi. paket.json oglašuje neškodljiv pomočnik TypeScript z licenco MIT in brez povezanega repozitorija izvorne kode. index.js izvozi peščico resničnih, delujočih funkcij – e-poštne regularne izraze, zemljevide naštevanja, tabele pravil lint – tako da razvijalec, ki dejansko uvozi paket, vidi verjetno vedenje. Zlonamernost se skriva drugje: v po namestitvi kavelj ali v bloku na dnu index.js ki se izvede v trenutku, ko je modul potreben.
Koristni tovor se je razvil skozi jasno oštevilčene interne faze (operater sam označuje svoje telemetrične dogodke sc1-, sc3-, sc4-, in tako naprej), in opazovanje tega razvoja je najjasnejši način za razumevanje kampanje.
Generacija 1–2: izvidnica in kraja konfiguracije gita
Najzgodnejši paketi so bili preprosti programi za pridobivanje informacij. Ob namestitvi so pridobili okoljske spremenljivke, datoteko hosts iz ukazne vrstice GitHub in globalno konfiguracijo gita (git config –global –list, git daljinski -v), nato pa je sveženj poslal na končno točko zbirke. To je vzpostavilo podpis operaterja: naslovnica »pripomočki za preverjanje veljavnosti obrazcev TypeScript«, odhodni svetilnik na eno samo domeno in nagnjenost k poverilnicam razvijalca namesto k podatkom o potrošnikih.
3. generacija: hipervizor in sonde za pobeg jedra
Ena od različic sredi kampanje se je močno usmerila v napade na infrastrukturo. Namesto kraje konfiguracije je izvedla izvidniško sondiranje snopov. AF_VSOCK vtičnice, regije Virtio MMIO, / dev / mem, in zastavice za utrjevanje jedra ter celo poskusi zrušitev jedra, ki jih sproži sysrq – vedenje, povezano s poskusi izstopa iz virtualnega stroja ali vsebnika. Oznake telemetrije (s0-vmm-recon, s1-vmm-vsock-fuzz, s2-vmm-mmio, s3-kernel-probe) je namen jasno opredelil. Ta različica je bila očitno namenjena okolja v oblaku sandbox in brezstrežniška okolja — vrsta kratkotrajnega virtualnega stroja, ki gradi in testira nezaupanja vredno kodo.
Generacija 3 (SC3): črv za pisanje med repozitoriji
Težišče kampanje je postalo samorazširjajoči se tat repozitorij. Ob namestitvi koristni tovor izvaja petstopenjsko časovno zaporedje:
- Stage 0 (~100 ms): prstni odtis gostitelja — ime gostitelja, podatki o uporabniku, identiteta gita.
- Stage 1 (~3 s): z vpogledom ugotovite, kateri organizaciji pripada žrtev git daljinski -v, nato pa poiščite trdo kodiran ORG_KONFIGURACIJE dostop do tabele in testnega repozitorija z git ls-oddaljeno — usmerjen prek napadalčevega SSRF proxyja na http://git@192.168.0.1:8080.
- Stage 2 (~10 s): git klon vsa dosegljiva skladišča na ciljnem seznamu, drevo shrani v tarball in gzip, ga kodiraj v base64 in iz njega izvleči dele.
- Stage 3 (~45 s): »dokazilo o dostopu« – klonirajte zapisljivo skladišče, spustite datoteko z imenom SECURITY-POC.md in commit z avtorjem, nastavljenim na google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>, in opravilom sporočila: posodobi predpomnilnik odvisnosti, nato pa potisni na glavno vejo žrtve.
Trdno kodiran seznam ciljev ni generičen. Našteva več kot trideset Shopify repozitoriji po imenu — Shopify/shopify, Shopify/identiteta, Shopify/obračunavanje, Shopify/trezor, Shopify/skrivnosti, Shopify/infrastruktura, Shopify/.githubin še veliko več – poleg testne organizacije, AaronStackBarnes, ki ga operater očitno nadzoruje in uporablja kot cilj pisanja.
Generacija 4 (SC4): šifrirana in zaščitena
Najnovejša različica, namenjena razvijalcem, poleg črva SC3 doda še dve plasti izogibanja.
Prvič, koristni tovor se ne pošilja več kot golo besedilo. Prava logika se nahaja v blobu, šifriranem z AES-256-CBC, lib/.perf.dat, z IV v prvih šestnajstih bajtih. Nalagalnik v index.js rekonstruira ključ za dešifriranje iz združenih fragmentov nizov, dešifrira blob in ga zažene z nova funkcija()Celo imena modulov so razdeljena, da se izognemo statičnim pregledovalnikom – zahteva('kripta' + 'o'), zahteva('f' + 's').
Drugič, odvisno je od gostitelja. Ena različica dešifrira in se izvaja le, ko os.imegostitelja() enako razvijalski okvir or ubuntu-fc-uvm (privzeto za Firecracker microVM) ali vsebuje podniz razvijalski okvirŠe ena vrata o prisotnosti .jules/ delovni imenik:
Z drugimi besedami, koristni tovor SC4 je zasnovan tako, da miruje na običajnem prenosniku razvijalca in se prebudi šele znotraj avtomatiziranega agenta umetne inteligence. okolja peskovnika operater dejansko želi kompromis.
Vklop laboratorija: varianta analitične infrastrukture
Najbolj inovativen paket v kampanji, pomočnik za naštevanje ts, sploh ne napada razvijalcev ali Shopifyja. Njegov postinstall.sh odpre se z vrati, ki razkrijejo igro:
Skript ne naredi ničesar, razen če je nastavljena okoljska spremenljivka, specifična za platformo za analizo zlonamerne programske opreme. Ko je nastavljena, koristni tovor ve, da se izvaja znotraj peskovnika, ki obstaja za detonacijo in preučevanje paketov, natanko takih kot ta – in izvede protinapad.
Najprej potegne žeton OAuth storitvenega računa GCP iz strežnika metapodatkov instance in ga izvleče. Nato s tem žetonom pregleda Nadzorna ravnina Kubernetes dosegljiv na kubernetes.default.svc:
- navaja VezaveVlogGruče, VlogeGruče in Vozlišča;
- preiskuje pode, skrivnosti in konfiguracijske mape kube-sistem, privzeto, kube-public, zakup vozlišča kubein imenski prostor analize;
- izda klice SelfSubjectAccessReview, da natančno preslika, kaj lahko ukradena identiteta počne.
Končno s surovo silo preveri imena veder storitve Google Cloud Storage, zgrajena iz trdo kodiranega ID-ja projekta GCP (redki-podpisnik-437603-p9) in številko projekta, ugibanje kombinacij, kot so *-gradi, *-artefaktov, in več malysis- predpone (rezultati-malizacije, paketi-malysis, malysis-skensVsaka koda in telo odgovora se zabeležita in POST-neta nazaj na isto jules-collect končna točka.
To je redek primer koristnega tovora dobavne verige, zgrajenega posebej za napad na lastno infrastrukturo branilcev. Naslovna zgodba v celotni kampanji – katere delci se pojavljajo znotraj koristnih tovorov kot komentarji, ki uokvirjajo vedenje kot »PoC varnostnih raziskav ... pisanje v navzkrižno skladišče prek preobremenjenega žetona proxy git« – je ista samoutemeljitev, ne glede na to, ali je cilj izvajalnega okolja monorepozitorij Shopify ali strežnik metapodatkov analitičnega grozda.
Časovnica in migracija obsega
JulesJacker ni enkratna napaka. Gre za trajno operacijo, ki je preživela odstranitev iz registra zgolj s spremembo imena.
| Kdaj | Event |
|---|---|
| Sredi aprila 2026 | Prvi paketi se pojavijo pod prvotnim obsegom založnika: TS-utility facade, environment in git-config exfiltration. |
| Začetek maja 2026 | Objavljena je bila hipervizor in različica za izvidovanje, ki preprečuje pobeg jedra. |
| Sredina do konec maja 2026 | Črv SC3 za pisanje v različnih repozitorijih se pojavlja poleg koristnih tovorov, ki jih cilja Shopify, in google-labs-jules[bot] Poosebljanje. SC4 uvaja nalagalnike, šifrirane z AES in omejene na gostitelja. |
| Konec maja 2026 | npm odstrani izvirni obseg založnika; imena paketov se razrešijo v prazne nadomestne označbe za varnost. |
| Isti teden | Operater se preseli na skoraj identično področje delovanja in ponovno objavi črva, vključno z različico za analitično infrastrukturo. |
Branilci bi se morali strinjati z migracijo. Odstranitev prvega daljnogleda ni končala kampanje niti je ni upočasnila. Operater je že postavil vzporedni daljnogled, katerega ime se od originalnega razlikuje za en sam znak, in nadaljeval z objavljanjem v istem tednu. V času pisanja tega besedila je novi daljnogled ts-form-utils (različice od 1.0.0 do 1.1.0), njegove ts-project-lint (1.0.0 in 1.1.0) ter samostojni pomočnik za naštevanje ts (1.0.0) ostanejo namestitvene.
Kazalci kompromisa
Vsi spodnji kazalniki so bili potrjeni glede na vir paketa.
| tip | Kazalec | Opombe |
|---|---|---|
| Omrežje (C2) | aaronstack[.]com/jules-collect | Ena končna točka zbirke v vsaki generaciji; prejema telemetrijo JSON in dele tarballa iz repozitorija base64-gzip. |
| Omrežje (proxy SSRF) | http://git@192.168.0.1:8080 | Sprednja stran za žeton git proxy s prevelikim obsegom, ki se uporablja za doseganje repozitorijev ciljne organizacije. |
| Omrežje (oblak) | metadata.google.internal/computeMetadata/v1kubernetes.default.svcstorage.googleapis.com/storage/v1/b | Uporablja ga samo različica analitične infrastrukture za krajo žetonov in izvidovanje nadzorne ravnine Kubernetes. |
| identiteta | google-labs-jules[bot]161369871+google-labs-jules[bot]@users.noreply.github.com | Kovane commit identiteta avtorja potisnjena v glavne veje žrtve. |
| file | lib/.perf.dat | AES-256-CBC šifriran blob koristnega tovora; IV shranjen v prvih 16 bajtih in ključ dinamično rekonstruiran v index.js. |
| file | SECURITY-POC.md | Padlo in commitnazaj v repozitorije žrtev s sporočilom chore: update dependency cache. |
| file | scripts/postinstall.sh | Zaprto $MALYSIS_ANALYSIS_ID; identificira varianto ciljanja na infrastrukturo analize. |
| Vedenjsko | os.hostname() čeki za devbox / ubuntu-fc-uvm | Omejevanje okolja peskovnika in agenta umetne inteligence pred dešifriranjem in izvajanjem koristnega tovora. |
| Vedenjsko | .jules/ in /app/.jules branje imenika | Eksplicitno ciljanje delovnih okolij agentov umetne inteligence. |
| Vedenjsko | sc1-, sc3-, sc4-, s0-vmm-recon | Operatersko določene oznake telemetričnih stopenj, uporabne za zaznavanje in iskanje. |
| Cilj v oblaku | rare-signer-437603-p9malysis-* ugibanja iz vedra | Trdo kodirani identifikatorji projektov GCP in vzorci naštevanja shranjevalnih veder, vdelani v varianto infrastrukture za analizo. |
| Oblika paketa | Fasada paketa TS-utility brez polja repozitorija | Dosledna predloga kampanje: lažni paketi pripomočkov TypeScript z vdelanimi zlonamernimi koristnimi vsebinami postinstall hooks ali dodano k index.js. |




