[ ARTICLE · 18.07.2026 ]

19 דקות, 140 חבילות: איך האקרים צפון קוריאנים הפכו מסגרת AI פופולרית לנשק גניבת קריפטו

בעולם התקיפות על שרשרת האספקה של קוד פתוח, מהירות היא לרוב מה שמפריד בין אירוע מוגבל לאסון רחב היקף. במקרה של Mastra, מסגרת קוד פתוח שהפכה לאחת הבחירות הפופולריות ביותר בקרב מפתחים הבונים סוכני AI, המהירות הזו הייתה קיצונית: לפי ניתוח טכני שפרסמה מיקרוסופט, כל התהליך — מפרסום גרסה נגועה ועד שהמערכות הפנימיות של החברה זיהו דפוס פרסום חריג — ארך כ־19 דקות בלבד. בפרק הזמן הקצר הזה הספיקו התוקפים לפרסם למעלה מ־140 חבילות זדוניות תחת ההיקף mastra ו־@mastra, כולן עם תלות נסתרת אחת משותפת.

מה קרה בפועל: מחשבון גנוב לפרסום זדוני

מיקרוסופט מתארת כיצד התוקפים השיגו שליטה על חשבון npm של מתחזק בשם ehindero, שהחזיק בהרשאות פרסום על פני כל היקף החבילות של הפרויקט. הדגל האדום הראשון שהוביל לחשיפה היה דווקא פרוזאי: גרסה 1.13.1 של mastra פורסמה ישירות מהחשבון, תוך שימוש בכתובת דוא"ל אנונימית של שירות Tutamail, ולא — כפי שנהוג בפרויקט — דרך צינור האינטגרציה הרציפה הרשמי ב־GitHub Actions. הפרסום החריג הזה עורר את תשומת לבן של מערכות הניטור של מיקרוסופט. במקביל, תחת חשבון נפרד בשם sergey2016, שגם הוא נרשם עם כתובת דוא"ל אנונימית, פורסמה החבילה easy-day-js — טיפוסקוואט מכוון של הספרייה הנפוצה dayjs, שנצרכת ב־57,251,792 הורדות בשבוע לפי נתוני npm.

התזמון: גרסה נקייה, ואז המטען הזדוני

התוקפים פעלו בשלבים כדי להימנע מחשד מיידי. ב־16 ביוני בשעה 07:05 UTC פורסמה easy-day-js@1.11.21, שהכילה קוד dayjs לגיטימי בלבד וללא כל סקריפט postinstall — גרסת "הכשרה" שנועדה כנראה להיראות תמימה למי שבודק את החבילה בשלב מוקדם. רק למחרת, ב־17 ביוני בשעה 01:01 UTC, פורסמה הגרסה 1.11.22, שבה נוסף המטען הזדוני. מרגע שגרסה זו נמשכה על ידי מפתח או על ידי תהליך CI/CD כלשהו שהתקין את mastra ותלויותיו, המנגנון הזדוני החל לפעול באופן אוטומטי — ללא צורך בכל פעולה נוספת מצד הקורבן.

מה בדיוק עשה המטען הזדוני

לפי הניתוח הטכני, סקריפט בשם setup.cjs ביצע רצף פעולות מדויק: תחילה כיבה את אימות תעודות ה־TLS על ידי הגדרת המשתנה NODE_TLS_REJECT_UNAUTHORIZED לערך '0', כדי לאפשר תקשורת חופשית עם שרתי הפיקוד גם אם הרשת חוסמת חיבורים לא מאומתים. לאחר מכן הטמיע סמנים בתיקיות זמניות, פנה לשרת פיקוד ובקרה בכתובת 23.254.164[.]92:8000 כדי למשוך תשלובת שלב שני, שמר אותה תחת שם קובץ אקראי, והריץ אותה כתהליך Node.js נסתר לחלוטין וללא חלון גלוי.

