JulesJacker: Лажен npm црв го имитира Џулс вештачката интелигенција

JulesJacker: Лажен црв со PoC npm кој се претставува како агент на Google, Jules - и го вклучува Sandbox-от кој го анализира

TL; ДР

Еден единствен npm оператор помина шест недели објавувајќи лажни „корисни“ пакети на TypeScript како што се ts-form-utils, ts-project-lint, и ts-enum-helper.

Додека пакетите откриваат мали помагачи за валидација со легитимен изглед, вистинскиот товар се извршува при инсталација или прво барање и врши отпечаток од прст на домаќинот, откривање на организација на GitHub, клонирање на складиште и ексфилтрација на изворниот код.

Малверот конкретно ги таргетира организациите со висока вредност на GitHub, вклучувајќи повеќе Shopify складишта, потоа архивира и ексфилтрира достапни изворни дрвја до централизирана крајна точка на колекцијата.

Како дел од работниот процес за компромис, товарот commitsa датотека назад во складиштата на жртвите додека се претставува како автономен кодирачки идентитет на Google google-labs-jules[bot].

Ја следевме кампањата — именувана ЏулсЏекер — низ повеќе опсези на издавачи и најмалку пет генерации на кориснички податоци, вклучувајќи шифрирани и варијанти со „sandbox“ свест.

Најновата варијанта конкретно ја таргетира инфраструктурата за анализа на малициозен софтвер: се активира само во рамките на аналитичките средини, краде токени за услуги за сметки во облак и ги испитува контролните рамнини на Kubernetes и кофите за складирање во облак.

Примарниот IOC споделен низ сите генерации на товар е крајната точка на собирање aaronstack[.]com/jules-collect.

Тежина: критична.

Нападот: Како функционира

Секој пакет JulesJacker го следи истиот шаблон. пакет.json рекламира бениген помошник на TypeScript со MIT лиценца и без поврзано складиште на изворен код. индекс.js експортира неколку реални, функционални функции - регуларни фрагменти на е-пошта, мапи на enum, табели со правила lint - така што развивачот кој всушност го увезува пакетот гледа веродостојно однесување. Злобата лежи на друго место: во постинсталација кука, или во блок на дното од индекс.js што се извршува во моментот кога модулот е потребен.

Корисните оптоварувања еволуирале низ јасно нумерирани внатрешни фази (операторот ги означува своите телеметриски настани) sc1-, sc3-, sc4-и така натаму), а набљудувањето на таа еволуција е најјасниот начин да се разбере кампањата.

 Генерација 1–2: извидување и кражба на git-config

Најраните пакети беа едноставни крадци на информации. При инсталацијата тие собираа променливи на околината, датотеката на хостови на GitHub CLI и глобалната конфигурација на git (git config –global –list, git remote -v), потоа го ПОСТАВИ пакетот до крајната точка на колекцијата. Ова го воспостави потписот на операторот: насловна приказна за „алатки за валидација на формулари TypeScript“, излезен сигнал до еден домен и вкус за акредитиви на развивачи, наместо за податоци за потрошувачи.

Генерација 3: хипервизорски и кернелни сонди за бегство

Една верзија од средината на кампањата се префрли на напади во инфраструктурата. Наместо да краде конфигурација, изврши извидувачки систем за испитување. AF_VSOCK сокети, virtio MMIO региони, / dev / mem, и ознаки за стврднување на јадрото, па дури и обиди за пад на јадрото предизвикани од sysrq - однесување поврзано со обиди за излез од виртуелна машина или контејнер. Ознаките за телеметрија (s0-vmm-реконструкција, s1-vmm-vsock-fuzz, s2-vmm-mmio, s3-кернел-сонда) ја направи намерата експлицитна. Оваа варијанта јасно имаше за цел cloud-sandbox и serverless-runner средини — вид на ефемерна виртуелна машина што гради и тестира недоверлив код.

Генерација 3 (SC3): црв за пишување во вкрстено складиште

