- תוקף פרץ לחשבון ה-npm של המתחזק הראשי של Axios ושחרר גרסאות 1.14.1 ו-0.30.4 עם תלות רפאים, plain-crypto-js, אשר פרסה RAT חוצה פלטפורמות במהלך ההתקנה.
- הנוזקה יצרה קשר עם שרת C2 (sfrclak[.]com) והורידה מטענים ספציפיים עבור Windows, macOS ו-Linux, תוך ביצוע סיור מערכתי, תחזוקת משואות תקופתיות, ובמקרים מסוימים, ביצעה יצירת נוכחות עקבית.
- ההתקפה, שיוחסה על ידי גוגל וחוקרים אחרים לשחקן הצפון קוריאני UNC1069, שילבה חלון חשיפה של כשלוש שעות עם קמפיין הנדסה חברתית מתוחכם נגד מתחזק האתר במטרה לגנוב את פרטי הגישה שלו.
- ארגונים שהצליחו להתקין את הגרסאות המושפעות חייבים להתחייב לנקוט פעולה, לחפש אחר תקלות RAT, לסובב אישורים, להצמיד גרסאות מאובטחות של Axios ולחזק את שרשרת האספקה, CI/CD ובקרות ניהול התלות שלהם.
קהילת פיתוח JavaScript חוותה זה עתה אחת מאותן הפחדות שגורמות לכם לחשוב מחדש עד כמה אתם בוטחים בתלויות שלכם, כפי שמודגם על ידי בעיות פגיעות בספריות . Axios, אחת מספריות ה-HTTP הנפוצות ביותר במערכת האקולוגית, עברה מניפולציה ב-npm כדי להפיץ טרויאן לגישה מרחוק (RAT) דרך גרסאות שנראו לגיטימיות. התקרית נמשכה רק כמה שעות, אך היא הבהירה ששרשרת האספקה של התוכנה תלויה על חוט דק בהרבה ממה שרבים חשבו.
הבעיה הרצינית אינה רק שהתוקפים הצליחו להחדיר תוכנות זדוניות לחבילה שהורדה עשרות או מאות מיליוני פעמים בשבוע. הבעיה האמיתית היא שהם עשו זאת על ידי חטיפת חשבון ה-npm של מנהל המערכת הראשי, פרסום גרסאות "רשמיות" שנראו תקינות ולא נגעו בשורה אחת מקוד המקור של Axios . כל ההתנהגות הזדונית התגוררה בתלות רפאים שתוכננה במיוחד עבור ההתקפה.
כיצד נוצרה המחויבות של Axios ל-npm
כדי להבין את גודל האירוע, עלינו להתחיל בנקודת הכניסה. התוקף הצליח להשתלט על חשבון ה-npm של "jasonsaayman", המתחזק הראשי של Axios, ושינה את כתובת הדוא"ל המשויכת לכתובת בשליטתו , המאוחסנת ב-Proton Mail. מאותו רגע ואילך, הייתה להם יד חופשית לפרסם גרסאות חדשות של החבילה כאילו היו המתחזקים.
באמצעות אישורים אלה, הוא העלה שתי גרסאות זדוניות של Axios: 1.14.1 ו-0.30.4 , המכסות את שני הענפים העיקריים של הפרויקט. ההעלאות בוצעו בהפרש של 39 דקות בלבד, ולפי הניתוח של StepSecurity, בוצעו ישירות מ-npm באמצעות אסימון קלאסי בעל חיים ארוך, תוך עקיפה מוחלטת של צינור CI/CD הרגיל המבוסס על GitHub Actions.
שמונה עשרה שעות לפני המתקפה הסופית, הגורם כבר פרסם גרסה "נקייה" הקשורה לתלות הזדונית ברישום npm . שלב מקדים זה שימש ליצירת היסטוריה ולמניעת הפעלת בדיקות אוטומטיות מסוימות כאשר הופיעה חבילה חדשה לחלוטין בזמן המתקפה.
מה שמרשים הוא שהתוקפים לא שינו את קוד המקור של Axios או ביצעו שינויים גלויים כלשהם במאגר GitHub . למעשה, לגרסאות 1.14.1 ו-0.30.4 לא היו commits או תגים תואמים ב-GitHub; הם היו קיימים רק ב-npm. ההבדל העיקרי היה בקובץ התלות של החבילה, שפורסם ברישום.
Axios, בנסיבות רגילות, מצהיר רק על שלוש תלויות: follow-redirects, form-data ו-proxy-from-env . עם זאת, בגרסאות שנפגעו, הופיעה תלות רביעית, כזו שלא הייתה קיימת בעבר בפרויקט: plain-crypto-js, גרסה 4.2.1. ספריית פנטום זו לא הייתה בשימוש בשום מקום בבסיס הקוד של Axios, אך היא כללה סקריפט לאחר ההתקנה שרץ אוטומטית בעת התקנת החבילה עם npm, pnpm או כלים דומים.
plain-crypto-js: תלות הפנטום שנפרסה על ידי ה-RAT
המפתח למתקפה טמון בתלות נוספת זו. plain-crypto-js פורסם ב-npm על ידי משתמש בשם "nrwise", גם הוא עם כתובת דוא"ל של Proton Mail, ומטרתו היחידה הייתה להריץ סקריפט מעורפל לאחר ההתקנה ב-Node.js (setup.js) . סקריפט זה שימש כ-dropper, כלומר, כמתקין ראשוני עבור השלב השני של הנוזקה.
בעת התקנת Axios באחת מהגרסאות המורעלות שלו, מחזור החיים שלאחר ההתקנה של npm הפעיל אוטומטית את קוד plain-crypto-js ללא כל פעולה מיוחדת שנדרשה מצד המפתח . ה-dropper התחבר לשרת פקודה ובקרה (C2) פעיל בתחום sfrclakcom, מאזין לפורט 8000, והוריד מטען ספציפי למערכת ההפעלה של המכונה המושפעת; ניתן לזהות התנהגות זו באמצעות ניתוח תעבורת רשת.
חוקרים ב-StepSecurity ובצוותי ניתוח אחרים מתארים התנהגות זהירה מאוד. לאחר ביצוע המטען הזדוני, ה-dropper הסיר את עקבותיו: הוא מחק את סקריפט ה-postinstall, החליף את קובץ ה-package.json בגרסה "נקייה", והשאיר קובץ node_modules שנראה במבט ראשון לא מזיק . בדרך זו, בדיקה ידנית שלאחר מכן לא מצאה את הקוד הזדוני ישירות בתוך Axios.
כדי לזהות את המניפולציה, הרמז האמין היחיד היה בקבצי הנעילה (package-lock.json, pnpm-lock.yaml, yarn.lock) ובנוכחותן של גרסאות ספציפיות: axios 1.14.1 או 0.30.4 ו-plain-crypto-js 4.2.1, בנוסף לשתי גרסאות של אותה חבילה עם מספרי ביניים (4.2.0, 4.2.2) המקושרים בכמה ניתוחים. Socket, מצידה, זיהתה מאוחר יותר שאותה תוכנה זדונית הופצה גם דרך החבילות @shadanai/openclaw (גרסאות שונות 2026.3.xx) ו-@qqbrowser/openclaw-qbot (0.0.130), וטכניקות אבטחה כמו honeypots יכולות גם לסייע בזיהוי קמפיינים דומים.
RAT חוצה פלטפורמות: Windows, macOS ו-Linux באור הזרקורים
לאחר ביצוע הסקריפט setup.js, הוא שימש כמתאם המסוגל לזהות את מערכת ההפעלה ולעקוב אחר נתיב התקפה ספציפי לפלטפורמה . הקמפיין היה בבירור מוכן מראש: לפי StepSecurity, לתוקפים היו שלושה מטענים נפרדים שהורכבו מראש, אחד לכל מערכת.
במערכות macOS, תהליך שלאחר ההתקנה הפעיל AppleScript שהוריד קובץ בינארי שעבר טרויאניזציה משרת sfrclakcom:8000 . קובץ בינארי זה נשמר בנתיב /Library/Caches/com.apple.act.mond, ההרשאות שלו הותאמו כדי להפוך אותו לניתן להפעלה, ולבסוף, הוא הופעל ברקע באמצעות /bin/zsh. לאחר שה-RAT פעל, ה-AppleScript עצמו נמחק כדי לסבך עוד יותר את הניתוח הפורנזי.
במחשבי Windows, התוכנה הזדונית איתרה את קובץ PowerShell הבינארי של המערכת, העתיקה אותו ל-%PROGRAMDATA%\wt.exe כדי להסוות אותו כטרמינל Windows, ויצרה VBScript זמני . לאחר מכן, VBScript זה יצר קשר עם שרת C2 כדי להוריד סקריפט PowerShell RAT נוסף, הפעיל אותו ולאחר מכן מחק את הקובץ שהורד. יתר על כן, גרסת Windows יצרה את קובץ %PROGRAMDATA%\system.bat עם שגרת הורדה שאפשרה לתוכנה הזדונית לאחזר את עצמה בכל כניסה והוסיפה מפתח ביצוע לרישום Windows כדי להבטיח הישארות.
בלינוקס ובמערכות דמויות יוניקס אחרות מלבד macOS, ה-dropper השתמש ב-execSync של Node.js כדי להפעיל פקודת מעטפת שהורידה סקריפט Python מ-sfrclakcom, שמרה אותו בשם /tmp/ld.py, והפעילה אותו באמצעות nohup כדי לשמור אותו פועל ברקע . בניגוד ל-Windows, גרסה זו לא הציגה מנגנון התמדה חזק, דבר המצביע על גישה מהירה יותר מוכוונת סינון נתונים או פריסה מזדמנת של התמדה באמצעות פקודות עוקבות.
SafeDep ו-Elastic Security Labs ניתחו את המטענים ברמה השנייה והגיעו למסקנה כי קבצי RAT עבור macOS (קובץ בינארי C++ Mach-O) ו-Linux (סקריפט Python) חלקו את אותה מערכת פקודות, פרוטוקול C2, פורמט הודעה והתנהגות תפעולית . סוג זה של ניתוח מסתמך בדרך כלל על שירותי סריקה כמו VirusTotal , המאפשרים את הקורלציה בין דגימות ל-IOCs.
בכל המקרים, כל מארח שנפגע ביצע סיור מיידי של המערכת: ספריות משתמשים, שורשי כוננים, תהליכים פעילים ומטא-דאטה אחרים . מידע זה נשלח לשרת הפיקוד והבקרה, והסוכן שמר על לולאת משואות של כ-60 שניות, כשהוא ממתין להוראות חדשות, כולל ביצוע סקריפטים נוספים או הזרקת קבצים בינאריים לזיכרון.
חלון חשיפה, מטרות וייחוס לצפון קוריאה
הגרסאות הזדוניות של Axios היו זמינות ב-npm במשך כשלוש שעות, במהלך מסגרת זמן שנבחרה בקפידה. החבילות שנפרצו פורסמו מעט לפני חצות ביום ראשון (זמן שהגדיל את זמן התגובה של המגנים), והתקרית הושבתה עד בוקר יום שני המוקדם , לאחר שחברות אבטחה התריעו לרשויות על ההתנהגות החריגה.
במהלך תקופה קצרה יחסית זו, Huntress זיהתה לפחות 135 מערכות שהתחברות לשרת של התוקף . בהתחשב בכך ש-Axios רושמת יותר מ-80-100 מיליון הורדות בשבוע (על פי מקורות שונים, אפילו יותר מ-300 מיליון בתקופות מסוימות), מספר זה מייצג ככל הנראה רק את קצה הקרחון, ומוגבל למערכות שמגיעות לידיעתן של חברות אנליטיקה שפרסמו את הנתונים שלהן.
גוגל, באמצעות צוות מודיעין האיומים שלה, ייחסה את המתקפה לשחקן צפון קוריאני חשוד שכותרתו UNC1069 . מעבדות אבטחה Elastic חיזקו השערה זו על ידי מציאת דמיון חזק בין ה-RAT שמסופק על macOS לבין WAVESHAPER, דלת אחורית בפורמט C++ שהתגלתה על ידי Mandiant וגם מקושרת לאותה קבוצת איומים.
אנליסטים של גוגל הדגישו כי קבוצות הקשורות לצפון קוריאה מתמחות כבר שנים בתקיפות בשרשרת האספקה ובפעולות גניבת מטבעות קריפטוגרפיים . הדפוס עקבי: פגיעה בתשתיות פיתוח, בספריות נפוצות או בתוכנות מהימנות, ולאחר מכן תנועה רוחבית לעבר מטרות המנהלות נכסים בעלי ערך גבוה, מפתחות פרטיים או אישורים.
מספר דיווחים הדגישו גם כי ניהול ותכנון ההתקפה הצביעו על צוות מתואם היטב : שלושה יישומים מקבילים של אותו RAT (PowerShell, C++ ו-Python), פרוטוקול C2 עקבי, התנהגות כמעט זהה בכל הגרסאות, ואסטרטגיית ניקוי עצמי ברורה כדי למנוע השארת עקבות. Elastic הדגישה כי עקביות זו מצביעה על מפתח יחיד או קבוצה שעובדת ממסמך עיצוב משותף, רחוקה מאלתור.
מעבר להיבטים הטכניים גרידא, אחת הנקודות המטרידות ביותר בתיק היא כיצד נחטף חשבון ה-npm של מנהל המערכת הראשי. מנהל Axios עצמו הסביר מאוחר יותר כי הפעיל אימות דו-שלבי כמעט בכל השירותים שלו , ובכל זאת הוא עדיין אישר גישה מבלי לשים לב לכך.
על פי ניתוח שלאחר המוות ששיתף הצוות, התוקפים ביצעו מבצע הנדסה חברתית מורכב ביותר, הנתמך על ידי כלים המופעלים על ידי בינה מלאכותית, כדי לזכות באמונם . הם התחזו למייסד חברה, העתיקו את הזהות החזותית שלה, את תמונתה ואפילו את המותג התאגידי. הם יצרו חלל Slack אמיתי עם לוגו החברה, ערוצים עם פוסטים שכביכול מסונכרנים עם לינקדאין, ואפילו פרופילים מזויפים של עובדים ומתחזקי תוכנה אחרים בקוד פתוח.
בתוך סביבה זו, הם קבעו פגישה דרך Microsoft Teams בה נראתה קבוצה מלאה של אנשי מקצוע . במהלך הפגישה, הם סימלו בעיה טכנית וציינו שרכיב במערכת שלהם מיושן. טכנאי התחזוקה, בהנחה שמדובר בדרישה לגיטימית הקשורה לכלי שיחות הווידאו עצמו, הוריד והתקין את הקובץ המוצע.
קובץ זה היה, למעשה, סוס טרויאני לגישה מרחוק שאפשר לתוקפים לעבור לאישורי הקורבן ובסופו של דבר להשתלט על חשבון ה-npm ששימש לפרסום Axios . התהליך כולו תוכנן כה טוב, עם כל כך הרבה פרטים אמינים, שהקורבן תיאר אותו כ"מתואם בצורה מושלמת, מקצועי ומשכנע לחלוטין".
האלמנט האנושי הזה של האירוע מבהיר שגם אמצעים טכניים כמו 2FA אינם מספיקים כאשר הנדסה חברתית ברמה גבוהה משולבת עם התחזות חזותית, זיופים עמוקים או שיבוט מפורט של ארגונים . החוליה החלשה ביותר, שוב, היא אינטראקציה אנושית.
השפעה על ארגונים ומפתחים המשתמשים ב-Axios
מבחינה מעשית, הבעיה העיקרית היא לקבוע מי באמת נפגע. כל ארגון שהתקין את [email protected] או [email protected] במהלך החלון בו הם היו זמינים צריך להניח שהמכונה או הצינור שביצעו את ההתקנה עלולים להיות בסכנה.
ההמלצות מחברות כמו StepSecurity, Aikido, Huntress ו-Elastic הן חד משמעיות. במקרה של חשד, יש לנקוט בגישה פרואקטיבית, ולא רק "מחיקה והתקנה מחדש של node_modules ". דרך הפעולה הנבונה היא לבנות מחדש את המכונות או הסביבות שנפגעו מתמונות מהימנות ולסקור בקפידה את יומני ה-CI/CD כדי לזהות אילו משימות או צינורות ייתכן שהפעילו את הגרסאות שנפגעו.
יתר על כן, חשוב מאוד לסובב את כל האישורים והסודות שה-RAT אולי גישה אליהם מאותם צמתים : אסימוני npm, מפתחות ספק ענן, סודות צינור, אישורי מסד נתונים, מפתחות SSH וכו'. השארת אישורי גישה אלה במחזור לאחר מתקפה כזו משאירה את הדלת פתוחה לתנועה שקטה לרוחב.
ברמה הטכנית, על הצוותים לבדוק את קבצי הנעילה שלהם (package-lock.json, pnpm-lock.yaml, yarn.lock) כדי לאתר הפניות לגרסאות של Axios ו-plain-crypto-js שנפגעו . אם יימצאו אלמנטים אלה, השלב הבא הוא לבדוק את המערכות המושפעות לאיתור תקלות RAT אפשריות: /Library/Caches/com.apple.act.mond ב-macOS, %PROGRAMDATA%\wt.exe ו-%PROGRAMDATA%\system.bat ב-Windows, או /tmp/ld.py ב-Linux.
במקביל, מומלץ להגדיר במפורש גרסאות מאובטחות של Axios, כגון 1.14.0 ו-0.30.3, ולהשתמש בעקיפות או ברזולוציות כדי למנוע מתלות טרנזיטיביות להגיע לגרסאות לא רצויות . חסימת תעבורה יוצאת לדומיין sfrclakcom היא גם אמצעי בלימה הגיוני, לפחות בזמן שמנותח היקף ההתקפה המלא.
לקחי אבטחה עבור שרשרת אספקת התוכנה
תקרית Axios אינה אירוע בודד, אלא חוליה נוספת בשרשרת של מתקפות שרשרת אספקה הכוללת מקרים כמו SolarWinds, Kaseya, 3CX, Polyfill.io, ופגיעויות המנוצלות ב-Log4j. הרעיון המרכזי הוא תמיד זהה: לפגוע ברכיב אמין ונמצא בשימוש נרחב כדי למקסם את טווח ההגעה , במקום לנסות לתקוף מכונה אחר מכונה.
אחד הלקחים החוזרים ונשנים ביותר ממומחים הוא שאמון לא יכול להסתמך אך ורק על הפופולריות של ספרייה או על המוניטין של מתחזק . אם ערוץ השחרור (חשבון npm, צינור CI/CD, תשתית הבנייה) נפגע, כל מה שמשוחרר דרכו יורש את הסיכון הזה. סקירת קוד ידנית אינה מספיקה גם אם תוכנה זדונית מסתתרת בתלות טרנזיטיביות ומחקה את עצמה לאחר הביצוע.
כמו כן, הודגש כי "מהירות ברירת המחדל" לעדכוני תלות כרוכה בעלות מבחינת משטח התקפה . אימוץ אוטומטי של הגרסה העדכנית ביותר הוא נוח להפליא, אך הוא פותח את הדלת להתפשטות עדכון זדוני תוך דקות ספורות. ארגונים מסוימים כבר שוקלים מדיניות כגון דרישה שגרסה חדשה תהיה במערכת האקולוגית למשך תקופה מסוימת לפני האימוץ, או דרישה ששינויים בחבילות קריטיות יעברו סקירה ידנית נוספת.
בנוגע לתשתית פיתוח, יש להתייחס לסביבות CI/CD כנכסים רגישים ביותר . כל RAT שמופעל במהלך התקנת תלות כמעט בוודאות יחפש סודות צינור וגישה לסביבות אחרות. פילוח צמתים אלה, ניטור מקרוב אחריהם וסיבוב הסודות שלהם מעת לעת אינו עוד המלצה "אידיאלית" אלא הכרח.
לבסוף, זיהוי סוגים אלה של התקפות דורש שילוב מידע ממקורות מרובים: גרסאות מותקנות, קבצי נעילה, אינדיקטורים של מערכת הפעלה לפגיעה וטלמטריה של הרשת . כלים שיוצרים ומנהלים רשימת חומרים של תוכנה (SBOMs) עוזרים לעקוב במהירות אחר אילו פרויקטים משתמשים באילו חבילות, דבר חיוני כאשר מופעלות התראות ענקיות כמו זו.
כל הפרק הזה עם Axios ממחיש עד כמה מערכת התלות, בוגרת ומגובשת ככל שתהיה, עדיין מסתמכת במידה רבה על אמון וערנות מתמדת. ספרייה שנראית תמימה, המתוחזקת על ידי אדם יחיד שנופל קורבן למתקפת הנדסה חברתית שבוצעה היטב, יכולה להפוך, תוך שעות ספורות, לווקטור עולמי לפריסת RATs חוצות פלטפורמות נגד חברות, פרילנסרים וארגונים מכל הגדלים . חיזוק הבקרות סביב חשבונות פרסום, צינורות ותלות קריטיות אינו עוד שיטת עבודה מומלצת אופציונלית, אלא תנאי מוקדם להמשך פיתוח בסביבה שבה תוקפים הופכים סבלניים יותר ויותר, בעלי תושייה ומצוידים בכלים טובים יותר.

