JulesJacker: Жалған npm құрты Jules AI-дің кейпінде

JulesJacker: Google-дың Jules агентінің кейпін жасайтын және оны талдау үшін құмсалғышты қосатын жалған PoC npm құрты

TL; DR

Бір npm операторы жалған TypeScript «қызметтік» пакеттерін жариялауға алты апта жұмсады, мысалы ts-form-utils, ts-project-lint, және ts-enum-helper.

Пакеттер шағын заңды көрінетін тексеру көмекшілерін көрсетсе де, нақты пайдалы жүктеме орнату немесе алдымен талап ету кезінде орындалады және хосттың саусақ ізін алуды, GitHub ұйымын табуды, репозиторийді клондауды және бастапқы кодты эксфильтрациялауды орындайды.

Зиянды бағдарлама бірнеше жоғары құнды GitHub ұйымдарын нысанаға алады. Shopify репозиторийлерді, содан кейін қолжетімді бастапқы ағаштарды мұрағаттайды және орталықтандырылған жинау нүктесіне шығарады.

Ымыраға келу жұмыс процесінің бөлігі ретінде, пайдалы жүктеме commitsa файлын Google-дың автономды кодтау сәйкестігін еліктей отырып, жәбірленуші репозиторийлеріне қайтарады google-labs-jules[bot].

Біз науқанды бақыладық — аталған Джулс Джекер — бірнеше баспагердің ауқымында және кемінде бес пайдалы жүктеме буынында, соның ішінде шифрланған және сынақ жәшігін ескеретін нұсқаларда.

Ең жаңа нұсқа зиянды бағдарламаларды талдау инфрақұрылымына бағытталған: ол тек талдау орталарында ғана белсендіріледі, бұлттық метадеректер қызметінің тіркелгі токендерін ұрлайды және Kubernetes басқару тақталары мен бұлттық сақтау шелектерін тексереді.

Барлық пайдалы жүктеме буындары арасында ортақ пайдаланылатын негізгі IOC - жинаудың соңғы нүктесі aaronstack[.]com/jules-collect.

Ауырлығы: сыни.

Шабуыл: ол қалай жұмыс істейді

Әрбір JulesJacker бумасы бірдей үлгіні орындайды. пакет.json MIT лицензиясы бар және сілтеме жасалған дереккөз репозиторийі жоқ қауіпсіз TypeScript көмекшісін жарнамалайды. index.js бірнеше нақты, жұмыс істейтін функцияларды — электрондық пошта регекстерін, enum карталарын, линт ереже кестелерін — экспорттайды, сондықтан пакетті импорттайтын әзірлеуші ​​ықтимал әрекетті көреді. Зұлымдық басқа жерде: ішінде орнатудан кейінгі ілгекте немесе төменгі жағындағы блокта index.js модуль қажет болған сәтте орындалады.

Пайдалы жүктемелер анық нөмірленген ішкі кезеңдер арқылы дамыды (оператор өзінің телеметрия оқиғаларын белгілейді) sc1-, sc3-, sc4-және тағы басқалар), және эволюцияның науқанды түсінудің ең айқын жолы екенін бақылау.

 1-2 буын: барлау және git-config ұрлығы

Ең алғашқы пакеттер қарапайым ақпарат ұрлаушылары болды. Орнату кезінде олар орта айнымалыларын, GitHub CLI хост файлын және жаһандық git конфигурациясын жинады (git config –global –list, git қашықтан басқару құралы -v), содан кейін буманы жинаудың соңғы нүктесіне POST арқылы жіберді. Бұл оператордың қолтаңбасын орнатты: «TypeScript пішінін тексеру утилиталары» мұқабасы, бір доменге шығыс маяк және тұтынушы деректеріне емес, әзірлеуші ​​​​тіркелгі деректеріне деген талғам.

3-ші буын: гипервизор мен ядродан қашу зондтары

Науқан ортасындағы бір нұсқа инфрақұрылымдық шабуылдарға қатты ауысты. Конфигурацияны ұрлаудың орнына, ол қайта құру құралын тексеруді іске қосты. AF_VSOCK сокеттері, virtio MMIO аймақтары, /dev/mem, және ядроны қатайту жалаушалары, тіпті sysrq арқылы іске қосылған ядроның істен шығу әрекеттері — виртуалды машинадан немесе контейнерден шығу әрекеттерімен байланысты мінез-құлық. Телеметрия тегтері (s0-vmm-recon, s1-vmm-vsock-fuzz, s2-vmm-mmio, s3-ядро-зонды) ниетін анық көрсетті. Бұл нұсқа анық бағытталған болатын бұлттық-құмсалғыш және серверсіз-жұмыс орталары — сенімсіз кодты құратын және тексеретін уақытша виртуалды машина түрі.