Центарот на гравитација на кампањата стана саморазмножувачки крадец на складишта. При инсталацијата, товарот извршува петстепена временска секвенца:

  • Фаза 0 (~100 ms): отпечаток од прст на домаќинот — име на домаќин, информации за корисникот, идентитет на git.
  • Фаза 1 (~3 s): утврдете на која организација ѝ припаѓа жртвата преку инспекција git remote -v, потоа побарајте хардкодирано ORG_CONFIG табела и тест пристап до репозиториум со git ls-remote — насочувано преку SSRF прокси контролиран од напаѓачот на http://git@192.168.0.1:8080.
  • Фаза 2 (~10 секунди): git клон секое достапно репозиториум во целната листа, tarball и gzip го дрвото, base64-енкодирај го и chunk-ефилтрирај го.
  • Фаза 3 (~45 s): „доказ за пристап“ — клонирање на запишувачко складиште, отфрлање на датотека со име SECURITY-POC.md и commit го со авторот поставен на google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> и пораката chore: update dependency cache, then push to the mainline grand of the victim.

Списокот со хардкодирани цели не е генерички. Набројува повеќе од триесет Shopify репозиториуми по име — Shopify/shopify, Shopify/идентитет, Shopify/наплата, Shopify/трезор, Shopify/тајни, Shopify/инфраструктура, Shopify/.githubи многу други — заедно со организација за тестирање, Арон Стак Барнс, што операторот се чини дека го контролира и го користи како цел за запишување.

Генерација 4 (SC4): шифрирана и заштитена

Најновата варијанта, наменета за развивачи, додава два слоја на избегнување на црвот SC3.

Прво, товарот повеќе не се испраќа како обичен текст. Вистинската логика се наоѓа во AES-256-CBC-енкриптирана блоб-датотека, lib/.perf.dat, со IV во неговите први шеснаесет бајти. Вчитувачот во индекс.js го реконструира клучот за декрипција од споени фрагменти од низи, го дешифрира blob-от и го извршува со нова функција()Дури и имињата на модулите се поделени за да се избегнат статичките скенери — require('крипта' + 'o'), бара('f' + 's').

Второ, е хост-портиран. Една варијанта се дешифрира и работи само кога os.именадомаќин() еднакво devbox or ubuntu-fc-uvm (стандардно microVM на Firecracker) или го содржи поднизот devboxДруга порта врз присуството на .јулс/ работен директориум:

Со други зборови, SC4 товарот е дизајниран да остане неактивен на лаптопот на обичниот развивач и да се разбуди само во рамките на автоматизираниот агент на вештачка интелигенција и околини со песок Операторот всушност сака да направи компромис.

Вклучување на лабораторијата: варијантата за анализа и инфраструктура

Најновиот пакет во кампањата, ts-enum-помошник, воопшто не ги напаѓа програмерите или Shopify. Тоа е постинсталирање.sh се отвора со порта што ја открива играта:

Скриптата не прави ништо освен ако не е поставена променлива на околина специфична за платформата за анализа на малициозен софтвер. Кога е поставена, променливата знае дека работи во песочникот што постои за детонирање и проучување на пакети токму како овој - и контранапаѓа.

Прво го извлекува токенот OAuth на сметката на услугата GCP од серверот за метаподатоци на инстанцата и го ексфилтрира. Потоа, користејќи го тој токен, го пребарува Контролен авион Кубернетес достапно во kubernetes.default.svc:

  • ги наведува ClusterRoleBindings, ClusterRoles и Nodes;
  • сонди, тајни и конфигурациски мапи низ кубе-систем, стандардно, кубе-јавно, kube-node-leaseи именскиот простор за анализа;
  • проблеми со повиците на SelfSubjectAccessReview за точно да се мапира што е дозволено да прави украдениот идентитет.

Конечно, ги принудува имињата на корпите за складирање во облакот на Google изградени од тврдокодиран ID на проект GCP (ретки-потписници-437603-p9) и број на проект, погодување комбинации како што се *-гради, *-артефакти, и неколку мализ- префикси (резултати од мализа, пакети за мализа, скенирања со малализа). Секој код и тело на одговор се евидентираат и се ПОСТАВУВАат назад на истото Џулс-колект крајна точка.

