JulesJacker: תולעת npm מזויפת מתחזה לבינה מלאכותית של ג'ולס

JulesJacker: תולעת npm מזויפת של PoC שמתחזה לסוכן ג'ולס של גוגל - ומפעילה את ארגז החול שמנתח אותו

TL; DR

מפעיל npm יחיד בילה שישה שבועות בפרסום חבילות "תועלת" מזויפות של TypeScript כגון ts-form-utils, ts-project-lint, ו ts-enum-helper.

בעוד שהחבילות חושפות עוזרי אימות קטנים שנראים לגיטימיים, המטען האמיתי מבוצע בעת ההתקנה או הדרישה הראשונה ומבצע טביעות אצבע של המארח, גילוי ארגון GitHub, שכפול מאגרים וחילוץ קוד מקור.

התוכנה הזדונית מכוונת ספציפית לארגוני GitHub בעלי ערך גבוה, כולל מספר רב של Shopify מאגרים, לאחר מכן מאחסן ומסנן עצי מקור נגישים לנקודת קצה מרכזית של אוסף.

כחלק מתהליך העבודה של הפשרה, המטען commitקובץ sa בחזרה למאגרי קורבנות תוך התחזות לזהות הקידוד האוטונומית של גוגל google-labs-jules[bot].

עקבנו אחר הקמפיין - ששמו ג'ולס ג'קר — על פני מספר היקפי מוציאים לאור ולפחות חמישה דורות של מטען, כולל גרסאות מוצפנות ותואמות ל-sandbox.

הגרסה החדשה ביותר מכוונת ספציפית לתשתית ניתוח תוכנות זדוניות: היא מופעלת רק בתוך סביבות ניתוח, גונבת אסימוני שירות של חשבונות מטא-נתונים בענן, וחוקרת מישורי בקרה של Kubernetes ודליים של אחסון ענן.

נקודת הקצה של האיסוף היא ה-IOC העיקרית המשותפת לכל דורות המטענים aaronstack[.]com/jules-collect.

חומרה: קריטית.

ההתקפה: איך זה עובד

כל חבילת JulesJacker עוקבת אחר אותה תבנית. package.json מפרסם עוזר TypeScript שפיר עם רישיון MIT וללא מאגר קוד מקושר. index.js מייצא קומץ פונקציות אמיתיות ועובדות - רגולציות דוא"ל, מפות enum, טבלאות כללי lint - כך שמפתח שמייבא בפועל את החבילה רואה התנהגות סבירה. הזדון נמצא במקום אחר: ב- לאחר ההתקנה וו, או בבלוק בתחתית index.js שמופעל ברגע שהמודול נדרש.

המטענים התפתחו דרך שלבים פנימיים ממוספרים בבירור (המפעיל מתייג את אירועי הטלמטריה שלו בעצמו). sc1-, sc3-, sc4-וכן הלאה), וצפייה באבולוציה הזו היא הדרך הברורה ביותר להבין את הקמפיין.

 דור 1-2: סיור וגניבת git-config

החבילות המוקדמות ביותר היו גנבי מידע פשוטים. בהתקנה הן אספו משתני סביבה, קובץ hosts של GitHub CLI, ואת תצורת git הגלובלית (הגדרות גיט –גלובליות –רשימה, git remote -v), לאחר מכן POST את החבילה לנקודת הקצה של האיסוף. פעולה זו ביססה את חתימת האופרטור: סיפור שער של "כלי עזר לאימות טפסי TypeScript", משואת גישה יוצאת לדומיין יחיד, וחיבה לאישורי מפתח במקום נתוני צרכנים.

דור 3: בדיקות היפר-ויזור ובדיקות בורחת ליבה

גרסה אחת של אמצע הקמפיין הסתובבה באופן חד למתקפות תשתית. במקום לגנוב תצורה, היא ביצעה בדיקת רתמה של סיור. AF_VSOCK שקעים, אזורי MMIO של virtio, / dev / mem, ודגלי הקשחת ליבה, ואפילו ניסיונות קריסת ליבה המופעלת על ידי sysrq - התנהגות הקשורה לניסיונות לפרוץ ממכונה וירטואלית או מיכל. תגי הטלמטריה (s0-vmm-recon, s1-vmm-vsock-fuzz, s2-vmm-mmio, s3-קרנל-בדיקה) הבהיר את הכוונה. גרסה זו נועדה בבירור ל סביבות ענן-ארגז חול וסביבות שרת-ללא-שרת — סוג של מכונה וירטואלית זמנית שבונה ובודקת קוד לא אמין.

