TL; DR
npm operadore bakar batek sei aste eman zituen TypeScript "erabilgarritasun" pakete faltsuak argitaratzen, hala nola ts-form-utils, ts-project-lint, eta ts-enum-helper.
Paketeek itxura legitimoko balidazio laguntzaile txikiak erakusten dituzten bitartean, benetako karga instalazioan edo lehenengo eskaeran exekutatzen da eta ostalariaren hatz-markak, GitHub erakundearen aurkikuntza, biltegien klonazioa eta iturburu-kodearen esfiltrazioa egiten ditu.
Malwareak GitHub-eko balio handiko erakundeak ditu jomugan, hainbat barne. Shopify biltegiak, ondoren eskuragarri dauden iturburu-zuhaitzak artxibatu eta bilduma-puntu zentralizatu batera kanporatzen ditu.
Konpromiso-lan-fluxuaren barruan, karga commitsa fitxategia biktimen biltegietara itzultzen du Google-ren kodeketa-identitate autonomoa imitatzen duen bitartean google-labs-jules[bot].
Kanpaina jarraitu genuen — izendatua JulesJacker — hainbat argitaratzaile-eremutan eta gutxienez bost karga-belaunalditan, enkriptatutako eta sandbox-erako egokiak diren aldaerak barne.
Aldaera berrienak malwarearen analisi azpiegiturak ditu helburu bereziki: analisi inguruneetan bakarrik aktibatzen da, hodeiko metadatuen zerbitzu-kontuen tokenak lapurtzen ditu eta Kubernetes kontrol-planoak eta hodeiko biltegiratze ontziak aztertzen ditu.
Karga-belaunaldi guztietan partekatzen den IOC nagusia bildumaren amaiera-puntua da. aaronstack[.]com/jules-collect.
Larritasuna: kritikoa.
Erasoa: Nola funtzionatzen duen
JulesJacker pakete guztiek txantiloi bera jarraitzen dute. paketea.json MIT lizentzia duen eta estekatutako iturburu-biltegirik gabeko TypeScript laguntzaile onbera bat iragartzen du. aurkibidea.js benetako funtzio funtzional batzuk esportatzen ditu — posta elektronikoko erregexak, enum mapak, lint arau taulak — paketea inportatzen duen garatzaile batek portaera sinesgarria ikus dezan. Gaiztakeria beste nonbait dago: batean instalazio osteko kakoa, edo beheko bloke batean aurkibidea.js modulua behar den unean exekutatzen dena.
Kargak barne-etapa argi eta garbi zenbakituen bidez eboluzionatu dira (operadoreak bere telemetria gertaerak etiketatzen ditu) sc1-, sc3-, sc4-, eta abar), eta bilakaera hori ikustea da kanpaina ulertzeko modurik argiena.
1-2 belaunaldia: ezagutza eta git-config lapurreta
Lehenengo paketeak infostealer sinpleak ziren. Instalazioan ingurune aldagaiak, GitHub CLI hosts fitxategia eta git konfigurazio orokorra biltzen zituzten (git konfigurazioa –global –zerrenda, git remote -v), eta ondoren, sorta bildumaren amaiera-puntura bidali zuen POST bidez. Horrek operadorearen sinadura ezarri zuen: "TypeScript formularioen balidazio-utilitateak" azaleko istorio bat, domeinu bakar baterako irteerako baliza bat eta kontsumitzaileen datuen ordez garatzaileen kredentzialen zaletasuna.
3. belaunaldia: hiperbisorearen eta kernelaren ihes-probak
Kanpaina erdialdeko bertsio batek azpiegitura erasoetara jo zuen gogor. Konfigurazioa lapurtu beharrean, errekonozimendu-arnesa probatu zuen. AF_VSOCK socket-ak, virtio MMIO eskualdeak, /dev/mem, eta kernelaren gogortze-banderak, eta baita sysrq-k eragindako kernelaren kraskadurak ere — makina birtual edo edukiontzi batetik ateratzeko saiakerekin lotutako portaera. Telemetria-etiketek (s0-vmm-berrekon, s1-vmm-vsocket-fuzz, s2-vmm-mmio, s3-kernel-probe) asmoa esplizitu egin zuen. Aldaera hau argi eta garbi zuzenduta zegoen hodeiko sandbox eta zerbitzaririk gabeko exekuzio-inguruneak — fidagarria ez den kodea eraiki eta probatzen duen VM iragankor mota.
3. belaunaldia (SC3): biltegi gurutzatuen idazketa-harra
Kanpainaren grabitate-zentroa auto-hedatzen zen biltegi-lapur bihurtu zen. Instalazioan, kargak bost etapatan banatutako denbora-sekuentzia bat exekutatzen du:
- Etapa 0 (~100 ms): hostaren hatz-marka hartu — hostname, erabiltzailearen informazioa, git identitatea.
- Etapa 1 (~3 s): zehaztu biktima zein erakundetakoa den ikuskatuz git remote -v, eta gero bilatu kode gogorreko bat ORG_CONFIG taula eta proba biltegirako sarbidea honekin git ls-remote — erasotzaile batek kontrolatutako SSRF proxy baten bidez bideratua hemen: http://git@192.168.0.1:8080.
- Etapa 2 (~10 segundo): git klona helburu-zerrendako biltegi eskuragarri guztiak, zuhaitza tarballatu eta gzip-ez konprimitu, base64-kodetu eta zatika-exfiltratu.
- Etapa 3 (~45 s): "sarbide-froga" — idazteko moduko biltegi bat klonatu, SECURITY-POC.md izeneko fitxategi bat kendu eta commit egilea google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> gisa ezarrita eta mezuaren zeregina: mendekotasunen katxea eguneratu, eta gero biktimaren adar nagusira bidali.
Helburu-zerrenda finkoa ez da generikoa. Hogeita hamar baino gehiago zerrendatzen ditu. Shopify biltegiak izenaren arabera — Shopify/shopify, Shopify/identitatea, Shopify/fakturazioa, Shopify/kutxa, Shopify/sekretuak, Shopify/azpiegitura, Shopify/.github, eta askoz gehiago — proba-erakunde batekin batera, AaronStackBarnes, operadoreak kontrolatzen duela dirudi eta idazketa-helburu gisa erabiltzen du.
4. belaunaldia (SC4): enkriptatua eta ate itxia
Garatzaileei begira dauden aldaera berrienak bi saihesteko geruza gehitzen dizkio SC3 zizareari.
Lehenik eta behin, karga ez da gehiago testu arrunt gisa bidaltzen. Benetako logika AES-256-CBC bidez enkriptatutako blob batean dago. lib/.perf.dat, IV-a bere lehen hamasei byteetan duela. Kargatzailea aurkibidea.js deszifratze-gakoa berreraikitzen du kateatutako kate-zatietatik, blob-a deszifratzen du eta exekutatzen du Funtzio berria()Moduluen izenak ere banatuta daude eskaner estatikoak saihesteko — behar('kriptoa' + 'o'), behar('f' + 's').
Bigarrenik, ostalariaren menpe dago. Aldaera batek bakarrik deszifratzen eta exekutatzen du os.hostname() berdinen garatzaile-kutxa or ubuntu-fc-uvm (Firecracker mikroVM lehenetsia) edo azpikatea dauka garatzaile-kutxaBeste ate batek presentzia agerian uzten du .jules/ lan-direktorioa:
Beste era batera esanda, SC4 karga garatzaile arrunt baten ordenagailu eramangarrian inaktibo egoteko eta IA agente automatizatuaren barruan bakarrik esnatzeko diseinatuta dago. sandbox inguruneak operadoreak benetan konpromisoa hartu nahi du.
Laborategia piztea: analisi-azpiegitura aldaera
Kanpainako pakete berritzaileena, ts-enum-laguntzailea, ez die garatzaileei edo Shopifyri erasotzen batere. Bere postinstall.sh jokoa saltzen duen ate batekin irekitzen da:
Script-ak ez du ezer egiten malware-analisi plataforma bati dagokion ingurune-aldagai bat ezarrita ez badago. Hala denean, kargak badaki zehazki honelako paketeak lehertu eta aztertzeko dagoen sandbox-aren barruan exekutatzen ari dela, eta kontraerasoa egiten du.
Lehenik eta behin, GCP zerbitzu-kontuaren OAuth tokena instantziaren metadatuen zerbitzaritik hartzen du eta kanporatzen du. Ondoren, token hori erabiliz, arakatzen du. Kubernetes kontrol-planoa helbidean eskura daiteke kubernetes.lehenetsia.svc:
- ClusterRoleBindings, ClusterRoles eta Nodoak zerrendatzen ditu;
- pod-ak, sekretuak eta konfigurazio-mapak aztertzen ditu kube-sistema, lehenetsi, kube-publikoa, kube-nodo-alokairua, eta analisi izen-espazioa;
- SelfSubjectAccessReview deiak egiten ditu lapurtutako identitateak zer egin dezakeen zehatz-mehatz mapatzeko.
Azkenik, GCP proiektu ID gogor kodetu batetik sortutako Google Cloud Storage ontzi izenak indarrez aplikatzen ditu (sinatzaile arraroa-437603-p9) eta proiektu zenbakia, konbinazioak asmatuz, hala nola *-eraikuntzak, *-artefaktuak, eta hainbat malesia- aurrizkiak (malysis-emaitzak, malysis-paketeak, malysis-eskaneoak). Erantzun-kode eta gorputz guztiak erregistratu eta POST berdinera bidaltzen dira. jules-bildu amaierako puntua.
Hau da defendatzaileen azpiegitura erasotzeko bereziki eraikitako hornidura-kateko karga baten kasu arraroa. Kanpaina osoko azaleko istorioa —zatiak karga barruan agertzen dira, portaera "Segurtasun Ikerketa PoC ... gurutzatutako biltegiko idazketa git proxy token gainesparruaren bidez" gisa markatzen duten iruzkin gisa— autojustifikazio bera da, exekuzio-denbora helburua Shopify monorepo bat edo analisi-klusterraren metadatuen zerbitzaria izan.
Denbora-lerroa eta esparruaren migrazioa
JulesJacker ez da jaurtiketa bakarreko bat. Erregistroaren kentze baten ondoren bizirik iraun duen operazio iraunkor bat da, izena aldatuz besterik gabe.
| Noiz | Gertaera |
|---|---|
| 2026ko apirilaren erdialdea | Lehenengo paketeak jatorrizko argitaratzailearen esparruan agertzen dira: TS-utility fatxada, ingurunea eta git-config exfiltrazioa. |
| 2026eko maiatzaren hasieran | Hiperbisorearen eta kernel-escape azterketa aldaera argitaratu da. |
| 2026ko maiatzaren erdialdetik amaierara | SC3 gurutzatutako biltegiko idazketa-harra Shopify-ri zuzendutako karga-kargekin batera agertzen da eta google-labs-jules[bot] inpersonazioa. SC4-k AES bidez enkriptatutako eta ostalari-babestutako kargatzaileak aurkezten ditu. |
| 2026eko maiatzaren amaieran | npm-k jatorrizko argitaratzaile-eremua kentzen du; paketeen izenak segurtasun-leku-marka hutsak bihurtzen dira. |
| Aste berean | Operadorea ia berdin-berdin dagoen esparru batera migratzen du eta harra berriro argitaratzen du, analisi-azpiegituraren aldaera barne. |
Migrazioa da defendatzaileek kontuan hartu beharreko zatia. Lehenengo espektroaren kentzeak ez zuen kanpaina amaitu, ezta moteldu ere. Operadoreak jada espektro paralelo bat antolatu zuen, zeinaren izena jatorrizkotik karaktere bakar batez desberdina den, eta aste berean argitaratzen jarraitu zuen. Idazten ari naizen honetan, espektro berriaren... ts-formularioen erabilerak (1.0.0tik 1.1.0ra bitarteko bertsioak), bere ts-proiektua-lint (1.0.0 eta 1.1.0), eta autonomoa ts-enum-laguntzailea (1.0.0) instalatzeko moduan jarraitzen dute.
Konpromisoaren adierazleak
Beheko adierazle guztiak paketearen iturburuarekin alderatuta baieztatu dira.
| Mota | Adierazlea | Oharrak |
|---|---|---|
| Sarea (C2) | aaronstack[.]com/jules-collect | Bilduma-mutur bakarra belaunaldi guztietan; JSON telemetria eta base64-gzip biltegiko tarball zatiak jasotzen ditu. |
| Sarea (SSRF proxya) | http://git@192.168.0.1:8080 | Helburuko erakundearen biltegietara iristeko erabiltzen den git proxy token gainesparrudun baten aurrealdea. |
| Sarea (hodeia) | metadata.google.internal/computeMetadata/v1kubernetes.default.svcstorage.googleapis.com/storage/v1/b | Token lapurreta eta Kubernetes kontrol-planoaren aitortza egiteko analisi-azpiegitura aldaerak soilik erabiltzen du. |
| Identitatea | google-labs-jules[bot]161369871+google-labs-jules[bot]@users.noreply.github.com | forjatuak commit Egilearen identitatea biktimaren adar nagusietara bultzatuta. |
| File | lib/.perf.dat | AES-256-CBC enkriptatutako karga-bloba; IV lehen 16 byteetan gordeta eta gakoa dinamikoki berreraikia index.js. |
| File | SECURITY-POC.md | Erori eta commitmezuarekin batera biktimen biltegietara itzuli chore: update dependency cache. |
| File | scripts/postinstall.sh | Atea irekita $MALYSIS_ANALYSIS_ID; analisi-azpiegitura-helburu aldaera identifikatzen du. |
| Jokabidearen | os.hostname() egiaztatzeak devbox / ubuntu-fc-uvm | Sandbox eta AI agenteen ingurunearen atetzea karga deszifratu eta exekutatu aurretik. |
| Jokabidearen | .jules/ /app/.jules direktorio irakurketak | IA agenteen lan-eremu inguruneen helburu esplizitua. |
| Jokabidearen | sc1-, sc3-, sc4-, s0-vmm-recon | Operadoreak definitutako telemetria-etaparen etiketak, detekziorako eta ehizarako erabilgarriak. |
| Hodeiko helburua | rare-signer-437603-p9malysis-* ontziaren asmakizunak | Azpiegitura aldaeran txertatutako GCP proiektuaren identifikatzaile finkoak eta biltegiratze-ontzien zenbaketa-ereduak. |
| Paketearen forma | TS-utility paketearen fatxada, biltegi eremurik gabe | Kanpaina txantiloi koherentea: TypeScript utilitate pakete faltsuak, karga gaiztoak txertatuta dituztenak postinstall hooks edo erantsita index.js. |