השלב הבא כלל הזרקת קוד רפלקטיבית של .NET ויצירת מנגנוני התמדה שפעלו בווריאציות נפרדות עבור Windows, macOS ו־Linux — כלומר, לא מדובר בכלי שנועד רק לתחנת עבודה אחת אלא בתשתית מתקפה מולטי־פלטפורמית מלאה. עצם ההשקעה בגרסאות נפרדות לשלוש מערכות הפעלה שונות מעידה על רמת תחכום ותכנון שחורגת בהרבה מהתקפות טיפוסקוואט אופורטוניסטיות, שברוב המקרים מסתפקות בגניבת מפתחות API או פרטי גישה בודדים ולא בהקמת תשתית ריגול מלאה.

מה חיפשו: 166 ארנקי קריפטו והיסטוריית גלישה

המטרה הסופית של הפעולה הייתה כלכלית ולא ריגולית. התוכנה הזדונית הכילה רשימה מוגדרת מראש של 166 מזהי הרחבות דפדפן של ארנקי קריפטו — בהן MetaMask, Phantom, Coinbase Wallet, Binance Wallet ו־TronLink — וסרקה מכונות נגועות אחר נוכחותן, לצד איסוף היסטוריית גלישה, רשימת תהליכים פעילים ואפליקציות מותקנות.

חבילות mastra הנגועות נצרכות בכ־8 מיליון הורדות שבועיות, כך שכל סביבת פיתוח או צינור CI/CD שהריץ npm install או npm update בחלון הזמן הרלוונטי נחשף לסיכון — לאו דווקא רק מפתחים שמימשו קוד סוכני AI בעצמם, אלא כל מי שהחזיק בתלות עקיפה כלשהי בחבילה הנגועה. זו בדיוק העוצמה של תקיפת שרשרת אספקה: הקורבן בפועל אינו בהכרח מי שהתקין את החבילה במודע, אלא כל מי שנמצא איפשהו במורד עץ התלויות שלה, גם בלי לדעת שהחבילה הזו קיימת אצלו.

מי מאחורי המתקפה: Sapphire Sleet וההיסטוריה שלה

מיקרוסופט מציינת כי היא מייחסת את הפעילות בביטחון גבוה ל־Sapphire Sleet, שחקן מדינתי צפון קוריאני שממוקד בעיקר בסקטור הפיננסי — כולל ארגוני קריפטו, הון סיכון ובלוקצ'יין — ומוכר בקהילת המודיעין גם בשמות APT38, BlueNoroff, Stardust Chollima ו־TA444. המניע המרכזי של הקבוצה מתואר כגניבת ארנקי קריפטו לצורך יצירת הכנסה, מה שמתיישב היטב עם הבחירה הממוקדת ב־166 סוגי ארנקים. לא מדובר באירוע מבודד: אותה קבוצה מיוחסת גם למתקפת שרשרת אספקה קודמת על axios, ספריית ה־HTTP הנפוצה ביותר בעולם ה־JavaScript, שהתרחשה כחודשיים קודם לכן, באפריל 2026. מיקרוסופט מציינת כי זהו המקרה הראשון המתועד שבו נתפס גורם מדינתי מריץ מתקפת שרשרת אספקה המונית על npm — לא ניסיון תקיפה ממוקד וזעיר, אלא הרעלה מתוזמנת של עשרות חבילות בבת אחת.

חלק מגל רחב יותר, לא מקרה בודד

מתקפת Mastra אינה מבודדת בנוף האקוסיסטם של npm ביוני–יולי 2026. באותה תקופה תועדה גם פריצה לחשבונות שפגעה בלפחות 32 חבילות תחת מרחב השם @redhat-cloud-services, ובתחילת יולי דווח על מתקפת שרשרת אספקה שפגעה בחבילות jscrambler ובתוספים נלווים. דוחות ענף מציינים כי מעל 99% מהתוכנה הזדונית שאותרה בקוד פתוח ב־2025 נחתה דווקא על npm, לא על PyPI, Maven Central, NuGet או Hugging Face — עדות לכך שהיקף השימוש העצום ברפוזיטורי הזה הפך אותו ליעד המרכזי של תוקפים שמחפשים אפקט מכפיל: השתלטות על נקודה אחת שמזהמת אלפי פרויקטים במורד הזרם.