דור 3 (SC3): תולעת הכתיבה בין מאגרים צולבים

מרכז הכובד של הקמפיין הפך לגנב מאגרים שמפיץ את עצמו. בעת ההתקנה, המטען רץ רצף מתוזמן בן חמישה שלבים:

  • שלב 0 (~100 אלפיות השנייה): טביעת אצבע של המארח - שם המארח, פרטי המשתמש, זהות git.
  • שלב 1 (~3 שניות): לקבוע לאיזה ארגון שייך הקורבן על ידי בדיקה git remote -v, לאחר מכן חפש קידוד קשיח ORG_CONFIG גישה לטבלה ולמאגר בדיקות עם git ls-remote — מנותב דרך פרוקסי SSRF הנשלט על ידי תוקף ב http://git@192.168.0.1:8080.
  • שלב 2 (כ-10 שניות): שיבוט כל מאגר שניתן להגיע אליו ברשימת היעד, לבצע tarball ו-gzip של העץ, לקודד אותו בבסיס 64, ולסנן אותו ב-chunk-exfiltrate.
  • שלב 3 (~45 שניות): "הוכחת הגישה" - שכפול מאגר הניתן לכתיבה, שחרור קובץ בשם SECURITY-POC.md, ו commit אותו כאשר המחבר מוגדר ל- google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com> וההודעה chore: update dependency cache, לאחר מכן push לענף הראשי של הקורבן.

רשימת היעדים המקודדת אינה גנרית. היא מונה יותר משלושים Shopify מאגרים לפי שם — שופיפיי/שופיפיי, Shopify/זהות, Shopify/חיוב, Shopify/כספת, Shopify/סודות, Shopify/תשתית, Shopify/.github, ורבים אחרים - לצד ארגון בדיקות, אהרון סטאק בארנס, שהאופרטור נראה ששולט בו ומשתמש בו כיעד כתיבה.

דור 4 (SC4): מוצפן ומגודר

הגרסה החדשה ביותר הפונה למפתחים מוסיפה שתי שכבות של התחמקות מעל תולעת SC3.

ראשית, המטען כבר לא נשלח כטקסט רגיל. ההיגיון האמיתי נמצא בתוך בלוב מוצפן AES-256-CBC, lib/.perf.dat, כאשר ה-IV נמצא בשש עשרה הבייטים הראשונים שלו. הטוען ב index.js משחזר את מפתח הפענוח מקטעי מחרוזת משורשרים, מפענח את ה-blob ומפעיל אותו עם פונקציה חדשה ()אפילו שמות המודולים מחולקים כדי להתחמק מסורקים סטטיים - דרוש('קריפטה' + 'o'), דורשים ('f' + 's').

שנית, הוא מבוסס על שרת מארח. גרסה אחת מפענחת ורצה רק כאשר os.hostname() שווים תיבת פיתוח or אובונטו-FC-UVM (ברירת מחדל של microVM של Firecracker) או מכיל את תת-המחרוזת תיבת פיתוחשערים נוספים על נוכחותו של א .ג'ולס/ ספריית עבודה:

במילים אחרות, מטען SC4 נועד להישאר רדום על מחשב נייד של מפתח רגיל ולהתעורר רק בתוך סוכן הבינה המלאכותית האוטומטי. סביבות ארגז חול המפעיל באמת רוצה להתפשר.

הפעלת המעבדה: וריאנט הניתוח-תשתית

החבילה הכי חדשנית בקמפיין, עוזר ts-enum, לא תוקף מפתחים או את Shopify כלל. postinstall.sh נפתח עם שער שחושף את המשחק:

