אינטרנט ישראל
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
  • ראשי
  • אודות רן בר-זיק ואינטרנט ישראל
  • ערוץ טלגרם
  • מסטודון
  • התחברו אלי בטוויטר
  • התחברו אלי בלינקדאין
  • ספר ג'אווהסקריפט
ראשי » חדשות אינטרנט » קוד זדוני הוזרק ל-eslint עקב רשלנות של מתכנת

קוד זדוני הוזרק ל-eslint עקב רשלנות של מתכנת

רן בר-זיק יולי 13, 2018 12:05 pm 3 תגובות

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

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.

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

רקע

בגדול, node היא שפת תכנות מבוססת ג'אווהסקריפט שמשתמשים בה בצד שרת אבל גם כתשתית להמון המון אפליקציות ואתרים. למשל דחיסה של קבצי ג'אווהסקריפט, בדיקות שונות – מבדיקות תקינות ועד בדיקות אבטחה נעשות על ידי תוכנות מבוססות node שרצות על הקבצים השונים של האפליקציה. אחת החבילות היא eslint. זה נשמע שם משעמם ולא מעניין אבל בערך בכל האתרים והאפליקציות מבוססות הווב שאתם רואים משתמשים בה על מנת לעשות ניתוח סטטי של קוד. החבילה הזו היא מבוססת קוד פתוח. כלומר יש צוות של מתכנתים מתנדבים שכותבים אותה. כמו רוב תוכנות הקוד הפתוח, התוכנה הזו מנוהלת בגיטהאב. התוכנה עצמה מופצת באמצעות מאגר תוכנה שנקרא npm שהוא ראשי תבות של node package manager. הוא המפיץ והמתקין העיקרי של תוכנות node.

אז מה קורה בפועל? מתכנת מצוות eslint או כל מוצר אחר כותב שינוי בקוד, מכניס אותו אל המוצר באמצעות גיטהאב ומשם הוא מופץ באופן אוטומטי (לרוב) לכל מי שמעדכן את המוצר. בדרך כלל, כל מוצר מבוסס node או מוצר וובי נבנה ומתעדכן כמה פעמים ביום. כלומר ברגע שעדכון נכנס מיליוני שרתים ומשתמשים מורידים אותו באופן אוטומטי.

הסבר טכני

הפירצה החלה בהתקפה על מתכנת בצוות eslint ששותף לפיתוח חלק מהתוספים של eslint ובמיוחד eslint-scope and eslint-config-eslint. התוקפים השתמשו בפרטים שדלפו כתוצאה מפריצה לאתר צד שלישי (כרגע לא ברור בדיוק איזו מהפריצות אבל היו כמה וכמה כאלו). בפרטים האלו היו כתובות מייל וססמאות. הם לקחו את שם המשתמש והסיסמה וניסו להתחבר לגיטהאב. למרבה מזלם, אותו מתכנת השתמש בשם המשתמש והסיסמה במספר חשבונות נוספים כולל החשבון גיטהאב שכאמור בו הוא משתמש כדי להכניס קוד ל-eslint והגישה ל-npm. כך או אחרת, הפורצים השיגו את שם המשתמש והסיסמה שלו לגיטהאב ול-npm. זו נקודת הכשל העיקרית. אותו מפתח לא השתמש בהגנה דו שלבית להגנה על החשבון שלו. מנקודת הכשל הזו הכל החל להתדרדר.

התוקפים לקחו את שם המשתמש והסיסמה, שכאמור לא הוגן באימות דו שלבי והתחברו לחשבון הגיטהאב של המתכנת, דרכו הם הזריקו קוד לגרסאות [email protected] ו- [email protected] מה הקוד הזה עשה? זה מה שיפה בסיפור הזה. הוא הריץ קוד שנמצא ב-pastebin. הקוד הזה הלך אל קובץ .npmrc שמכיל את ההגדרות של המפתחים שמשתמשים בחבילות האלו, כולל ה-tokenים שלהם ושלח את כל המידע הזה אל התוקף. כלומר כל מי שעדכן את הגרסאות האלו, ויש לא מעט כאלו – השיגו גישה אל החשבונות npm שלו ויכולת להזריק קוד זדוני אל החבילות שהם מנהלים. כמו טיפת רעל שמתפשטת במאגר מים.
החבילה eslint-scope היא חבילה פופולרית שמשתמשים בה גם ב-webpack וגם ב-babel שהם התשתית של כל אתר/אפליקצית ווב מודרנית.

