alone5511 npm התקפת בלבול תלות

alone5511 npm התקפת בלבול תלות

TL; DR

בין ה-1 במאי ל-6 במאי 2026, מפרסם npm יחיד, alone5511, דחפה שמונה חבילות ללא תלות שנראות כמכוונות מיקרוסופט / מרחבי שמות של חבילות פנימיות בסגנון Azure.

החבילות השתמשו בשמות כגון cosmos-explorer, ms.analytics-web, icons.generated, latency-tracking-internal, carbonite-internal, ו carboniteappמספר גרסאות השתמשו בערכי semver גבוהים כגון 99.9.0 ו 99.9.13, שהיא טקטיקת בלבול תלויות נפוצה שנועדה לעקוף חבילות פנימיות פרטיות.

כל שמונה חבילות האחיות כבר לא פורסמו מ-npm על ידי המפרסם בין ה-1 במאי ל-6 במאי 2026. מטא-נתונים ישירים של הרישום אישרו שקבצי ה-tarball מחזירים כעת HTTP 404 מ-npm CDN.

עם זאת, האשכול עדיין חשוב.

המטען בדגימות הקנוניות, carbonite-internal:99.9.0 ו carboniteapp:99.9.0, פועל בזמן ההתקנה דרך preinstall וו. הוא אוסף נתוני טביעות אצבע של המארח, מאחזר את כתובת ה-IP הציבורית של המכונה מ api.ipify.org, בונה "דו"ח מודיעין ברמה מקצועית" מזויף, מסמן את המארח כ RCE VERIFIED, ושולח את הדוח לבוט של טלגרם דרך ה-API של בוט הטלגרם.

התרעה מוקדמת מפני תוכנות זדוניות (MEW) של Xygeni המערכת סיווגה את הדגימות הקנוניות כככל הנראה זדוניות עם ציון מעל 91/100.

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

האשכול: שמונה חבילות, מו"ל אחד

חשבון המוציא לאור alone5511 השתמשתי בכתובת הדוא"ל:

				
					raistargaming703@gmail.com
				
			

לחשבון לא היה כתובת דוא"ל מאומתת, לא SCM אימות, וציון מוניטין npm של 2.

זהות GitHub עם הפניה, alonebeast002/beastcrypt, הופיע גם בהקשר של אשכול.

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

#חֲבִילָהגרסה זדוניתנוצר, UTCלא פורסם, UTCמטען אושרהתקנת וו
1חוקר קוסמוס1.1.32026-05-01T18:26Z2026-05-01T19:01Zמשוער, אותו מו"ל / אשכולהתקנה מוקדמת, משוערת
2signalsdk-web1.0.0, 10.0.02026-05-04T13:57Z2026-05-04T18:51Zמוּסָקהתקנה מוקדמת, משוערת
3ms.analytics-web99.0.0, 99.9.132026-05-04T18:47Z2026-05-05T10:07Zמוּסָקהתקנה מוקדמת, משוערת
4אייקונים שנוצרו99.9.132026-05-05T10:02Z2026-05-05T12:57Zמוּסָקהתקנה מוקדמת, משוערת
5מעקב אחר השהייה99.9.02026-05-05T11:57Z2026-05-05T12:57Zמוּסָקהתקנה מוקדמת, משוערת
6מעקב-השהייה-פנימיגרסאות שהוסרו מרשומת הרישום2026-05-06T06:02Z2026-05-06T08:35Zמוּסָקהתקנה מוקדמת, משוערת
7קרבוניטאפ99.9.02026-05-06T05:49Z2026-05-06T08:35Zכן, זרימת קוד מלאה של הסורקהתקנה מוקדמת: node index.js
8קרבוניט פנימי99.9.02026-05-06T06:14Z2026-05-06T08:36Zכן, זרימת קוד מלאה של הסורקהתקנה מוקדמת: node index.js

סך כל צמד הגרסאות הזדוניות ברחבי האשכול: 9+.

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

למה השמות חשובים

שמות החבילות הם האות החזק ביותר.

הם נראים כמו חבילות SDK פנימיות, טלמטריה, יצירת אייקונים, סייר או מעקב אחר השהייה:

				
					cosmos-explorer
signalsdk-web
ms.analytics-web
icons.generated
latency-tracking
latency-tracking-internal
carbonite-internal
carboniteapp
				
			

זה לא מתן שם אקראי. זה נראה מכויל עבור בלבול תלות.

מספר חבילות מאוחרות יותר השתמשו במספרי גרסה גבוהים:

				
					99.0.0