הסקריפט לא עושה דבר אלא אם כן מוגדר משתנה סביבה ספציפי לפלטפורמת ניתוח תוכנות זדוניות. כאשר הוא מוגדר, המטען יודע שהוא פועל בתוך ארגז החול שקיים כדי לפוצץ ולחקור חבילות בדיוק כמו זו - והוא מבצע התקפת נגד.

ראשית, הוא מושך את אסימון ה-OAuth של חשבון השירות של GCP משרת המטא-דאטה של ​​המופע ומוציא אותו החוצה. לאחר מכן, באמצעות אסימון זה, הוא סוקר את מטוס הבקרה של Kubernetes נגיש ב kubernetes.default.svc:

  • מפרט את ClusterRoleBindings, ClusterRoles ו-Nodes;
  • בודק פודים, סודות ומפות תצורה ברחבי מערכת קובייה, ברירת מחדל, קוב-ציבורי, קוב-צומת-חכירה, ומרחב השמות של הניתוח;
  • מבצע קריאות SelfSubjectAccessReview כדי למפות בדיוק מה מותר לעשות לזהות הגנובה.

לבסוף, זה כופה על שמות דליים של אחסון ענן של גוגל שנבנו ממזהה פרויקט GCP מקודד (חתימה נדירה-437603-p9) ומספר הפרויקט, תוך ניחוש שילובים כגון בניית קבצים, *-ממצאים, וכמה מליזה- קידומות (תוצאות מליזה, חבילות-malysis, סריקות מאליזהכל קוד וגוף תגובה נרשם ונשלח בחזרה לאותו ג'ולס קולקט נקודת סיום.

זהו מקרה נדיר של מטען שרשרת אספקה ​​שנבנה במיוחד כדי לתקוף את התשתית של המגנים עצמם. סיפור הכיסוי לאורך כל הקמפיין - שקטעים ממנו מופיעים בתוך המטענים כהערות המתארות את ההתנהגות כ"PoC למחקר אבטחה... כתיבה צולבת-מאגרים באמצעות אסימון פרוקסי git בעל היקף יתר" - הוא אותה הצדקה עצמית, בין אם יעד זמן הריצה הוא מונורפו של Shopify או שרת המטא-דאטה של ​​אשכול הניתוח.

ציר זמן והעברת היקף

JulesJacker אינו מבצע חד פעמי. זוהי פעולה מתמשכת ששרדה הסרה מהרישום פשוט על ידי שינוי שמו.

מתי אירוע
אמצע אפריל 2026 חבילות ראשונות מופיעות תחת היקף המפרסם המקורי: TS-utility facade, environment ו-git-config exfiltration.
תחילת מאי 2026 פורסמה גרסת סיור של היפר-ויזור ו- kernel-escape.
אמצע עד סוף מאי 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 (1.0.0) יישארו ניתנים להתקנה.

אינדיקטורים לפשרה

כל האינדיקטורים שלהלן אושרו כנגד מקור החבילה.

סוּג אינדיקטור הערות
רשת (C2) aaronstack[.]com/jules-collect נקודת קצה אחת של איסוף בכל דור; מקבלת טלמטריה של JSON וגושי tarball של מאגר base64-gzip.
רשת (פרוקסי SSRF) http://git@192.168.0.1:8080 חזית עבור אסימון proxy של git בעל היקף יתר המשמש להגעה למאגרי ארגון היעד.
רשת (ענן) metadata.google.internal/computeMetadata/v1
kubernetes.default.svc
storage.googleapis.com/storage/v1/b
משמש רק את גרסת תשתית הניתוח עבור גניבת אסימונים וסיור משטח בקרה של Kubernetes.
זהות 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-utility ללא שדה מאגר תבנית קמפיין עקבית: חבילות שירות מזויפות של TypeScript עם מטענים זדוניים מוטמעים בתוכן postinstall hooks או צורפו ל index.js.
כלי SCA לניתוח קומפוזיציה - תוכנה
תעדוף, תיקון ואבטחת סיכוני התוכנה שלך
קבל את החשבון החינמי שלך.
אין צורך בכרטיס אשראי.

אבטחו את פיתוח ואספקת התוכנה שלכם

עם חבילת המוצרים Xygeni