תולעת שי-חולוד מיני
גורם האיום המכונה TeamPCP נקשר לקמפיין מתוחכם של מתקפות שרשרת אספקה המכוון לחבילות npm ו-PyPI הנמצאות בשימוש נרחב הקשורות ל-TanStack, UiPath, Mistral AI, OpenSearch, Guardrails AI ומספר מערכות אקולוגיות אחרות. המבצע, הקשור לקמפיין הנוזקה המתפתח Mini Shai-Hulud, מדגים הסלמה משמעותית בניצול לרעה של שרשרת אספקה של תוכנה וטכניקות פגיעה מונעות זהות.
חוקרים זיהו שחבילות npm זדוניות שונו כך שיכללו רכיב JavaScript מעורפל בשם router_init.js. מטען זה מאפיין סביבות נגועות ופורס תוכנת גונב אישורים מתקדמת המכוונה לספקי ענן, ארנקי מטבעות קריפטוגרפיים, כלי פיתוח בינה מלאכותית, פלטפורמות העברת הודעות, מערכות CI/CD וסביבות GitHub Actions. נתונים שסוננו מועברים בעיקר לדומיין filev2.getsession.org.
השימוש בתשתית Session Protocol מדגיש ניסיון מכוון להתחמק מבקרות אבטחה ארגוניות. מכיוון שהדומיין שייך לפלטפורמת העברת הודעות מבוזרת המתמקדת בפרטיות, סביר פחות שהוא ייחסם על ידי הגנות רשת מסורתיות. כשיטת חילוץ משנית, נתונים מוצפנים מועברים למאגרים הנשלטים על ידי תוקפים דרך ממשק ה-API של GitHub GraphQL באמצעות אסימוני אימות גנובים של GitHub תחת זהות המחבר claude@users.noreply.github.com.
תוכן העניינים
מנגנוני התמדה והרחבת גניבת אישורים
התוכנה הזדונית מציגה מספר יכולות מעקב והתמדה שנועדו לשמור על גישה ארוכת טווח לסביבות פיתוח פגועות. hooks להתמדה (persistence hooks) נוצרים בתוך Claude Code ו-Microsoft Visual Studio Code, מה שמאפשר לתוכנה הזדונית לשרוד אתחול המערכת ולהפעיל אותה מחדש באופן אוטומטי בכל פעם ש-IDEs נפתחים.
בנוסף, שירות gh-token-monitor נפרס כדי לנטר ולחלץ מחדש טוקנים של GitHub באופן רציף. שני זרימות עבודה זדוניות של GitHub Actions מוזרקות גם הן למאגרים שנפרצו. זרימות עבודה אלו מסדרות סודות מאגרים בפורמט JSON ומעליות את הנתונים לנקודת הקצה החיצונית api.masscan.cloud.
הפגיעה האחרונה ב-TanStack שונה באופן משמעותי מאירועי שרשרת אספקה קודמים. במקום להסתמך על hook preinstall, התוקפים הטמיעו קובץ JavaScript זדוני ישירות לתוך קבצי tarball של חבילות תוך כדי הוספת תלות אופציונלית המקושרת לחבילה המתארחת ב-GitHub. תלות זו מכילה hook prepare lifecycle hook שמבצע את המטען דרך סביבת זמן הריצה של Bun.
חבילות Mistral AI שנדבקו בטרויאנים אימצו אסטרטגיית הדבקה ישנה יותר על ידי שינוי קובץ ה-package.json באמצעות וו preinstall שקורא ל-node setup.mjs. תהליך זה מוריד את Bun ומפעיל את אותה תוכנה זדונית גונבת אישורים.
CVE-2026-45321 וניצול לרעה של פרסום מהימן
הפריצה של TanStack אותרה רשמית כ-CVE-2026-45321 וקיבלה ציון CVSS קריטי של 9.6. חוקרים אישרו כי 42 חבילות ו-84 גרסאות בתוך המערכת האקולוגית של TanStack הושפעו.
ניתוח הפעולה גילה כי הפגיעה מקורה במתקפת GitHub Actions משורשרת, שניצלה את הטריגר pull_request_target, הרעלת מטמון של GitHub Actions, וחילוץ אסימוני OIDC בזמן ריצה מרצים של GitHub Actions. על פי הדיווחים, התוקפים הציגו מטענים זדוניים באמצעות commits יתומים ב-GitHub forks לפני שהחדירו אותם ל-tarballs של חבילות npm. לאחר מכן, התוקפים חטפו זרימות עבודה לגיטימיות של TanStack/נתב כדי לפרסם חבילות שנפגעו עם אישורי מקור SLSA תקפים.
התפתחות זו מסמנת הסלמה היסטורית במתקפות שרשרת אספקה של תוכנה. החבילות הזדוניות נשאו חתימות מקור תקפות של SLSA Build Level 3, מה שהופך אותה לתולעת ה-npm המתועדת הראשונה המסוגלת להפיץ חבילות זדוניות עם אישורי בנייה אותנטיים. קמפיין הנוזקה התרחב לאחר מכן מעבר ל-TanStack והתפשט למערכות אקולוגיות המתוחזקות על ידי UiPath, DraftLab ומפתחים אחרים.
הפעולה ניצלת לרעה באופן חמור זרימות עבודה של פרסום מהימנות. במקום לגנוב ישירות אישורי npm, קוד הנשלט על ידי תוקף שרץ בתוך צינורות CI/CD מהימנים ניצל הרשאות OIDC כדי ליצור אסימוני פרסום קצרי מועד במהלך תהליך הבנייה. זה אפשר לפרסם חבילות זדוניות דרך צינורות שחרור לגיטימיים תוך עקיפת אמצעי אימות קונבנציונליים.
התנהגות תולעת מתפשטת עצמית מעוררת אזעקה
אחד ההיבטים המסוכנים ביותר של קמפיין מיני שי-חולוד הוא מודל ההתפשטות דמוי התולעת שלו. הנוזקה מחפשת באופן פעיל אחר טוקנים npm הניתנים לפרסום שתצורתם נקבעה עם bypass_2fa=true, מונה חבילות המתוחזקות על ידי המפתח הפגוע, ומחליפה טוקנים של OIDC ב-GitHub עבור טוקנים פרסום לפי חבילה. מנגנון זה מאפשר לנוזקה להתפשט לרוחב על פני מערכות אקולוגיות של חבילות מבלי להסתמך על טכניקות מסורתיות של גניבת אישורים.
ההתקפה ניצלה גם תצורות אמון ברמת המאגר בתוך מודל המפרסם המהימן OIDC של GitHub. מכיוון שאמון הוענק באופן רחב ברמת המאגר במקום להיות מוגבל לענפים מוגנים ולקבצי זרימת עבודה ספציפיים, פעולות זרימת עבודה זדוניות שהופעלו על ידי commits יתומים יכלו לבקש אסימוני פרסום לגיטימיים של npm.
יכולת מטרידה נוספת כרוכה בפריסה של "מתג איש מת". הנוזקה מתקינה סקריפט מעטפת שסורק שוב ושוב את נקודת הקצה api.github.com/user כל 60 שניות כדי לקבוע האם אסימוני npm שנוצרו על ידי התוקף נותרו פעילים. אסימונים אלה נושאים את התיאור המאיים IfYouRevokeThisTokenItWillWipeTheComputerOfTheOwner.
אם מגנים מבטלים את האסימון דרך לוח המחוונים של npm, הנוזקה משיקה שגרה הרסנית המבצעת rm -rf ~/, והופכת למעשה את הזיהום לנוזקת מחיקה. התנהגות תוקפנית זו מצביעה על התפתחות משמעותית בטקטיקות המבצעיות של TeamPCP ומדגימה תחכום גובר בשיטות כפייה להתמדה. לכן, מומלץ לצוותי אבטחה לבודד וליצור תמונה של מערכות נגועות לפני ביטול אישורי npm שנפגעו.
חבילות מושפעות והשפעה מתרחבת על המערכת האקולוגית
הקמפיין השפיע על יותר מ-170 חבילות ב-npm וב-PyPI, המהוות יחד למעלה מ-518 מיליון הורדות. החוקרים זיהו גם לפחות 400 מאגרים שנוצרו באמצעות אישורים גנובים, כולם מכילים את הביטוי 'Shai-Hulud: Here We Go Again'.
החבילות המושפעות כוללות:
guardrails-ai@0.10.1 (PyPI)
mistralai@2.4.6 (PyPI)
פרויקט-opensearch/opensearch@3.5.3, 3.6.2, 3.7.0, 3.8.0
@squawk/mcp@0.9.5
@squawk/weather@0.5.10
@squawk/flightplan@0.5.6
@tallyui/connector-medusa@1.0.1, 1.0.2, 1.0.3
@tallyui/connector-vendure@1.0.1, 1.0.2, 1.0.3
הנוזקה משתמשת גם בערוצי חילוץ מיותרים מרובים. בנוסף לתשתית Session Protocol ו-dead drops של GitHub, אישורים גנובים מועברים דרך הדומיין git-tanstack.com, הדומיין המקושר ל-typosquatting.
תוכנה זדונית של PyPI מציגה לוגיקה הרסנית עם גיאו-גדר
גרסאות הנוזקה מבוססות פייתון הקשורות לחבילות הזדוניות Mistral AI ו-Guardrails AI שונות באופן מהותי ממטעני JavaScript המופצים דרך npm. חבילת mistralai PyPI שנפרצה מורידה גונב אישורים מהמארח המרוחק 83.142.209.194.
חוקרים גילו כי נוזקת Python מכילה לוגיקה מודעת למדינה שנועדה למנוע ביצוע בסביבות דוברות רוסית. היא כוללת גם מנגנון הרסני עם גיאו-גדר שמציג הסתברות של אחד לשש להפעלת הפקודה rm -rf / אם נראה שהמערכת הנגועה ממוקמת בישראל או באיראן.
התנהגות זו מדגימה התפתחות מדאיגה לעבר פריסת מטען הרסני מודעת לאזור בתוך מערכות אקולוגיות של חבילות בקוד פתוח.
האיום הגובר של מתקפות שרשרת אספקה מונעות זהות
קמפיין מיני שי-חולוד משקף טרנספורמציה רחבה יותר במתקפות שרשרת אספקה מודרניות. במקום להתמקד אך ורק בפריצת חבילות, גורמי איום מכוונים יותר ויותר לזהויות CI/CD מהימנות, זרימות עבודה של פרסום וצנרת אוטומציה מבוססת ענן.
ברגע שתוקפים מקבלים גישה לתשתית פרסום תוכנה, מערכת הפיתוח עצמה הופכת למנגנון הפצת תוכנות זדוניות. מכיוון שפעולות זדוניות רבות מתרחשות באמצעות זרימות עבודה לגיטימיות, אימותים מהימנים ומערכות שחרור אותנטיות, בקרות אבטחה מסורתיות עלולות להיכשל בזיהוי התנהגות זדונית.
מאפיינים עיקריים המגדירים את הדור החדש של מתקפות שרשרת האספקה כוללים:
- ניצול לרעה של פרסום מהימן ומנגנוני חילופי אסימוני OIDC
- הפצה באמצעות זרימות עבודה ומערכות בנייה לגיטימיות של CI/CD
- שימוש באישורי SLSA תקפים כדי להסוות חבילות זדוניות
- פעולות חילוץ אישורים ושמירה רב-ערוציות
- מנגנוני תגמול הרסניים שנועדו להפחיד את המגינים
הרחבת הקמפיין לתחום כלי בינה מלאכותית, אוטומציה ארגונית, תשתיות חיפוש, פיתוח ממשק משתמש, כלים הקשורים לתעופה ומערכות אקולוגיות של CI/CD מדגימה עד כמה שרשראות אספקה של תוכנה הפכו להיות קשורות זו בזו. ניטור התנהגותי במהלך התקנת חבילות וביצוע בנייה הופך כעת קריטי יותר ויותר לגילוי איומים שנראים לגיטימיים במבט ראשון.