3-ші буын (SC3): репозиторийлер арасындағы жазу құрты

Науқанның ауырлық орталығы өзін-өзі тарататын репозиторий ұрысына айналды. Орнату кезінде пайдалы жүктеме бес сатылы уақыттық тізбек бойынша жұмыс істейді:

  • 0 кезеңі (~100 мс): хостты саусақ ізі арқылы анықтау — хост атауы, пайдаланушы ақпараты, git идентификаторы.
  • 1 кезеңі (~3 с): тексеру арқылы жәбірленушінің қай ұйымға жататынын анықтау git қашықтан басқару құралы -v, содан кейін қатты кодталған файлды іздеңіз ORG_CONFIG кестеге және сынақ репозиторийге кіру мүмкіндігімен git ls-remote — шабуылдаушы басқаратын SSRF проксиі арқылы бағытталды http://git@192.168.0.1:8080.
  • 2 кезеңі (~10 с): git клоны мақсатты тізімдегі әрбір қолжетімді репозиторийде ағашты tarball және gzip арқылы өңдеңіз, оны base64-кодтаңыз және оны бөлшектеп шығарыңыз.
  • 3 кезеңі (~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/инфрақұрылым, Shopify/.githubжәне тағы басқалары — тестілеу ұйымымен қатар, АаронСтэкБарнс, оператор басқаратын сияқты және жазу нысанасы ретінде пайдаланады.

4-ші буын (SC4): шифрланған және қақпаланған

Әзірлеушіге арналған ең жаңа нұсқа SC3 құртының үстіне екі қабатты жалтаруды қосады.

Біріншіден, пайдалы жүктеме енді ашық мәтін ретінде жіберілмейді. Нақты логика AES-256-CBC шифрланған блокта жатыр, lib/.perf.dat, IV алғашқы он алты байтында. Жүктегіш index.js біріктірілген жол үзінділерінен шифрды ашу кілтін қайта құрастырады, блоктың шифрын ашады және оны іске қосады жаңа функция()Тіпті модуль атаулары статикалық сканерлерден аулақ болу үшін бөлінген — require('crypt' + 'o'), талап ету('f' + 's').

Екіншіден, ол хост арқылы басқарылады. Бір нұсқасы тек шифрды ашады және іске қосылады os.hostname() тең әзірлеуші ​​қорабы or ubuntu-fc-uvm (Firecracker microVM әдепкі параметрі) немесе ішкі жолды қамтиды әзірлеуші ​​қорабыТағы бір қақпаның болуы .jules/ жұмыс каталогы:

Басқаша айтқанда, SC4 пайдалы жүктемесі кәдімгі әзірлеушінің ноутбугында ұйқы режимінде тұруға және тек автоматтандырылған жасанды интеллект агентінің ішінде оянуға арналған. құмсалғыш орталары оператор шын мәнінде ымыраға келгісі келеді.

Зертхананы іске қосу: талдау-инфрақұрылым нұсқасы

Науқандағы ең жаңа пакет, ts-enum-helper, әзірлеушілерге немесе Shopify-ге мүлдем шабуыл жасамайды. Оның postinstall.sh ойынды беретін қақпамен ашылады:

Зиянды бағдарламалық жасақтаманы талдау платформасына тән орта айнымалысы орнатылмаса, скрипт ештеңе істемейді. Ол орнатылған кезде, пайдалы жүктеме дәл осы сияқты пакеттерді жару және зерттеу үшін бар құм жәшігінде жұмыс істеп тұрғанын біледі және қарсы шабуыл жасайды.

Алдымен ол GCP қызметтік тіркелгісінің OAuth токенін дана метадеректер серверінен алып, оны сүзгіден өткізеді. Содан кейін, сол токенді пайдаланып, оны сыпырады. Kubernetes басқару жазықтығы мекенжайында қол жеткізуге болады kubernetes.default.svc:

  • ClusterRoleBindings, ClusterRoles және Nodes тізімдерін көрсетеді;
  • зондтар, құпиялар және конфигурация карталары арқылы kube-жүйесі, Әдепкі, kube-public, kube-node-leaseжәне талдау атау кеңістігі;
  • Ұрланған сәйкестендіруге не істеуге рұқсат етілгенін дәл анықтау үшін SelfSubjectAccessReview шақыруларын тудырады.

Соңында, ол қатты кодталған GCP жоба идентификаторынан жасалған Google Cloud Storage шелек атауларын мәжбүрлейді (сирек кездесетін қол қоюшы-437603-p9) және жоба нөмірі, сияқты комбинацияларды болжау *-құрылыстар, *-артефактілер, және бірнеше мализия- префикстер (анализ нәтижелері, мализистер пакеттері, мализисканерлеуӘрбір жауап коды мен негізгі мәтіні тіркеліп, сол жерге қайта жіберіледі. jules-collection соңғы нүкте.

Бұл қорғаушылардың өз инфрақұрылымына шабуыл жасау үшін арнайы жасалған жеткізу тізбегінің пайдалы жүктемесінің сирек кездесетін жағдайы. Бүкіл науқан бойынша мұқабадағы оқиға — оның үзінділері пайдалы жүктемелердің ішінде «Қауіпсіздікті зерттеу PoC... кең ауқымды git прокси токені арқылы кросс-репозиторий жазу» ретінде мінез-құлықты сипаттайтын түсініктемелер ретінде пайда болады — орындау уақытының нысанасы Shopify монорепосы немесе талдау кластерінің метадеректер сервері болсын, өзін-өзі ақтаумен бірдей.

Уақыт шкаласы және ауқымның көшуі

JulesJacker бір реттік құлдырау емес. Бұл тізілімнің жойылуынан кейін атауын өзгерту арқылы аман қалған үздіксіз операция.

Қашан оқиға
2026 жылдың сәуір айының ортасы Алғашқы пакеттер бастапқы жариялаушының ауқымында пайда болады: TS-utility fasade, environment және git-config exfiltration.
2026 жылдың мамыр айының басы Гипервизор және ядродан қашып шығуды барлау нұсқасы жарияланды.
2026 жылдың мамыр айының ортасынан аяғына дейін SC3 кросс-репозиторий жазу құрты Shopify-ға бағытталған пайдалы жүктемелермен қатар пайда болады және google-labs-jules[bot] еліктеу. SC4 AES-шифрланған және хост-гейттелген жүктеушілерді енгізеді.
2026 жылдың мамыр айының соңы npm бастапқы жариялаушының ауқымын жояды; пакет атаулары бос қауіпсіздікті сақтайтын орын толтырғыштарға шешіледі.
Сол аптада Оператор бірдей дерлік сыртқы көрініске ауысады және құртты, соның ішінде талдау-инфрақұрылым нұсқасын қайта жариялайды.

Қорғаушылар көші-қонға назар аударуы керек. Бірінші нысанды алып тастау науқанды аяқтаған жоқ немесе тіпті баяулатқан жоқ. Оператор атауы түпнұсқадан бір таңбаға ерекшеленетін параллель нысанды орналастырған және сол апта ішінде жариялауды жалғастырған. Осы жазба кезінде жаңа нысанның ts-форма утилиталары (1.0.0-ден 1.1.0-ге дейінгі нұсқалар), оның ts-жоба-линт (1.0.0 және 1.1.0), және дербес ts-enum-helper (1.0.0) орнатуға болады.

Келісім көрсеткіштері

Төмендегі барлық көрсеткіштер қаптама көзіне қатысты расталды.

түрі Индикатор Ескертулер
Желі (C2) aaronstack[.]com/jules-collect Әрбір буын бойынша бірыңғай жинақтың соңғы нүктесі; JSON телеметриясын және base64-gzip репозиторийінің тарбол бөліктерін қабылдайды.
Желі (SSRF проксиі) http://git@192.168.0.1:8080 Мақсатты ұйым репозиторийлеріне жету үшін пайдаланылатын кеңейтілген git прокси токенінің алдыңғы жағы.
Желі (бұлт) metadata.google.internal/computeMetadata/v1
kubernetes.default.svc
storage.googleapis.com/storage/v1/b
Тек токендерді ұрлау және Kubernetes басқару жазықтығы барлауы үшін талдау-инфрақұрылым нұсқасымен қолданылады.
Identity 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 каталог оқулары Жасанды интеллект агентінің жұмыс кеңістігі орталарын нақты нысанаға алу.
Мінез-құлық sc1-, sc3-, sc4-, s0-vmm-recon Анықтау және іздеу үшін пайдалы оператор анықтаған телеметрия сатысының белгілері.
Бұлттық нысана rare-signer-437603-p9
malysis-* шелек болжамдары
Талдау-инфрақұрылым нұсқасына ендірілген қатты кодталған GCP жобасының идентификаторлары және сақтау-шелек санау үлгілері.
Қаптама пішіні Репозиторий өрісі жоқ TS-утилиталық пакетінің қасбеті Тұрақты науқан үлгісі: зиянды пайдалы жүктемелері ендірілген жалған TypeScript утилита пакеттері postinstall hooks немесе қоса берілген index.js.
sca-құралдары-бағдарламалық жасақтама-композиция-талдау-құралдары
Бағдарламалық жасақтама тәуекелдеріне басымдық беріңіз, оларды жойыңыз және қауіпсіз етіңіз
Тегін аккаунтыңызды алыңыз.
Несие картасы қажет емес.

Бағдарламалық жасақтаманы әзірлеу және жеткізуді қауіпсіз етіңіз

Xygeni өнім жиынтығымен бірге