TL, DR
Ганц npm оператор нь хуурамч TypeScript “хэрэглээний” багцуудыг нийтлэхэд зургаан долоо хоног зарцуулсан, тухайлбал ts-form-utils, ts-project-lintБолон ts-enum-helper.
Багцууд нь жижиг, хууль ёсны харагдах баталгаажуулалтын туслагчдыг ил гаргадаг боловч жинхэнэ ачаалал нь суулгах эсвэл эхлээд шаарддаг үед ажиллаж, хост хурууны хээ, GitHub зохион байгуулалтыг нээх, репозиторийг клончлох, эх кодыг зайлуулах үйлдлийг гүйцэтгэдэг.
Хортой програм нь өндөр үнэ цэнэтэй GitHub байгууллагуудыг, түүний дотор олон байгууллагуудыг онилдог. Shopify-ийг репозиторууд, дараа нь хүрэх боломжтой эх модыг архивлаж, төвлөрсөн цуглуулгын төгсгөлийн цэг рүү шүүж гаргадаг.
Буултын ажлын урсгалын нэг хэсэг болгон ачаалал commitGoogle-ийн бие даасан кодчилолын таних тэмдгийг дуурайж, sa файлыг хохирогчийн репозитор руу буцааж оруулдаг google-labs-jules[bot].
Бид кампанит ажлыг хянасан - нэртэй ЖюльсЖакер — олон нийтлэгчийн хамрах хүрээ болон шифрлэгдсэн болон хамгаалагдсан хязгаарлагдмал орчинд ажилладаг хувилбаруудыг оролцуулан дор хаяж таван үеийн ачааллын хүрээнд.
Хамгийн сүүлийн хувилбар нь хортой програм хангамжийн шинжилгээний дэд бүтцийг тусгайлан онилдог: энэ нь зөвхөн шинжилгээний орчин дотор идэвхжүүлдэг, үүлэн мета өгөгдлийн үйлчилгээний дансны жетоныг хулгайлдаг, мөн Kubernetes хяналтын хавтгай болон үүлэн хадгалах савыг шалгадаг.
Бүх ашигтай ачааллын үеийнхний хуваалцсан үндсэн ОУОХ нь цуглуулгын төгсгөлийн цэг юм aaronstack[.]com/jules-collect.
Хүнд байдал: маш чухал.
Довтолгоо: Энэ нь хэрхэн ажилладаг вэ
JulesJacker багц бүр ижил загварыг дагадаг. багц.json MIT лицензтэй, холбоостой эх сурвалжийн сангүй хоргүй TypeScript туслагчийг сурталчилдаг. index.js багцыг импортолж буй хөгжүүлэгч бодитой зан төлөвийг харахын тулд хэд хэдэн бодит, ажиллаж буй функцуудыг экспортлодог - имэйлийн регексүүд, enum map, lint дүрмийн хүснэгтүүд - ингэснээр багцыг үнэхээр импортолж буй хөгжүүлэгч боломжит зан төлөвийг хардаг. Хорон санаа нь өөр газар байдаг: a суулгасны дараах дэгээ, эсвэл доод хэсэгт байрлах блок дотор index.js модуль шаардлагатай мөчид гүйцэтгэгддэг.
Ачаалал нь тодорхой дугаарлагдсан дотоод үе шатуудаар дамжин хөгжсөн (оператор өөрийн телеметрийн үйл явдлуудыг шошголодог) sc1-, sc3-, sc4-гэх мэт), мөн хувьсал бол кампанит ажлыг ойлгох хамгийн тодорхой арга гэдгийг ажиглах.
1-2 үе: тагнуул болон git-config хулгай
Хамгийн анхны багцууд нь энгийн мэдээллийн хулгайчид байсан. Суулгахдаа тэд орчны хувьсагч, GitHub CLI хост файл болон дэлхийн git тохиргоог цуглуулсан (git config –global –list, git remote -v), дараа нь багцыг цуглуулгын төгсгөлийн цэг рүү POST хийсэн. Энэ нь операторын гарын үсгийг тогтоосон: “TypeScript маягтын баталгаажуулалтын хэрэгслүүд”-ийн нүүр хуудасны түүх, ганц домэйн руу чиглэсэн гадагш чиглэсэн дохио, хэрэглэгчийн өгөгдөл гэхээсээ илүү хөгжүүлэгчийн итгэмжлэлийг ашиглах сонирхол.
3-р үе: гипервизор ба цөмийн зугтах зондууд
Кампанит ажлын дунд үеийн нэг хувилбар нь дэд бүтцийн халдлага руу хүчтэй шилжсэн. Тохиргоог хулгайлахын оронд тагнуулын бэхэлгээний шалгалтыг хийсэн. AF_VSOCK сокетууд, virtio MMIO бүсүүд, /dev/mem, мөн цөмийн хатууралтын тугнууд, тэр ч байтугай sysrq-ээр өдөөгдсөн цөмийн ослын оролдлогууд - виртуал машин эсвэл контейнерээс гарах оролдлогуудтай холбоотой зан төлөв. Телеметрийн шошго (s0-vmm-recon, s1-vmm-vsock-fuzz, s2-vmm-mmio, s3-цөмийн датчик) зорилгыг тодорхой болгосон. Энэ хувилбар нь тодорхой зорилготой байсан cloud-sandbox болон сервергүй ажиллуулагч орчин — найдваргүй кодыг бүтээж, шалгадаг түр зуурын виртуал машины төрөл.
3-р үе (SC3): репозитор хоорондын бичих өт
Кампанит ажлын хүндийн төв нь өөрөө тархдаг репозиторын хулгайч болсон. Суулгах үед ачаалал нь таван үе шаттай цаг хугацааны дарааллаар ажилладаг:
- Үе шат 0 (~100 мс): хостыг хурууны хээгээр нээнэ — хостын нэр, хэрэглэгчийн мэдээлэл, git identity.
- Үе шат 1 (~3 сек): хохирогчийг аль байгууллагад харьяалагддагийг шалгах замаар тодорхойлох git remote -v, дараа нь хатуу кодлогдсон файлыг хайгаарай ORG_CONFIG хүснэгт болон туршилтын репозиторт хандах git ls-remote — халдагчийн хяналттай SSRF проксигоор дамжуулан чиглүүлэгдсэн http://git@192.168.0.1:8080.
- Үе шат 2 (~10 секунд): git clone зорилтот жагсаалт дахь хүрч болох бүх репозиторыг tarball болон gzip гэж нэрлээд, үүнийг base64-encode хийж, үүнийг хэсэгчлэн шүүж гаргана.
- Үе шат 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 нэгтгэсэн тэмдэгт мөрийн хэсгүүдээс тайлах түлхүүрийг дахин бүтээж, blob-г тайлж, ажиллуулна шинэ функц()Статик сканнераас зайлсхийхийн тулд модулийн нэрсийг хүртэл хуваасан байдаг — шаарддаг('crypt' + 'o'), шаарддаг('f' + 's').
Хоёрдугаарт, энэ нь хост-хаалттай. Нэг хувилбар нь зөвхөн тайлж, ажиллах үед л ажилладаг. os.hostname() тэнцүү байна хөгжүүлэгчийн хайрцаг or ubuntu-fc-uvm (Firecracker microVM-ийн анхдагч) эсвэл дэд тэмдэгт мөрийг агуулдаг хөгжүүлэгчийн хайрцаг... байгаа үед өөр нэг хаалга .жулес/ ажлын лавлах:
Өөрөөр хэлбэл, SC4 ачаалал нь ердийн хөгжүүлэгчийн зөөврийн компьютер дээр идэвхгүй байхаар зохион бүтээгдсэн бөгөөд зөвхөн автоматжуулсан хиймэл оюун ухаант агент дотор сэрэх зориулалттай. хамгаалагдсан хязгаарлагдмал орчинд оператор үнэндээ буулт хийхийг хүсч байна.
Лабораторийг асаах нь: Шинжилгээ-Дэд бүтцийн хувилбар
Кампанит ажлын хамгийн шинэлэг багц, ts-enum-туслагч, хөгжүүлэгчид эсвэл Shopify руу огт халддаггүй. Энэ postinstall.sh тоглоомыг өгөх хаалгаар нээгдэнэ:
Скрипт нь хортой програм хангамжийн шинжилгээний платформд хамаарах орчны хувьсагчийг тохируулаагүй л бол юу ч хийхгүй. Хэрэв тохируулсан бол ачаалал нь яг үүнтэй адил багцуудыг дэлбэлж, судлах зориулалттай хамгаалагдсан хязгаарлагдмал орчин дотор ажиллаж байгаагаа мэдэж, эсрэг дайралт хийдэг.
Энэ нь эхлээд GCP үйлчилгээний бүртгэлийн OAuth токеныг инстанцийн мета өгөгдлийн серверээс татаж аваад шүүрддэг. Дараа нь уг токеныг ашиглан шүүрддэг. Кубернетесийн удирдлагын онгоц хаягаар хүрч болно kubernetes.default.svc:
- ClusterRoleBindings, ClusterRoles болон Nodes-г жагсаадаг;
- шалгагч под, нууц болон тохиргооны газрын зургууд кубе-систем, Анхдагч байна, кубе-нийт, кубе зангилаа түрээслэх, болон шинжилгээний нэршлийн орон зай;
- Хулгайлагдсан хувь хүн яг юу хийхийг зөвшөөрсөн болохыг газрын зурагт харуулахын тулд SelfSubjectAccessReview дуудлагуудыг ашигладаг.
Эцэст нь энэ нь хатуу кодлогдсон GCP төслийн ID-аас бүтээгдсэн Google Cloud Storage хувингийн нэрийг хүчээр хүчээр ашигладаг (ховор гарын үсэг зурагч-437603-p9) болон төслийн дугаар, гэх мэт хослолуудыг таамаглах *-бүтээлтүүд, *-олдворууд, болон хэд хэдэн өвчин эмгэг- угтварууд (шинжилгээний үр дүн, мализын багцууд, мализын сканнер). Хариу код болон бие бүрийг бүртгэж, буцааж ижил хаягаар илгээнэ. жюль цуглуулга төгсгөлийн цэг.
Энэ бол хамгаалагчдын өөрсдийн дэд бүтцийг довтлох зорилгоор тусгайлан бүтээгдсэн хангамжийн сүлжээний ачааллын ховор тохиолдол юм. Кампанит ажлын туршид гарсан бүхэл бүтэн нүүрний түүх - үүний хэсгүүд нь ачааллын дотор "Аюулгүй байдлын судалгааны PoC ... хэт өргөн хүрээтэй git прокси токеноор дамжуулан репозитор хоорондын бичих" зан үйлийг дүрсэлсэн тайлбар хэлбэрээр гарч ирдэг - ажиллах үеийн зорилт нь Shopify монорепо эсвэл шинжилгээний кластерын мета өгөгдлийн сервер байсан ч өөрийгөө зөвтгөхтэй адил юм.
Хугацааны шугам ба хамрах хүрээний шилжилт
JulesJacker бол нэг удаагийн уналт биш. Энэ нь зүгээр л нэрээ өөрчилснөөр бүртгэлийн устгалыг даван туулсан тогтвортой үйл ажиллагаа юм.
| үед | үйл явдал |
|---|---|
| 2026 оны дөрөвдүгээр сарын дунд үе | Эхний багцууд нь анхны нийтлэгчийн хүрээнд гарч ирнэ: TS-utility façade, environment болон git-config exfiltration. |
| 2026 оны тавдугаар сарын эхээр | Гипервизор болон цөмөөс зугтах тагнуулын хувилбарыг нийтэлсэн. |
| 2026 оны 5-р сарын дунд үеэс сүүл хүртэл | SC3 хөндлөн репозитор бичих өт нь Shopify-д чиглэсэн ачааллын хажууд гарч ирдэг ба google-labs-jules[bot] дуураймал байдал. SC4 нь AES-шифрлэгдсэн болон хост-хаалттай ачаалагчдыг танилцуулж байна. |
| 2026 оны тавдугаар сарын сүүл | npm нь анхны нийтлэгчийн хүрээг арилгадаг; багцын нэрс нь аюулгүй байдлыг хадгалах хоосон орлуулагчдыг тодорхойлдог. |
| Тухайн долоо хоногт | Оператор нь бараг ижил төстэй харагдах хүрээ рүү шилжиж, дүн шинжилгээний дэд бүтцийн хувилбарыг оруулаад өтийг дахин нийтэлдэг. |
Шилжилт хөдөлгөөн бол хамгаалагчдын анхаарах ёстой хэсэг юм. Эхний дуранг устгасан нь кампанит ажлыг дуусгавар болгоогүй эсвэл удаашруулаагүй. Оператор нь нэр нь анхныхаас ганц тэмдэгтээр ялгаатай зэрэгцээ дуранг аль хэдийн байрлуулсан байсан бөгөөд тэр долоо хоногийн дотор үргэлжлүүлэн нийтэлсээр байв. Энэ бичлэгийг бичиж байх үед шинэ дурангийн ts-form-utils (1.0.0-аас 1.1.0 хүртэлх хувилбарууд), түүний ts-төслийн-хэлбэр (1.0.0 болон 1.1.0), мөн дангаараа ts-enum-туслагч (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 | Зөвхөн токен хулгайлах болон 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 | Ачааллын кодыг тайлах болон гүйцэтгэхээс өмнө Sandbox болон хиймэл оюун ухаант агентын орчны хаалт. |
| Зан төлөв | .jules/ болон /app/.jules лавлах уншлага | Хиймэл оюун ухааны агентын ажлын орчныг тодорхой чиглүүлэх. |
| Зан төлөв | sc1-, sc3-, sc4-, s0-vmm-recon | Илрүүлэх болон ан агнахад хэрэгтэй операторын тодорхойлсон телеметрийн үе шатны шошго. |
| Үүлэн зорилтот | rare-signer-437603-p9malysis-* хувингийн таамаглал | Шинжилгээний дэд бүтцийн хувилбарт суулгагдсан хатуу кодлогдсон GCP төслийн танигч болон хадгалах хувингийн тооллогын загварууд. |
| Багцын хэлбэр | TS-хэрэглээний багцын фасад нь репозиторийн талбаргүй | Тогтмол кампанит ажлын загвар: хортой ачаалалтай хуурамч TypeScript хэрэгслийн багцууд postinstall hooks эсвэл хавсаргасан index.js. |