מה זה אומר למי שבונה על מסגרות AI קוד פתוח

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

מקורות

נקודות עיקריות

  • תוקפים השתלטו על חשבון מתחזק npm וניצלו אותו לפרסום גרסאות זדוניות תוך כ־19 דקות
  • החבילה הזדונית easy-day-js הייתה טיפוסקוואט של ספריית dayjs הנפוצה, עם למעלה מ־57 מיליון הורדות שבועיות
  • יותר מ־140 חבילות בהיקף mastra ו־@mastra נגועות, עם כ־8 מיליון הורדות שבועיות משולבות
  • סקריפט postinstall כיבה אימות TLS, יצר קשר עם שרת פיקוד ובקרה והריץ תהליך נסתר
  • התוכנה הזדונית חיפשה במחשב 166 סוגי הרחבות דפדפן של ארנקי קריפטו, כולל MetaMask ו־Coinbase Wallet
  • מיקרוסופט מייחסת את המתקפה בביטחון גבוה ל־Sapphire Sleet, קבוצה צפון קוריאנית המוכרת גם כ־APT38 ו־BlueNoroff
  • מדובר במקרה הראשון המתועד שבו מדינה מריצה מתקפת שרשרת אספקה המונית על npm

שאלות נפוצות

מה זו Mastra ולמה המתקפה עליה משמעותית?

Mastra היא מסגרת קוד פתוח פופולרית לבניית סוכני AI, המשמשת מפתחים רבים ליצירת אפליקציות מבוססות מודלי שפה. השתלטות על חבילה בהיקף שלה מסכנת לא רק את מי שמתקין אותה ישירות, אלא גם כל שרשרת CI/CD שבה היא רצה, כולל צינורות בנייה של מוצרי AI נוספים.

איך התוקפים חדרו לחבילה מלכתחילה?

התוקפים השתלטו על חשבון npm של מתחזק בשם ehindero, שהחזיק בהרשאות פרסום על כל היקף @mastra, ופרסמו ממנו גרסה חדשה תוך שימוש בכתובת דוא"ל אנונימית של שירות Tutamail — במקום דרך צינור ה־CI/CD הרשמי מ־GitHub Actions, מה שהיה אמור להוות דגל אדום.

מה עשתה בפועל התוכנה הזדונית לאחר ההתקנה?

סקריפט postinstall בשם setup.cjs כיבה את אימות תעודות ה־TLS, יצר קשר עם שרת פיקוד ובקרה, הוריד תשלובת שלב שני ששמרה בשם קובץ אקראי, והריץ אותה כתהליך Node.js נסתר ומנותק לחלוטין ממסוף המשתמש, עם יכולות זיהוי מערכת הפעלה והחדרת קוד.

מי אחראי למתקפה?

מיקרוסופט מייחסת את הפעילות בביטחון גבוה ל־Sapphire Sleet, שחקן מדינתי צפון קוריאני המוכר גם כ־APT38, BlueNoroff, Stardust Chollima ו־TA444, המתמקד בעיקר בגניבת נכסי קריפטו מהסקטור הפיננסי.

איך מפתחים יכולים להגן על עצמם ממתקפות דומות?

מומלץ להריץ npm install עם הדגל ignore-scripts כברירת מחדל בסביבות CI, לנעול (pin) גרסאות ידועות כתקינות במקום להתקין תמיד את הגרסה העדכנית ביותר, ולסרוק node_modules ו־package-lock.json אחרי כל התקנה בעקבות דיווח על חבילה חשודה.