99.9.0
99.9.13
10.0.0
				
			

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

נראה שגם המו"ל מתעצם עם הזמן.

חבילות מוקדמות השתמשו בגרסאות שנראות רגילות, כגון 1.1.3 ו 1.0.0חבילות מאוחרות יותר עברו ל... 99.x.x ו 99.9.xשינוי זה עולה בקנה אחד עם גורם שמכוון את הקמפיין להתנהגות פתרון חבילות פנימית.

מה קורה בזמן ההתקנה

הדוגמאות הקנוניות, carbonite-internal:99.9.0 ו carboniteapp:99.9.0, להכריז על preinstall וו:

 
				
					{
  "scripts": {
    "preinstall": "node index.js"
  }
}
				
			

משמעות הדבר היא שהמטען פועל לפני ש-npm מסיים להתקין תלויות.

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

המטען קטן, כ-2.4 KB, ואין לו מטרה פונקציונלית מעבר לשידור באמצעות משואות.

התנהגות מטען

השמיים index.js הקובץ מבצע ארבע פעולות עיקריות.

ראשית, זה קורא api.ipify.org כדי לאחזר את כתובת ה-IP הציבורית של המארח:

				
					https://api.ipify.org
				
			

שנית, הוא אוסף נתוני טביעות אצבע בסיסיים של המארח באמצעות ממשקי API של מערכת ההפעלה Node.js:

				
					os.userInfo()
os.hostname()
os.platform()
os.networkInterfaces()
os.uptime()
				
			

שלישית, הוא מעצב את הנתונים שנאספו לדוח רב-שורתי עם באנר מילולי:

				
					PRO-LEVEL INTELLIGENCE REPORT
				
			

הדוח מסתיים ב:

				
					Status: 🟢 RCE VERIFIED
				
			

רביעית, הוא שולח את הדוח לטלגרם דרך sendTelegram(report) פונקציה, באמצעות נקודת הקצה של ה-API של בוט הטלגרם:

				
					https://api.telegram.org/bot<token>/sendMessage
				
			

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

למה חשוב לבאנר "RCE VERIFIED"

המילולי RCE VERIFIED הסמן אומר משהו מבחינה תפעולית.

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

זה מספיק עבור קמפיין הוכחת ביצוע של בלבול תלות.

אם התוקף מקבל הודעת טלגרם מסביבת יעד, הוא יודע שחבילת ה-npm הציבורית נפתרה ובוצעה בתוך מארח אמיתי, CI runner, תחנת עבודה למפתחים או סביבת בנייה.

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

סיווג Xygeni MEW

Xygeni MEW סיווג את הדגימות הקנוניות כ- כנראה זדוני, עם ציון מעל 91/100.

הגילויים כללו:

חומרהאיתורמשמעות
קריטיסינון_נתונים_רגישיםהפונקציה req.write(data) נושאת את דוח טביעת האצבע של המארח לתוך פוסט יוצא בטלגרם
גָבוֹהַסקריפטים_התקנה_מזוהיםהתקנה מוקדמת: node index.js מפעיל את ה-beacon בזמן ההתקנה
נמוךבקשה_חשודהגילוי IP ציבורי דרך api.ipify.org
נמוךבקשה_חשודהנקודת קצה יוצאת של API בוט של טלגרם
נמוךחבילה_טריוויאליתלחבילה אין מטרה משמעותית מעבר ל-beaconing
מידעספירת_נתונים_רגישיםפרטי המארח כגון זמן פעולה, פרטי משתמש ושם מארח מפורטים

שניהם carbonite-internal:99.9.0 ו carboniteapp:99.9.0 היו לו מטענים זהים, כולל אותו מזהה זרימת קוד וסקריפטי התקנה שווי ערך לבייט.

אינדקס הפרויקטים של המוציאים לאור של MEW סימן את כל שמונה החבילות כחלק מאותו אשכול מוציאים לאור/מטען.

למה דפוס ביטול הפרסום העצמי חשוב

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

ההתנהגות הזו חשובה.

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

זה יוצר שתי בעיות עבור שחקני ההגנה.

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

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

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

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

מו"ל וחשבון

שדהערך
שם משתמש של npmalone5511
דוא"ל של מפרסם npmraistargaming703@gmail.com
מוניטין של npm2
אימייל מאומתלא
SCM מְאוּמָתלא
זהות GitHub שהופניהalonebeast002/beastcrypt

שמות חבילות מושפעות

				
					cosmos-explorer