המחשה לתקיפה על eslint
המחשה לתקיפה על eslint

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

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

מה עושים

איך מגינים על עצמכם? ראשית, אם אין לכם גרסאות מקובעות של חבילות תוכנה – אולי כדאי לשקול לעבור לכאלו ואם לא, כדאי לוודא שגרסאות eslint-scopeשיש אצלכם היא לא בגרסה 3.7.2 (חבילת הקוד eslint-config-eslint היא חבילת קוד שנמצאת בשימוש פנימי של מתכנתי eslint).

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

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

כדאי תמיד להשאר מעודכנים! אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂 אם אתם רוצים ללמוד תכנות באופן מקיף ומסודר, הצטרפו לאלפי הלומדים בפרויקט "ללמוד ג'אווהסקריפט בעברית" שמלמד לתכנת בג'אווהסקריפט, ב-Node.js ובריאקט וגם מלמד על תרומה לקוד פתוח. גם ספרים דיגיטליים וגם ספרים מודפסים. בשיתוף הקריה האקדמית אונו ובתמיכת חברות מובילות כגון Wix, Outbrain, Elementor, Iron Source, Chegg, Really Good ועוד.
אבטחת מידע חדשות אינטרנט

3 תגובות

  1. Dviros הגב יולי 13, 2018 בשעה 12:56 pm

    יצא כלי שמאפשר למצוא חבילות "נגועות":
    https://snyk.io/vuln/npm:eslint-scope

  2. אלי הגב יולי 13, 2018 בשעה 1:52 pm

    היי רן,
    אני מפתח עם create react app וראיתי שיש ב-node modules שיש תיקיה של eslint scope וב-package json שלו זה מופיע

    "_from": "[email protected]^3.7.1",
    "_id": "[email protected]",

    אני מניח שזה אומר שהכל בגדול בסדר לא?

  3. משתמש אנונימי (לא מזוהה) הגב יולי 13, 2018 בשעה 9:34 pm

    זה לא מתכנת זה טמבל נקודה פסיק חחח;

השארת תגובה

ביטול

ללמוד ג'אווהסקריפט בעברית

ללמוד לתכנת ג'אווהסקריפט בעברית שגייס יותר משלוש מאות אלף שקל ולמעלה מ-2000 תומכים - בואו ללמוד עכשיו איך לתכנת.

רשימת הנושאים
  • מדריכים
    • ריאקט
    • טייפסקריפט
    • ECMAScript 6
    • ES20XX
    • Node.js
    • Express
    • רספברי פיי
    • Babel
    • docker
    • MongoDB
    • Git
    • לימוד MySQL
    • SASS
    • jQuery
    • CSS3
    • HTML 5
    • SVN
    • LESS
  • פיתוח אינטרנט
    • פתרונות ומאמרים על פיתוח אינטרנט
    • jQuery Scripts
    • jQuery למתקדמים
    • יסודות בתכנות
    • נגישות אינטרנט
  • חדשות אינטרנט
  • מידע כללי על אינטרנט
    • רשת האינטרנט
    • בניית אתרי אינטרנט
  • rss logo

    לכל המאמרים

    לכל המאמרים שפורסמו באינטרנט ישראל משנת 2008 ועד עכשיו.
  • rss logo

    RSS Feed

    משתמשים בקורא RSS? אם כן, עקבו אחרי אינטרנט ישראל באמצעות פיד ה-RSS!
    מה זה RSS?
  • Twitter logo

    עקבו אחרי בטוויטר

    בחשבון הטוויטר שלי אני מפרסם עדכונים מהירים על חדשות בתחום התכנות והיזמות, התרעות על מצבי חירום ורכילות בוערת על תחום הווב.
    מה זה טוויטר?
  • facebook like image

    ערוץ הטלגרם של אינטרנט ישראל

    בערוץ הטלגרם של אינטרנט ישראל אני מפרסם את הפוסטים של באתר וכן עדכונים טכנולוגיים נוספים.
    מה זה טלגרם?
  • github logo

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

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

כל הזכויות שמורות לרן בר-זיק ולאינטרנט ישראל | מדיניות הפרטיות של אתר אינטרנט ישראל | אתר אינטרנט ישראל נגיש לפי תקן WCAG 2.0 AA | הצהרת הנגישות של האתר | אבטחת מידע ודיווח על בעיית אבטחת מידע

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