חזרה
‏SafeDep מצאה טוען מוצפן בתוך ספריית ה-npm בשם mathmain
SiTech AI Team2 წთ. საკითხავი

‏SafeDep מצאה טוען מוצפן בתוך ספריית ה-npm בשם mathmain

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

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

קריאה נסתרת בתוך הפותרת

הבדיקה החלה מההבחנה ש-mathmain נראתה כעותק משוכפל ומעורפל של הספרייה הנפוצה mathjs. הרמז היה קריאה מיותרת אחת בסוף lusolve() בגרסת CommonJS: לאחר חישוב התוצאה מעבירה הפותרת נתונים מהמטריצה המשולשת התחתונה לפונקציה בשם removeSolveValidation() ואינה משתמשת בערך המוחזר.

הקריאה מגיעה ל-isGraph() בקובץ lib/cjs/utils/is.js. isGraph() הופך את הקלט למחרוזת JSON ומשתמש בה כסיסמה, מפענח שם קובץ מבלוק base64 ומעביר את הנתיב שנמצא ואת הסיסמה לפונקציית עזר בשם event(), שפלטּה נמסר ל-require() של Node.

scrypt, AES-GCM וכתיבה לדיסק

השגרות ב-lib/cjs/utils/event.js גוזרות מפתח בן 256 סיביות באמצעות scrypt ומפענחות ב-AES-GCM; כל בלוק מכיל מלח של 16 בתים, וקטור אתחול של 12 בתים, תג אימות של 16 בתים ואת הטקסט המוצפן, הכול ב-base64.

פונקציית העזר כותבת את הבתים המפוענחים לדיסק ומחזירה נתיב שנטען לאחר מכן, כך שהקוד רץ בהרשאות של התהליך עצמו. מכיוון שהקידומת enc_ מוסרת מהשם לפני הכתיבה, מטען בלי קידומת כזו דורס את הקובץ המוצפן שממנו בא. שלושה קבצים תחת lib/cjs/utils/ מכילים base64 במקום JavaScript: graph.js (20,918 בתים), fraction.js (9,084) ו-bignumber/type.js (1,179,416).

שתי חבילות נוספות, בלי טריגר

חיפוש במרשם העלה את mathsbase ואת math-universe, שחולקות קבצי טוען, קוד טריגר ושינויי פותרת זהים לאורך חמש גרסאות. [email protected] פורסמה ב-27 באוגוסט 2026 ו-[email protected] ב-17 בספטמבר; npm עדיין הגישה כברירת מחדל את [email protected] בלי הטוען.

במאגרי ה-GitHub שאליהם מפנות שתי החבילות אין בקומיטים שנבדקו את הקריאה הנוספת, ולכן הקוד הציבורי אינו מסביר את הגרסה שפורסמה. הצוות בדק 16,922 סיסמאות אפשריות מול שם הקובץ המוצפן ועוד 533 מול חמשת הבלוקים השונים, ואף אחת מהן לא עברה את בדיקת האימות. ההשערה היא שהחבילות מאחסנות מטען לתקיפה עתידית, כשחבילה נפרדת תספק את הטריגר; חבילה כזאת לא נמצאה, והחוקרים מציינים שלא הוכחו גניבת מידע, יצירת קשר עם שרת או שמירה על גישה למערכת.

SSiTech

SiTech — פיתוח אתרים בכוח ה-AI

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