JulesJacker: Viltus npm tārps uzdodas par Džūlsu mākslīgo intelektu

JulesJacker: Viltus PoC npm tārps, kas uzdodas par Google Jules aģentu un ieslēdz smilškastes tehnoloģiju, lai to analizētu.

TL; DR

Viens npm operators sešas nedēļas publicēja viltotus TypeScript “utilītu” pakotnes, piemēram, ts-form-utils, ts-project-lint, un ts-enum-helper.

Lai gan pakotnes piedāvā mazus, šķietami likumīgus validācijas palīgus, faktiskā vērtuma slodze tiek izpildīta instalēšanas vai pirmās pieprasīšanas brīdī un veic resursdatora pirkstu nospiedumu veidošanu, GitHub organizācijas noteikšanu, repozitorija klonēšanu un pirmkoda eksfiltrāciju.

Ļaunprogrammatūra ir īpaši vērsta pret augstas vērtības GitHub organizācijām, tostarp vairākām Shopify repozitorijus, pēc tam arhivē un izfiltrē sasniedzamos avota kokus uz centralizētu kolekcijas galapunktu.

Kā daļa no kompromisa darbplūsmas, lietderīgā slodze commitsa failu atpakaļ upuru krātuvēs, vienlaikus uzdodoties par Google autonomās kodēšanas identitāti google-labs-jules[bot].

Mēs izsekojām kampaņu — nosaukto Džūls Džekers — vairākās izdevēju darbības jomās un vismaz piecās vērtuma paaudzēs, tostarp šifrētos un smilškastes tipa variantos.

Jaunākais variants ir īpaši vērsts uz ļaunprogrammatūras analīzes infrastruktūru: tas aktivizējas tikai analīzes vidēs, zog mākoņa metadatu pakalpojumu kontu žetonus un pārbauda Kubernetes vadības plaknes un mākoņkrātuves segmentus.

Primārais IOC, kas tiek koplietots visās lietderīgās slodzes paaudzēs, ir savākšanas galapunkts. aaronstack[.]com/jules-collect.

Smagums: kritisks.

Uzbrukums: kā tas darbojas

Katra JulesJacker pakotne atbilst vienai un tai pašai veidnei. pack.json reklamē labdabīgu TypeScript palīgu ar MIT licenci un bez saistītas pirmkoda krātuves. index.js eksportē dažas reālas, darbojošas funkcijas — e-pasta regulārās izteiksmes, uzskaitījumu kartes, lint noteikumu tabulas —, lai izstrādātājs, kurš faktiski importē pakotni, redzētu ticamu uzvedību. Ļaunprātība mīt citur: pēc instalēšanas āķī vai blokā apakšā index.js kas tiek izpildīts brīdī, kad modulis ir nepieciešams.

Derīgās slodzes ir attīstījušās, izmantojot skaidri numurētus iekšējos posmus (operators apzīmē savus telemetrijas notikumus sc1-, sc3-, sc4-un tā tālāk), un šīs evolūcijas vērošana ir skaidrākais veids, kā izprast kampaņu.

 1.–2. paaudze: izlūkošana un git-config zādzība

Agrākās pakotnes bija vienkāršas informācijas zagšanas pakotnes. Instalēšanas laikā tās apkopoja vides mainīgos, GitHub CLI resursfailu un globālo git konfigurāciju (git config –global –list, git remote -v), pēc tam nosūtīja paketi uz kolekcijas galapunktu. Tas izveidoja operatora parakstu: titulstāstu “TypeScript veidlapu validācijas utilītprogrammas”, izejošu signālu uz vienu domēnu un vēlmi izmantot izstrādātāju akreditācijas datus, nevis patērētāju datus.

3. paaudze: hipervizora un kodola izejas zondes

Viena kampaņas vidusposma versija aktīvi pievērsās infrastruktūras uzbrukumiem. Konfigurācijas zagšanas vietā tā veica izlūkošanas sistēmas pārbaudi. AF_VSOCK ligzdas, virtio MMIO reģioni, / dev / memun kodola sacietēšanas karodziņi, un pat mēģinājumi izraisīt sysrq izraisītas kodola avārijas — uzvedība, kas saistīta ar mēģinājumiem izlauzties no virtuālās mašīnas vai konteinera. Telemetrijas tagi (s0-vmm-recon, s1-vmm-vsock-fuzz, s2-vmm-mmio, s3-kodola-zonde) skaidri norādīja nolūku. Šis variants bija nepārprotami vērsts uz mākoņa smilškastes un bezserveru vidēs — tāda veida īslaicīga virtuālā mašīna, kas veido un testē neuzticamu kodu.

3. paaudze (SC3): krustrepo rakstīšanas tārps

