OX Security חשפה קמפיין שבו 24 חבילות npm הכילו בדיוק את אותו קובץ HTML זדוני: דף CAPTCHA מזויף שנראה כמו בדיקת אבטחה של Cloudflare.
2
17
אלא שהחבילות לא נועדו בעיקר להדביק מפתחים שהתקינו אותן. התוקפים השתמשו ב-npm — ובמראות שמסתנכרנות איתו אוטומטית, כמו unpkg — כבשירות אחסון שנראה אמין ומוכר. משם הם יכלו להפיץ קישורים לדפי הפישינג, תחת דומיינים של שירותים לגיטימיים לכאורה.
2
17
החבילה לא הייתה בהכרח נקודת ההדבקה
במקרה הזה, המטען הזדוני היה דף HTML סטטי ולא קוד שהופעל בזמן התקנת החבילה. גולש שפתח את הקובץ דרך npm או דרך מראה שלו ראה מסך אימות בסגנון Cloudflare, תחת כתובת של שירות מוכר.
2
17
המשמעות חשובה: עצם הורדת החבילה לא הייתה בהכרח אירוע הדבקה. המטרה הייתה להביא את המשתמש ללחוץ על קישור לדף המתארח, ואז להמשיך אותו אל תשתית שנשלטת בידי התוקפים.
17
שרשרת ההפניות השתנתה לאורך הזמן
דף ה-CAPTCHA היה רק התחנה הראשונה בשרשרת. לפי OX Security, בגרסאות מוקדמות של הקמפיין נשלחו הגולשים לדומיין שהתחזה לדומיין של Microsoft. בהמשך זוהו יעדים ותשתיות משתנים, בהם microcloud[.]homes ו-login[.]microsofte[.]live.
2
18
הקמפיין השתמש גם ב-KeyVal — שירות ציבורי לאחסון ערכי מפתח — כמעין “תיבת מתים” או פותר כתובות. כך יכלו המפעילים לשנות את יעד ההפניה בלי לפרסם מחדש את אותו קובץ HTML בכל אחת מהחבילות.
21
השיטה מקשה על פעולות הסרה. מחיקה של חבילה מ-npm אינה מבטלת אוטומטית כל כתובת שכבר מפנה לעותק שלה במראה מסונכרנת. בדיווחים על הקמפיין צוין כי גם לאחר הסרת חבילות מהמאגר, חלק מהקבצים והדפים שהתארחו במראות נותרו זמינים.
17
18
ה-CAPTCHA היה פיתיון למתקפת ClickFix
בדיקת האימות לא הייתה בדיקת אבטחה אמיתית. הדף הנחה את הקורבן להעתיק, להדביק ולהריץ פקודה במחשב שלו. זהו דפוס ClickFix: במקום לנצל חולשת תוכנה, התוקף משכנע את המשתמש להפעיל בעצמו את הפקודה — בהרשאות המשתמש.
20
25
דפי אימות מזויפים אפקטיביים במיוחד משום שהם מחקים מיתוג מוכר של דפדפנים ושירותי אבטחה. בקמפיינים דומים, לחצן האימות או ההוראות בדף מעתיקים פקודה ללוח, ולאחר מכן מדריכים את המשתמש להשתמש בקיצורי מקלדת או בחלון של מערכת ההפעלה כדי להריץ אותה.
26
28
הכלל המעשי פשוט: CAPTCHA אמיתי לא אמור לבקש מכם לפתוח Shell, PowerShell, Terminal או חלון Run ולהריץ טקסט שהועתק מאתר.
כמה חשיפה הייתה לחבילות?
לפי OX Security, כל אחת מהחבילות קיבלה בדרך כלל כ-50–300 הורדות בשבוע לפני שהוסרה.
2 הנתון מתאר פעילות במאגר בלבד — לא את מספר האנשים שנחשפו לדפי הפישינג דרך קישורים ישירים או כתובות של מראות.
לכן, נתוני ההורדות הרגילים של npm אינם מדד מלא להיקף הקמפיין. החבילות תפקדו כרשת של דפי נחיתה מתארחים, ואילו את כתובות הדפים ניתן היה להפיץ בהודעות פישינג, באתרים שנפרצו או בערוצים אחרים.
2
17
חלק ממגמת ClickFix רחבה יותר
הקמפיין ב-npm הוא וריאציה תשתיתית של מודל ClickFix רחב יותר. במתקפות מהסוג הזה משולבים פיתיון מוכר — CAPTCHA, הודעת שגיאה בדפדפן, עדכון מזויף או כלי תוכנה — עם הוראות שמפתות את הקורבן להריץ פקודה בעצמו. Proofpoint תיארה את הטכניקה כשיטה שהולכת ומתרחבת להפצת נוזקות, ומיקרוסופט תיעדה וריאציות שמשלבות הפרעה למשתמש והנדסה חברתית כדי להגדיל את הסיכוי שהפקודה תבוצע.
22
25
27
הדוגמאות שנקשרו למגמה כוללות קמפיינים סביב PavinLoader, EtherHiding, Amatera Stealer, דפי OpenAI Codex מזויפים שכוונו למפתחי Mac ו-ACR Stealer. עם זאת, הראיות שסופקו אינן מוכיחות שקמפיין 24 החבילות הופעל בידי אותו גורם כמו המבצעים הללו.
גם לגבי הקמפיין המוקדם יותר שכונה Beamglea, ושעל פי הטענה ניצל 175 חבילות npm, אין במידע שסופק ראיות מספיקות כדי לאמת את הקשר התפעולי שלו לקמפיין שנחקר על ידי OX Security.
2
17
הלקח למפתחים ולצוותי אבטחה
המקרה מרחיב את ההגדרה של איום שרשרת אספקה ב-npm. חבילה אינה חייבת להריץ קוד זדוני בזמן ההתקנה כדי להיות שימושית לתוקף. גם קובץ HTML סטטי, שמתארח דרך מאגר מוכר והמראות שלו, יכול לשמש דלת כניסה למבצע פישינג.
מפתחים וצוותי אבטחה צריכים לבדוק כתובות npm ו-CDN בלתי צפויות, להתייחס להוראות אימות חריגות כהנדסה חברתית, לנטר הרצת פקודות חשודה בדפדפנים ובתחנות הקצה — ולהימנע מהרצת פקודות שהועתקו מדפי אינטרנט.
סימן האזהרה המרכזי אינו ה-CAPTCHA עצמו, אלא כל בקשה לעקוף את התנהגות האבטחה הרגילה באמצעות הדבקה והרצה של טקסט.