ТЛ; ДР
Један npm оператер је провео шест недеља објављујући лажне TypeScript „услужне“ пакете као што су ts-form-utils, ts-project-lint, i ts-enum-helper.
Док пакети откривају мале, легитимно изгледајуће помоћне програме за валидацију, прави корисни терет се извршава приликом инсталације или првог захтева и врши отисак прста хоста, откривање организације на ГитХабу, клонирање репозиторијума и извлачење изворног кода.
Злонамерни софтвер посебно циља високо вредне GitHub организације, укључујући више њих Схопифи спремишта, затим архивира и ексфилтрира доступна изворна стабла до централизоване крајње тачке колекције.
Као део компромисног тока рада, корисни терет commitса датотеку назад у спремишта жртава док се представљају као аутономни кодерски идентитет компаније Google google-labs-jules[bot].
Пратили смо кампању — под називом Џулс Џекер — у више обима издавача и најмање пет генерација корисног оптерећења, укључујући шифроване и варијанте које подржавају „sandbox“.
Најновија варијанта посебно циља инфраструктуру за анализу злонамерног софтвера: активира се само унутар аналитичких окружења, краде токене сервисних налога метаподатака у облаку и испитује Кубернетес контролне равни и канте за складиштење у облаку.
Примарни IOC који се дели између свих генерација корисног оптерећења је крајња тачка колекције aaronstack[.]com/jules-collect.
Озбиљност: критична.
Напад: Како функционише
Сваки пакет компаније JulesJacker прати исти шаблон. пацкаге.јсон рекламира безазлени TypeScript помоћник са MIT лиценцом и без повезаног репозиторијума изворног кода. индек.јс извози неколико стварних, радних функција — регуларне изразе е-поште, мапе набрајања, табеле правила за линт — тако да програмер који заправо увози пакет види вероватно понашање. Злоба се налази негде другде: у након инсталације куку или у блоку на дну индек.јс који се извршава у тренутку када је модул потребан.
Корисни терет је еволуирао кроз јасно нумерисане интерне фазе (оператор сам означава своје телеметријске догађаје sc1-, sc3-, sc4-, и тако даље), а посматрање те еволуције је најјаснији начин да се разуме кампања.
Генерација 1–2: извиђање и крађа git-config-а
Најранији пакети су били једноставни крадљивци информација. Приликом инсталације, прикупљали су променљиве окружења, датотеку hosts са GitHub CLI-ја и глобалну git конфигурацију (git config –global –list, гит даљински -в), а затим је послао пакет на крајњу тачку колекције. Ово је успоставило потпис оператера: насловна прича „Услужни програми за валидацију образаца TypeScript“, одлазни сигнал ка једном домену и склоност ка акредитивима програмера уместо подацима потрошача.
Генерација 3: хипервизор и сонде за бекство језгра
Једна верзија усред кампање се снажно окренула нападима на инфраструктуру. Уместо крађе конфигурације, покренула је извиђачко испитивање хартија од вредности. АФ_ВСОЦК сокети, виртуелни ММИО региони, / дев / мем, и заставице за ојачавање језгра, па чак и покушаји падова језгра изазваних sysrq-ом — понашање повезано са покушајима изласка из виртуелне машине или контејнера. Ознаке телеметрије (с0-вмм-извиђање, с1-вмм-всок-фуз, с2-вмм-ммио, s3-kernel-probe) је експлицитно назначио намеру. Ова варијанта је очигледно била усмерена на cloud-sandbox и serverless-runner окружења — врста ефемерне виртуелне машине која гради и тестира непоуздан код.
Генерација 3 (SC3): црв за писање унакрсних репозиторијума
Центар гравитације кампање постао је самопропагирајући крадљивац складишта. Приликом инсталације, корисни терет покреће временски ограничену секвенцу од пет фаза:
- Фаза КСНУМКС (~100 мс): отисак прста хоста — име хоста, информације о кориснику, git идентитет.
- Фаза КСНУМКС (~3 с): утврдити којој организацији жртва припада прегледом гит даљински -в, затим потражите чврсто кодиран ORG_CONFIG приступ табели и тестном репозиторијуму са git ls-remote — усмерено преко SSRF проксија којим управља нападач на http://git@192.168.0.1:8080.
- Фаза КСНУМКС (~10 с): гит цлоне сваки доступни репозиторијум на циљној листи, архивирај стабло помоћу tarball-а и gzip-а, кодирај га у base64 формату и издвоји га помоћу chunk-а.
- Фаза КСНУМКС (~45 с): „доказ приступа“ — клонирајте репозиторијум у који се може писати, уклоните датотеку под називом SECURITY-POC.md и commit са аутором подешеним на google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> и обавезом слања поруке: ажурирање кеша зависности, а затим слање на главну грану жртве.
Тврдо кодирана листа циљева није генеричка. Она набраја више од тридесет Схопифи спремишта по имену — Shopify/shopify, Shopify/идентитет, Shopify/наплата, Shopify/трезор, Shopify/тајне, Shopify/инфраструктура, Shopify/.github, и још много тога — уз организацију за тестирање, АронСтекБарнс, који оператор изгледа контролише и користи као циљ писања.
Генерација 4 (SC4): шифрована и затворена
Најновија варијанта окренута програмерима додаје два слоја избегавања поред црва SC3.
Прво, корисни терет се више не испоручује као обичан текст. Права логика се налази у блобу шифрованом AES-256-CBC методом, lib/.perf.dat, са IV у својих првих шеснаест бајтова. Учитавач у индек.јс реконструише кључ за дешифровање из спојених фрагмената низа, дешифрује блоб и покреће га са нова функција()Чак су и имена модула подељена како би се избегли статички скенери — захтевај('крипта' + 'о'), захтевај('f' + 's').
Друго, ограничен је на хоста. Једна варијанта дешифрује и покреће се само када os.hostname() једнако програмски оквир or ubuntu-fc-uvm (подразумевана вредност за Firecracker microVM) или садржи подстринг програмски оквирЈош једна капија о присуству .јулс/ радни директоријум:
Другим речима, SC4 корисни терет је дизајниран да остане неактиван на обичном лаптопу програмера и да се пробуди само унутар аутоматизованог AI-агента. сандбок окружења оператер заправо жели да направи компромис.
Укључивање лабораторије: варијанта анализе и инфраструктуре
Најновији пакет у кампањи, ts-enum-helper, уопште не напада програмере или Shopify. Његов postinstall.sh отвара се капијом која открива игру:
Скрипта не ради ништа осим ако није подешена променљива окружења специфична за платформу за анализу злонамерног софтвера. Када јесте, корисни терет зна да се покреће унутар „пешчаника“ који постоји да би детонирао и проучавао пакете баш као што је овај — и контранапада.
Прво повлачи OAuth токен GCP сервисног налога са сервера метаподатака инстанце и извлачи га. Затим, користећи тај токен, претражује Контролна раван Кубернетес доступан на kubernetes.default.svc:
- наводи ClusterRoleBindings, ClusterRoles и Nodes;
- испитује подове, тајне и конфигурационе мапе широм кубе-систем, Уобичајено, кубе-паблик, закуп-чвора-кубе, и именски простор анализе;
- издаје позиве функцији SelfSubjectAccessReview како би тачно мапирао шта је украденом идентитету дозвољено да ради.
Коначно, грубом силом проверава имена канти Google Cloud Storage-а направљена од чврсто кодираног GCP ID-а пројекта (ретко-потписник-437603-п9) и број пројекта, погађајући комбинације као што су *-гради, *-артефакти, и неколико малаксалост- префикси (резултати-мализе, пакети-за-мализу, скенирање малезе). Сваки код и тело одговора се евидентирају и шаљу назад на исти Џулс Колекшн крајња тачка.
Ово је редак случај корисног оптерећења ланца снабдевања направљеног посебно за напад на сопствену инфраструктуру бранилаца. Насловна прича кроз целу кампању — чији се фрагменти појављују унутар корисних оптерећења као коментари који понашање уоквирују као „Security Research PoC ... унакрсно писање у репозиторијуму преко преоптерећеног git прокси токена“ — је исто самооправдање, без обзира да ли је циљ времена извршавања Shopify монорепозиторијум или сервер метаподатака аналитичког кластера.
Временска линија и миграција обима
ЏулсЏекер није једнократни пад. То је континуирана операција која је преживела уклањање из регистра једноставном променом имена.
| Када | догађај |
|---|---|
| Средином априла 2026 | Први пакети се појављују у оквиру оригиналног опсега издавача: TS-utility facade, environment и git-config exfiltration. |
| Почетком маја 2026 | Објављена је хипервизор и варијанта за извиђање са избегавањем језгра. |
| Средином до краја маја 2026. | Црв за писање SC3 унакрсних репозиторијума појављује се поред корисних оптерећења усмерених на Shopify и google-labs-jules[bot] лажно представљање. SC4 уводи AES-шифроване и хост-гејтоване учитаваче. |
| Крајем маја 2026. | npm уклања оригинални опсег издавача; имена пакета се решавају као празна резервисана места за безбедност. |
| Исте недеље | Оператор мигрира на готово идентичан сличан опсег и поново објављује црва, укључујући варијанту инфраструктуре за анализу. |
Миграција је део са којим би браниоци требало да се осећају пријатно. Уклањање првог оптичког нишана није окончало кампању нити је успорило. Оператор је већ поставио паралелни оптички нишан чије се име разликује од оригиналног за један карактер и наставио је са објављивањем у истој недељи. У време писања овог текста, нови оптички нишан... ts-form-utils (верзије од 1.0.0 до 1.1.0), његове ts-project-lint (1.0.0 и 1.1.0), и самостални ts-enum-helper (1.0.0) остају инсталирани.
Индикатори компромиса
Сви доле наведени индикатори су потврђени у односу на извор пакета.
| тип | Индикатор | белешке |
|---|---|---|
| Мрежа (C2) | aaronstack[.]com/jules-collect | Једна крајња тачка колекције у свакој генерацији; прима JSON телеметрију и base64-gzip tarball делове репозиторијума. |
| Мрежа (SSRF прокси) | http://git@192.168.0.1:8080 | Предња страна за преоптерећени git прокси токен који се користи за приступ репозиторијумима циљне организације. |
| Мрежа (облак) | metadata.google.internal/computeMetadata/v1kubernetes.default.svcstorage.googleapis.com/storage/v1/b | Користи се само од стране варијанте аналитичке инфраструктуре за крађу токена и извиђање контролне равни Кубернетеса. |
| Идентитет | google-labs-jules[bot]161369871+google-labs-jules[bot]@users.noreply.github.com | Кривотворен commit Идентитет аутора је угуран у главне гране жртве. |
| Фајл | lib/.perf.dat | AES-256-CBC-шифровани блоб корисног оптерећења; IV сачуван у првих 16 бајтова, а кључ се динамички реконструише у index.js. |
| Фајл | SECURITY-POC.md | Испуштено и commitвраћено у складишта жртава са поруком chore: update dependency cache. |
| Фајл | scripts/postinstall.sh | Затворено $MALYSIS_ANALYSIS_ID; идентификује варијанту циљања на анализу инфраструктуре. |
| бехавиорал | os.hostname() чекови за devbox / ubuntu-fc-uvm | Контрола песковитих система и окружења вештачке интелигенције пре дешифровања и извршавања корисног терета. |
| бехавиорал | .jules/ /app/.jules читања директоријума | Експлицитно циљање радних окружења AI-агента. |
| бехавиорал | sc1-, sc3-, sc4-, s0-vmm-recon | Ознаке телеметријске фазе које дефинише оператер, корисне за детекцију и лов. |
| Циљ у облаку | rare-signer-437603-p9malysis-* претпоставке из канте | Тврдо кодирани идентификатори GCP пројекта и обрасци набрајања складишта уграђени у варијанту инфраструктуре за анализу. |
| Облик пакета | Фасада TS-комуналног пакета без поља спремишта | Доследан шаблон кампање: лажни пакети услужних програма TypeScript са уграђеним злонамерним корисним садржајем postinstall hooks или додато уз index.js. |