signalsdk-web
ms.analytics-web
icons.generated
latency-tracking
latency-tracking-internal
carbonite-internal
carboniteapp
				
			

דפוסי גרסה חשודים

				
					10.0.0
99.0.0
99.9.0
99.9.13
				
			

גרסאות גבוהות אלו רלוונטיות במיוחד בחקירת בלבול תלויות מכיוון שהן עשויות לעלות בדירוג על גרסאות חבילה פרטיות.

נקודות קצה של הרשת

סוּגערך
בדיקת IP ציבוריתhttps://api.ipify.org
כיור חילוץhttps://api.telegram.org/bot<token>/sendMessage
שיטת סינוןפוסט API של בוט טלגרם

סמני מטען

חפש סקריפטי התקנה עבור המחרוזות הבאות:

				
					PRO-LEVEL INTELLIGENCE REPORT
Status: 🟢 RCE VERIFIED
sendTelegram(
				
			

סמן גם את דפוס המניפסט הזה:

				
					{
  "scripts": {
    "preinstall": "node index.js"
  }
}
				
			

במיוחד בשילוב עם:

  • אפס תלות
  • גודל חבילה זעיר
  • שם חבילה שנראה פנימי
  • גרסת סמסטר גבוהה
  • ממשקי API של טביעות אצבע של מארח
  • תעבורת ה-API של בוט הטלגרם

ממשקי API של טביעות אצבע מארחים

המטען הקנוני משתמש ב:

				
					os.userInfo()
os.hostname()
os.platform()
os.networkInterfaces()
os.uptime()
				
			

זה פונה גם אל:

				
					https://api.ipify.org
				
			

כדי ללכוד את כתובת ה-IP הציבורית של המארח.

הערות גילוי

מספר כללים יכולים לתפוס את הקמפיין הזה וגרסאות קרובות.

ראשית, עקוב אחר סקריפטי התקנת npm שיוצרים קשר עם טלגרם:

				
					api.telegram.org
				
			

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

שנית, דגל preinstall סקריפטים בחבילות זעירות ללא תלות עם שמות שנראים פנימיים.

השילוב של חבילה קטנה, גרסת semver גבוהה ושם בסגנון מרחב שמות פנימי הוא איתות חזק לבלבול בין תלות.

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

דוגמאות מאשכול זה כוללות:

				
					ms.analytics-web
latency-tracking-internal
carbonite-internal
icons.generated
				
			

רביעית, חפשו הפניות לקובצי נעילה (lockfile file) לשמונה שמות החבילות במערכות CI ובתחנות עבודה של מפתחים.

לחפש:

				
					package-lock.json
yarn.lock
pnpm-lock.yaml
npm-shrinkwrap.json
				
			

כל התאמה צריכה להפעיל סקירת בלבול תלויות.

פעולות רישום מוצעות

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

פעולות מומלצות בצד ה-npm:

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

רשימת תיוג לתגובה לפשרה

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

תגובה מומלצת:

  • זהה היכן הותקנה החבילה: תחנת עבודה מקומית, רץ CI, סוכן בנייה או תמונת מכולה.
  • שמור קבצי נעילה, מטמון npm, יומני בנייה, היסטוריית מעטפת ופלט של מנהל חבילות.
  • בדוק יומני רשת יוצאים עבור api.telegram.org ו api.ipify.org במהלך חלון ההתקנה.
  • בדוק האם ההתקנה רצה בסביבה עם משתנים רגישים, אישורים או גישה פנימית לרשת.
  • סובב אסימונים החשופים לסביבת ההתקנה אם המארח היה רץ CI מורשה או תחנת עבודה של מפתחים.
  • תצורת פתרון חבילות ביקורת לצורך פתרון בלבול בין רישום ציבורי/פרטי.
  • אכיפת חבילות פרטיות בהיקף והצמדת רישום.
  • חסום חבילות ציבוריות לא מאושרות שתואמות לדפוסי מתן שמות פנימיים.
  • להוסיף guardrails עבור סקריפטי התקנה, במיוחד preinstall, install, ו postinstall.

מה שמגנים צריכים לקחת איתם

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

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

הסיכון האמיתי הוא בלבול תלות.

חבילה עם שם בעל מראה פנימי מוכר, מספר גרסה גבוה ו- preinstall וו יכול להפוך רגיל npm install לתוך משואה מתוך הסביבה שלך.

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

דווח ל-npm לצורך אכיפה ברמת החשבון, רישום חסימות ושימור tarball שלא פורסם.

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

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

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