Ова е редок случај на товар од синџирот на снабдување изграден специјално за напад врз сопствената инфраструктура на бранителите. Насловна приказна низ целата кампања - фрагменти од кои се појавуваат во товарите како коментари што го врамуваат однесувањето како „PoC за безбедносно истражување ... вкрстено запишување во репозиториум преку преоптоварен git proxy токен“ - е истото самооправдување, без разлика дали целта за извршување е Shopify монорепо или серверот за метаподатоци на кластерот за анализа.

Временска рамка и миграција на опсегот

„ЏулсЏекер“ не е еднократна операција. Тоа е одржлива операција која преживеала уривање на регистарот едноставно со промена на своето име.

Кога настанот
Средината на април 2026 година Првите пакети се појавуваат во оригиналниот опсег на издавачот: TS-utility facade, environment и git-config exfiltration.
Почетокот на мај 2026 година Објавени се хипервизорот и варијантата за извидување со бегство од јадрото.
Средината до крајот на мај 2026 година Црвот за пишување SC3 во вкрстено складиште се појавува заедно со товарите насочени кон Shopify и google-labs-jules[bot] имитирање. SC4 воведува AES-енкриптирани и хост-портирани вчитувачи.
Крајот на мај 2026 година npm го отстранува оригиналниот опсег на објавувачот; имињата на пакетите се претвораат во празни места за задржување на безбедноста.
Истата недела Операторот мигрира во речиси идентичен опсег и го објавува повторно црвот, вклучувајќи ја и варијантата на аналитичка инфраструктура.

Миграцијата е делот со кој бранителите треба да се согласат. Отстранувањето на првиот нишан не ја заврши кампањата, ниту ја забави. Операторот веќе постави паралелен нишан чие име се разликува од оригиналот за еден знак и продолжи да објавува во истата недела. Во моментот на пишување на ова, новиот нишан... ts-форма-утилс (верзии од 1.0.0 до 1.1.0), неговите ts-проект-lint (1.0.0 и 1.1.0), и самостојниот ts-enum-помошник (1.0.0) остануваат инсталирани.

Индикатори за компромис

Сите индикатори подолу беа потврдени во однос на изворот на пакетот.

тип индикатор забелешки
Мрежа (C2) aaronstack[.]com/jules-collect Единствена крајна точка на колекцијата низ секоја генерација; прима JSON телеметрија и tarball парчиња од base64-gzip репозиториумот.
Мрежа (SSRF прокси) http://git@192.168.0.1:8080 Напред за преоптоварен git proxy токен што се користи за достигнување до репозиториумите на целната организација.
Мрежа (облак) metadata.google.internal/computeMetadata/v1
kubernetes.default.svc
storage.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-енкриптирана blob-датотека со исплатлив товар; IV складирана во првите 16 бајти и клучот реконструиран динамички во index.js.
датотека SECURITY-POC.md Падна и commitвратен назад во складиштата на жртвите со пораката chore: update dependency cache.
датотека scripts/postinstall.sh Затворено на $MALYSIS_ANALYSIS_ID; ја идентификува варијантата таргетирање на анализата и инфраструктурата.
Однесување os.hostname() проверува за devbox / ubuntu-fc-uvm Gating на Sandbox и AI-агентска средина пред декрипција и извршување на корисниот товар.
Однесување .jules/ /app/.jules читања на директориуми Експлицитно таргетирање на работните средини на агентите со вештачка интелигенција.
Однесување sc1-, sc3-, sc4-, s0-vmm-recon Ознаки за телеметриски фази дефинирани од операторот, корисни за откривање и лов.
Цел во облак rare-signer-437603-p9
malysis-* претпоставки за кофи
Хардкодирани идентификатори на проекти на GCP и шеми на набројување на корпи за складирање вградени во варијантата на аналитичка инфраструктура.
Облик на пакувањето Фасада на пакетот TS-utility без поле за репозиториум Доследен шаблон за кампања: лажни пакети за алатки TypeScript со вградени малициозни носивост postinstall hooks или додадено на index.js.
алатки-за-анализа-на-композиции-на-sca-алатки
Дајте приоритет, санирајте и обезбедете ги вашите софтверски ризици
Добијте ја вашата бесплатна сметка.
Не е потребна кредитна картичка.

Обезбедете го вашиот развој и испорака на софтвер

со Xygeni Product Suite