Kampaņas smaguma centrs kļuva par pašvairojošu repozitorija zagli. Instalēšanas laikā lietderīgā slodze izpilda piecu posmu laika ziņā ierobežotu secību:

  • Posms 0 (~100 ms): resursdatora pirkstu nospiedums — resursdatora nosaukums, lietotāja informācija, git identitāte.
  • Posms 1 (~3 s): nosakiet, kurai organizācijai pieder upuris, veicot pārbaudi git remote -v, pēc tam meklējiet cietkodētu ORG_CONFIG piekļuve tabulai un testa repozitorijam ar git ls-remote — maršrutēts caur uzbrucēja kontrolētu SSRF starpniekserveri plkst. http://git@192.168.0.1:8080.
  • Posms 2 (~10 s): git klons katru sasniedzamo repozitoriju mērķa sarakstā, koku sakārto tarball un gzip formātā, to kodē ar base64 un veic fragmentu ekstrakciju.
  • Posms 3 (~45 s): “piekļuves pierādījums” — klonējiet rakstāmu repozitoriju, nometiet failu ar nosaukumu SECURITY-POC.md un commit to ar autora iestatījumu google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> un ziņojumu chore: update dependency cache, then push to upura mainline branch.

Cietkodā ierakstītais mērķu saraksts nav vispārīgs. Tajā ir uzskaitīti vairāk nekā trīsdesmit. Shopify repozitoriji pēc nosaukuma — Shopify/shopify, Shopify/identitāte, Shopify/rēķinu apstrāde, Shopify/vault, Shopify/noslēpumi, Shopify/infrastruktūra, Shopify/.githubun daudzi citi — līdzās testēšanas organizācijai, ĀronsStekbārnss, ko operators, šķiet, kontrolē un izmanto kā rakstīšanas mērķi.

4. paaudze (SC4): šifrēta un aizsargāta

Jaunākais izstrādātājiem paredzētais variants pievieno divus apiešanas slāņus SC3 tārpam.

Pirmkārt, lietderīgā slodze vairs netiek piegādāta kā vienkāršs teksts. Īstā loģika atrodas AES-256-CBC šifrētā blobā, lib/.perf.dat, ar IV pirmajos sešpadsmit baitos. Iekrāvējs index.js rekonstruē atšifrēšanas atslēgu no savienotiem virkņu fragmentiem, atšifrē blobu un palaiž to ar jauna funkcija()Pat moduļu nosaukumi ir sadalīti, lai izvairītos no statiskajiem skeneriem — require('kripta' + 'o'), require('f' + 's').

Otrkārt, tā ir atkarīga no saimniekdatora. Viens variants atšifrē un darbojas tikai tad, kad os.hostname() ir vienāds izstrādātāju kaste or ubuntu-fc-uvm (Firecracker microVM noklusējuma iestatījums) vai satur apakšvirkni izstrādātāju kasteVēl viens vārti uz a klātbūtni .jules/ darba direktorijs:

Citiem vārdiem sakot, SC4 lietderīgā slodze ir paredzēta, lai paliktu neaktīva parasta izstrādātāja klēpjdatorā un pamostos tikai automatizētā mākslīgā intelekta aģenta iekšienē. smilškastes vides Operators patiesībā vēlas panākt kompromisu.

Ieslēdzot laboratoriju: analīzes infrastruktūras variants

Visjaunākā pakete kampaņā, ts-enum-helper, vispār neuzbrūk izstrādātājiem vai Shopify. Tā postinstall.sh atveras ar vārtiem, kas atklāj spēli:

Skripts neko nedara, ja vien nav iestatīts ļaunprogrammatūras analīzes platformai specifisks vides mainīgais. Kad tas ir iestatīts, lietderīgā slodze zina, ka tas darbojas smilškastes vidē, kas pastāv, lai detonētu un pētītu tieši šādas paketes, un veic pretuzbrukumu.

Vispirms tas no instances metadatu servera izgūst GCP pakalpojuma konta OAuth marķieri un to izfiltrē. Pēc tam, izmantojot šo marķieri, tas pārbauda Kubernetes vadības plakne sasniedzams plkst kubernetes.default.svc:

  • uzskaita ClusterRoleBindings, ClusterRoles un Nodes;
  • pārbauda podus, noslēpumus un konfigurācijas kartes visā kube sistēma, noklusējuma, kube-public, kube-mezgla-nomaun analīzes vārdtelpu;
  • izdod SelfSubjectAccessReview izsaukumus, lai precīzi kartētu, ko nozagtā identitāte ir atļauta darīt.

Visbeidzot, tas brutāli uzspiež Google Cloud Storage segmentu nosaukumus, kas veidoti no cietkodēta GCP projekta ID (rets-parakstītājs-437603-p9) un projekta numuru, minot kombinācijas, piemēram, *-veido, *-artefakti, un vairāki malīze- prefiksi (malīzes rezultāti, malysis-packages, malīzes skenēšana). Katrs atbildes kods un pamatteksts tiek reģistrēts un nosūtīts atpakaļ uz to pašu jules-collect galapunkts.

Šis ir retais gadījums, kad piegādes ķēdes lietderīgā slodze ir īpaši izveidota, lai uzbruktu aizstāvju pašu infrastruktūrai. Visas kampaņas titāns, kura fragmenti parādās lietderīgajās slodzēs kā komentāri, kas raksturo darbību kā “Drošības izpētes PoC… rakstīšana starprepozitorijā, izmantojot pārslogotu git starpniekservera žetonu”, ir viens un tas pats pašattaisnojums neatkarīgi no tā, vai izpildlaika mērķis ir Shopify monorepozitorijs vai analīzes klastera metadatu serveris.

