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

התקפה מעניינת על מודול פופולרי ביותר ב-npm שנעשתה על מנת לגנוב מטבע קריפטוגרפי

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

המודול event stream היה עד כה מודול אולטרא פופולרי של node. הוא איפשר למתכנתים לעבוד יותר בקלות עם streams. באופן אישי, לא הבנתי למה צריך אותו אבל היו אחרים שכן הצטרכו אותו. מיליונים מהם ליתר דיוק. למודול יש כשתי מיליון הורדות בשבוע. זה לא אומר ששני מיליון איש מורידים אותו בשבוע כמובן, אבל זה אומר שהוא נמצא בלא מעט בילדים ותוכנות שמורידות אותו בכל התקנה והתקנה.

weekly downloads
1,942,351

מה הבעיה עם המודול הזה? שמי שמפעיל אותו, מתכנת בשם דומיניק טאר, התעייף מלתחזק את החבילה ולא עדכן אותה מספר שנים. מתכנת אחר שהכינוי שלו הוא right9ctrl, פנה לטאר, המתכנת המקורי, והציע לו עזרה בתחזוקה. טאר נתן לו הרשאות. מדובר כמובן בנוהג מקובל בתעשית הקוד הפתוח. אבל right9ctrl לא היה סתם מתכנת שרצה לעזור לתחזק את החבילה הפופולרית מטוב ליבו – מדובר היה בהאקר זדוני. הוא עשה כמה שינויים קלים והוסיף ל-dependencies את החבילה flatmap-stream. חבילה מזויפת המכילה קוד מעורבל.

קוד מעורבל למי שלא יודע הוא קוד שכתוב (לשם הדוגמה) ב base64 או משהו בסגנון ואנו עושים לו eval. אם אנו רואים כזה דבר, זה סימן שמי שעשה את זה לא רוצה שנבחין בקוד בקלות.

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

אחרי שההאקר הזדוני right9ctrl השתיל את הקוד, הוא הקפיץ את גרסת ה-minor של החבילה לגרסה 3.3.6. ונתן להורדות לזרום. כל מי שכיוון את ה-package.json שלו, כלומר הקובץ שמוריד מודולים לגרסה *.3  קיבל את החבילה המורעלת בכל התקנה או בילד.

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

מה אתם צריכים לעשות?

הדבר הראשון שצריך לעשות הוא לבדוק אם יש שימוש בחבילה הזו אצלכם. וזה לא משנה אם אתם משתמשים ב-node או מתכנתים בשפה אחרת. כיוון ש-node עוזרת בלא מעט פלטפורמות אחרות. איך בדיוק? באמצעות ה-package.json. פתחו את ה-package-lock.json שלכם וחפשו את ״event-stream״. אם אתם רואים משהו שמתאים לגרסה 3.3.6 – זה הזמן למחוק את node_modules ולהתקין מחדש.

    "event-stream": "^3.3.4",
    "gulp": "^3.9.1",
    "gulp-clean-css": "^2.3.2",
דוגמה של התקנה בעייתית

בנוסף, אני ממליץ בחום להשתמש ב-snyk שמתריע בפניכם על בעיות כאלו ברגע שהן נוצרות.

למי שרוצה ללמוד עוד על העולם המרתק של ביטקוין וגניבות שלהם – אני ממליץ בחום רב על ההרצאה של אופיר הרפז שהתקיימה בג׳אווהסקריפט ישראל:

וזהו, תזהרו שם בחוץ 🙂

פוסטים נוספים שכדאי לקרוא

פתרונות ומאמרים על פיתוח אינטרנט

עבודה עם GPT למתכנתים

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

פתרונות ומאמרים על פיתוח אינטרנט

יישום של nonce על מנת להגן מפני התקפות injection

בפוסט הקודם הסברתי על hash עם CSP על משאבי inline – שזה נחמד ומעולה אבל פחות ישים בעולם האמיתי שבו בדרך כלל התוכן ה-inline (בין

DALL·E 2023-10-21 22.28.58 - Photo of a computer server room with red warning lights flashing, indicating a potential cyber threat. Multiple screens display graphs showing a sudde
יסודות בתכנות

מבוא לאבטחת מידע: IDOR

הסבר על התקפה אהובה ומוצלחת שבאמצעותה שואבים מידע מאתרים

פתרונות ומאמרים על פיתוח אינטרנט

נגישות טכנית – פודקאסט ומבוא

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

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

FedRAMP & FIPS מבוא למתחילים

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

גלילה לראש העמוד