TL; DR
Unuopa npm-funkciigisto pasigis ses semajnojn publikigante falsajn TypeScript-"utilajn" pakaĵojn kiel ekzemple ts-form-utils, ts-project-lintKaj ts-enum-helper.
Dum la pakaĵoj malkaŝas malgrandajn, aspektantajn laŭleĝe, validigajn helpilojn, la vera utila ŝarĝo efektiviĝas ĉe instalado aŭ unua bezono kaj plenumas gastiganto-fingrospuradon, GitHub-organizan malkovron, deponejan klonadon kaj fontkodan elfiltradon.
La malica programaro specife celas altvalorajn GitHub-organizojn, inkluzive de pluraj Shopify deponejoj, poste arkivas kaj elfiltras atingeblajn fontarbojn al centralizita kolektofinpunkto.
Kiel parto de la kompromisa laborfluo, la utila ŝarĝo commitsa-dosieron reen en viktimajn deponejojn dum ili ŝajnigas esti la sendependa koda identeco de Google google-labs-jules[bot].
Ni spuris la kampanjon — nomitan JulesJacker — trans pluraj eldonistaj ampleksoj kaj almenaŭ kvin utilŝarĝaj generacioj, inkluzive de ĉifritaj kaj sablokest-konsciaj variaĵoj.
La plej nova variaĵo specife celas infrastrukturon por analizado de malica programaro: ĝi aktiviĝas nur ene de analizaj medioj, ŝtelas ĵetonojn de servo-kontoj en nubaj metadatenoj, kaj esploras kontrolajn ebenojn de Kubernetes kaj nubajn stokadujojn.
La ĉefa IOC dividita trans ĉiuj utilŝarĝaj generacioj estas la kolektofinpunkto aaronstack[.]com/jules-collect.
Graveco: kritika.
La Atako: Kiel Ĝi Funkcias
Ĉiu pakaĵo de JulesJacker sekvas la saman ŝablonon. La pako.json reklamas bonkoran TypeScript-helpilon kun MIT-licenco kaj neniu ligita fontdeponejo. La indekso.js eksportas manplenon da realaj, funkciaj funkcioj — retpoŝtaj regulaj esprimoj, listigmapoj, lint-regulaj tabeloj — tiel ke programisto, kiu efektive importas la pakaĵon, vidas kredindan konduton. La malico loĝas aliloke: en postinstalo hoko, aŭ en bloko ĉe la fundo de indekso.js kiu efektiviĝas en la momento kiam la modulo estas bezonata.
La utilaj ŝarĝoj evoluis tra klare numeritaj internaj stadioj (la funkciigisto etikedas siajn proprajn telemetriajn eventojn sc1-, sc3-, sc4-, kaj tiel plu), kaj observi tiun evoluon estas la plej klara maniero kompreni la kampanjon.
Generacio 1–2: sciigo kaj git-config-ŝtelo
La plej fruaj pakaĵoj estis simplaj informŝtelistoj. Dum instalado ili rikoltis mediajn variablojn, la GitHub CLI-gastigan dosieron, kaj la tutmondan git-agordon (git agordo –tutmonda –listo, git remote -v), poste sendis la pakaĵon al la finpunkto de la kolekto. Tio establis la subskribon de la funkciigisto: kovrilorakonto pri "TypeScript-formularaj validigaj iloj", elira signalo al ununura domajno, kaj prefero por programistaj akreditaĵoj anstataŭ konsumantaj datumoj.
Generacio 3: hipervizoro kaj kernaj eskapproboj
Unu mezkampanja versio forte turniĝis al infrastrukturaj atakoj. Anstataŭ ŝteli agordojn, ĝi efektivigis rekonan kablaron sondante. AF_VSOCK ingoj, virtio MMIO-regionoj, /dev/mem, kaj flagoj pri kerna hardado, kaj eĉ provoj de sysrq-ekigitaj kernaj kraŝoj — konduto asociita kun provoj eliri el virtuala maŝino aŭ ujo. La telemetriaj etikedoj (s0-vmm-recon, s1-vmm-vŝtrumpeto-fuzz, s2-vmm-mmio, s3-kerno-sondilo) eksplicite klarigis la intencon. Ĉi tiu variaĵo klare celis nub-sablokestaj kaj sen-servilaj kuristaj medioj — la speco de efemera virtuala maŝino kiu konstruas kaj testas nefidindan kodon.
Generacio 3 (SC3): la trans-deponeja skribvermo
La pezocentro de la kampanjo fariĝis mem-disvastiĝanta deponejŝtelisto. Ĉe instalado, la utila ŝarĝo plenumas kvin-ŝtupan tempigitan sekvencon:
- stadio 0 (~100 ms): fingrospuri la gastiganton — gastigantonomo, uzantaj informoj, git-identeco.
- stadio 1 (~3 s): determini al kiu organizo la viktimo apartenas per inspektado git remote -v, poste serĉu fikskoditan ORG_CONFIG aliro al tabelo kaj testa deponejo kun git ls-remote — sendita tra atakanto-kontrolita SSRF-prokurilo ĉe http://git@192.168.0.1:8080.
- stadio 2 (~10 sekundoj): git klono ĉiun atingeblan deponejon en la cela listo, tarballigu kaj gzipu la arbon, base64-kodu ĝin, kaj bloko-elfiltru ĝin.
- stadio 3 (~45 s): la "pruvo de aliro" — klonu skribeblan deponejon, forigu dosieron nomitan SECURITY-POC.md, kaj commit ĝin kun la aŭtoro agordita al google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> kaj la mesaĝtasko: ĝisdatigi la dependecan kaŝmemoron, poste puŝi al la ĉefa branĉo de la viktimo.
La fikskodita cela listo ne estas ĝenerala. Ĝi listigas pli ol tridek Shopify deponejoj laŭ nomo — Shopify/shopify, Shopify/identeco, Shopify/fakturado, Shopify/trezorejo, Shopify/sekretoj, Shopify/infrastrukturo, Shopify/.github, kaj multaj pli — kune kun testorganizo, AaronStackBarnes, kiun la funkciigisto ŝajnas kontroli kaj uzas kiel la skribcelon.
Generacio 4 (SC4): ĉifrita kaj enirkontrolita
La plej nova programisto-orientita variaĵo aldonas du tavolojn de evitado aldone al la SC3-vermo.
Unue, la utila ŝarĝo jam ne estas sendata kiel klarteksto. La vera logiko kuŝas en AES-256-CBC-ĉifrita blob-o, lib/.perf.dat, kun la IV en ĝiaj unuaj dek ses bajtoj. La ŝargilo en indekso.js rekonstruas la malĉifran ŝlosilon el kunmetitaj ĉenfragmentoj, malĉifras la blokon, kaj ruligas ĝin per nova Funkcio()Eĉ la modulnomoj estas dividitaj por eviti senmovajn skanilojn — postuli('kripto' + 'o'), postuli('f' + 's').
Due, ĝi estas gastiganto-kontrolita. Unu variaĵo nur malĉifras kaj funkcias kiam os.hostname() egalaj programkesto or ubuntu-fc-uvm (defaŭlte Firecracker-mikroVM) aŭ enhavas la subĉenon programkestoAlia pordego atentigas pri la ĉeesto de .jules/ labora dosierujo:
Alivorte, la utila ŝarĝo de SC4 estas desegnita por resti dormanta sur la tekokomputilo de ordinara programisto kaj vekiĝi nur ene de la aŭtomata AI-agento kaj sablokesto-medioj la funkciigisto efektive volas kompromisi.
Ŝaltante la Laboratorion: la Analizo-Infrastruktura Varianto
La plej nova pakaĵo en la kampanjo, ts-enum-helpanto, tute ne atakas programistojn aŭ Shopify. Ĝia postinstalo.sh malfermiĝas per pordego kiu malkaŝas la ludon:
La skripto faras nenion krom se ĉirkaŭvariablo specifa por platformo por analizado de malica programaro estas agordita. Kiam ĝi estas, la utila ŝarĝo scias, ke ĝi funkcias ene de la sablokesto, kiu ekzistas por detonacii kaj studi pakaĵojn precize kiel ĉi tiu — kaj ĝi kontraŭatakas.
Ĝi unue tiras la GCP-servan konton OAuth-ĵetonon el la instanca metadatena servilo kaj elfiltras ĝin. Poste, uzante tiun ĵetonon, ĝi balaas la Kubernetes-kontrola ebeno atingebla ĉe kubernetes.default.svc:
- listigas ClusterRoleBindings, ClusterRoles, kaj Nodes;
- sondas podojn, sekretojn kaj agordomapojn tra kube-sistemo, defaŭlte, kube-publiko, kube-nodo-lizo, kaj la analiza nomspaco;
- eldonas SelfSubjectAccessReview-vokojn por mapi precize kion la ŝtelita identeco rajtas fari.
Fine ĝi kruddevigas nomojn de Google Cloud Storage konstruitajn el fiksita GCP-projekta ID (malofta-subskribinto-437603-p9) kaj projektnumero, divenante kombinaĵojn kiel ekzemple *-konstruoj, *-artefaktoj, kaj pluraj malizo- prefiksoj (rezultoj de malizo, malysis-pakaĵoj, malizo-skanadoj). Ĉiu respondkodo kaj korpo estas registritaj kaj resenditaj al la sama jules-kolekto finpunkto.
Jen malofta kazo de provizoĉena utila ŝarĝo konstruita specife por ataki la propran infrastrukturon de la defendantoj. La kovrilorakonto tra la tuta kampanjo — fragmentoj de kiu aperas ene de la utilaj ŝarĝoj kiel komentoj enkadrigantaj la konduton kiel "Sekureca Esplora ProC ... kruc-deponejo skribas per troampleksita git-prokura ĵetono" — estas la sama mempravigo, ĉu la rultempa celo estas Shopify-monodeponejo aŭ la metadatena servilo de la analiza areto.
Templinio kaj la Ampleksa Migrado
JulesJacker ne estas unufoja lanĉo. Ĝi estas daŭra operacio, kiu travivis registro-malaktivigon simple ŝanĝante sian nomon.
| Kiam | okazaĵo |
|---|---|
| Meze de aprilo 2026 | La unuaj pakaĵoj aperas sub la originala eldonista amplekso: TS-utility fasado, medio kaj git-config elfiltrado. |
| Frua majo 2026 | Hipervizoro kaj kerno-eskapa sciiga variaĵo publikigitaj. |
| Meze ĝis fine de majo 2026 | SC3 kruc-deponeja skribvermo aperas kune kun Shopify-celitaj utilaj ŝarĝoj kaj google-labs-jules[bot] imitado. SC4 enkondukas AES-ĉifritajn kaj gastigant-eniritajn ŝargilojn. |
| Malfrua majo 2026 | npm forigas la originalan eldonistan amplekson; pakaĵnomoj solviĝas al malplenaj sekurec-tenantaj provizoraĵoj. |
| Sama semajno | La funkciigisto migras al preskaŭ identa aspektsimila amplekso kaj republikigas la vermon, inkluzive de la analiz-infrastruktura variaĵo. |
La migrado estas la parto, kiun defendantoj devus toleri. La malaktivigo de la unua teleskopo ne finis la kampanjon aŭ eĉ malrapidigis ĝin. La funkciigisto jam aranĝis paralelan teleskopon, kies nomo diferencas de la originalo per unu sola signo, kaj daŭre publikigis ene de la sama semajno. Dum la verkado de ĉi tio, la nova teleskopo... ts-formo-utiloj (versioj 1.0.0 ĝis 1.1.0), ĝia ts-projekto-lint (1.0.0 kaj 1.1.0), kaj la memstara ts-enum-helpanto (1.0.0) restas instaleblaj.
Indikiloj de Kompromiso
Ĉiuj indikiloj sube estis konfirmitaj rilate al la pakaĵfonto.
| tipo | indikilo | Notoj |
|---|---|---|
| Reto (C2) | aaronstack[.]com/jules-collect | Ununura kolekta finpunkto tra ĉiu generacio; ricevas JSON-telemetrion kaj base64-gzip-deponejan tarball-pecojn. |
| Reto (SSRF-prokurilo) | http://git@192.168.0.1:8080 | Fronto por troampleksita git-prokurila ĵetono uzata por atingi celajn organizaĵajn deponejojn. |
| Reto (nubo) | metadata.google.internal/computeMetadata/v1kubernetes.default.svcstorage.googleapis.com/storage/v1/b | Uzata nur de la analiz-infrastruktura variaĵo por ĵetonŝtelo kaj Kubernetes-kontrol-ebena sciigo. |
| identeco | google-labs-jules[bot]161369871+google-labs-jules[bot]@users.noreply.github.com | Forĝita commit aŭtora identeco puŝita en viktimajn ĉefbranĉojn. |
| dosiero | lib/.perf.dat | AES-256-CBC-ĉifrita utila ŝarĝo; IV konservita en la unuaj 16 bajtoj kaj ŝlosilo rekonstruita dinamike en index.js. |
| dosiero | SECURITY-POC.md | Faligita kaj commitreenmetita en viktimajn deponejojn kun la mesaĝo chore: update dependency cache. |
| dosiero | scripts/postinstall.sh | Enirpermesita $MALYSIS_ANALYSIS_ID; identigas la analizo-infrastrukturo-celan variaĵon. |
| Kondutisma | os.hostname() ĉekoj por devbox / ubuntu-fc-uvm | Sablokesto kaj AI-agenta medio-enirkontrolo antaŭ malĉifrado kaj ekzekuto de utila ŝarĝo. |
| Kondutisma | .jules/ kaj /app/.jules dosierujaj legaĵoj | Eksplicita celado de AI-agentaj laborspacoj. |
| Kondutisma | sc1-, sc3-, sc4-, s0-vmm-recon | Etikedoj de telemetriaj etapoj difinitaj de funkciigisto utilaj por detekto kaj ĉasado. |
| Nuba celo | rare-signer-437603-p9malysis-* sitelo divenas | Fikse kodigitaj GCP-projektaj identigiloj kaj stokad-sitelaj listigŝablonoj enigitaj en la analiz-infrastrukturan variaĵon. |
| Pakaĵformo | TS-servaĵa pakaĵfasado sen deponejkampo | Kohera kampanja ŝablono: falsaj TypeScript-servaĵaj pakaĵoj kun malicaj utilaj ŝarĝoj enigitaj en postinstall hooks aŭ aldonita al index.js. |