Laika grafiks un darbības jomas migrācija

JulesJacker nav vienreizējs zaudējums. Tā ir ilgstoša darbība, kas pārdzīvoja reģistra dzēšanu, vienkārši mainot nosaukumu.

Kad notikums
2026. gada aprīļa vidus Pirmās pakotnes parādās sākotnējā izdevēja tvērumā: TS-utility facade, environment un git-config exfiltration.
2026. gada maija sākums Publicēts hipervizors un kodola aizbēgšanas izlūkošanas variants.
2026. gada maija vidus līdz beigas SC3 starprepozitoriju rakstīšanas tārps parādās līdzās Shopify mērķauditorijai paredzētajām kravām un google-labs-jules[bot] personības uzdošanās. SC4 ievieš AES šifrētus un resursdatora vadītus ielādētājus.
2026. gada maija beigās npm noņem sākotnējo publicētāja tvērumu; pakotņu nosaukumi tiek pārveidoti par tukšiem drošības aizvietotājiem.
Tajā pašā nedēļā Operators migrē uz gandrīz identisku līdzīgo darbības jomu un atkārtoti publicē tārpu, tostarp analīzes infrastruktūras variantu.

Migrācija ir daļa, ar kuru aizstāvjiem vajadzētu samierināties. Pirmā tēmēkļa nojaukšana neapturēja kampaņu un pat to nepalēnināja. Operators jau bija izveidojis paralēlu tēmēkli, kura nosaukums atšķiras no oriģināla par vienu rakstzīmi, un turpināja publicēšanu tajā pašā nedēļā. Raksta tapšanas brīdī jaunā tēmēkļa... ts-form-utils (versija no 1.0.0 līdz 1.1.0), tā ts-project-lint (1.0.0 un 1.1.0), kā arī savrupo versiju ts-enum-helper (1.0.0) joprojām ir instalējamas.

Kompromisa rādītāji

Visi tālāk norādītie rādītāji tika apstiprināti, izmantojot iepakojuma avotu.

Veids Indikators Piezīmes
Tīkls (C2) aaronstack[.]com/jules-collect Viens savākšanas galapunkts katrā paaudzē; saņem JSON telemetriju un base64-gzip repozitorija tarball fragmentus.
Tīkls (SSRF starpniekserveris) http://git@192.168.0.1:8080 Pārsniegta tvēruma git starpniekservera marķiera priekšpuse, ko izmanto, lai sasniegtu mērķa organizācijas krātuves.
Tīkls (mākonis) metadata.google.internal/computeMetadata/v1
kubernetes.default.svc
storage.googleapis.com/storage/v1/b
Izmanto tikai analīzes infrastruktūras variants marķieru zādzībām un Kubernetes vadības plaknes izlūkošanai.
Identitāte google-labs-jules[bot]
161369871+google-labs-jules[bot]@users.noreply.github.com
Viltots commit autora identitāte tika iespiesta upura galvenajās atzarēs.
fileja lib/.perf.dat Ar AES-256-CBC šifrēts lietderīgās slodzes blobs; IV tiek glabāts pirmajos 16 baitos, un atslēga tiek dinamiski rekonstruēta index.js.
fileja SECURITY-POC.md Nokrita un commitatgriezts upuru krātuvēs ar ziņojumu chore: update dependency cache.
fileja scripts/postinstall.sh Vārti ieslēgti $MALYSIS_ANALYSIS_ID; identificē analīzes infrastruktūras mērķauditorijas atlases variantu.
Uzvedība os.hostname() pārbaudes par devbox / ubuntu-fc-uvm Smilškastes un mākslīgā intelekta aģenta vides vārtēšana pirms lietderīgās slodzes atšifrēšanas un izpildes.
Uzvedība .jules/ un /app/.jules direktoriju nolasa Skaidra AI aģenta darba vides mērķauditorijas noteikšana.
Uzvedība sc1-, sc3-, sc4-, s0-vmm-recon Operatora definētas telemetrijas posmu etiķetes, kas noderīgas noteikšanai un meklēšanai.
Mākoņa mērķis rare-signer-437603-p9
malysis-* spaiņa minējumi
Analīzes infrastruktūras variantā iegulti cietkodēti GCP projektu identifikatori un krātuves segmentu uzskaitīšanas modeļi.
Iepakojuma forma TS utilitātes pakotnes fasāde bez repozitorija lauka Konsekventa kampaņas veidne: viltotas TypeScript utilītu pakotnes ar iegultām ļaunprātīgām lietderīgajām vērtībām postinstall hooks vai pievienots index.js.
sca-tools-software-composition-analysis-tools
Prioritizējiet, novērsiet un aizsargājiet savus programmatūras riskus
Iegūstiet savu bezmaksas kontu.
Nepieciešama kredītkarte.

Nodrošiniet programmatūras izstrādi un piegādi

ar Xygeni produktu komplektu