GitLab הוציאה תיקון לחולשה שמאפשרת למי שאין לו חשבון כלל להריץ קוד על השרת שמריץ את GitLab. הציון שניתן לה הוא 10, הגבוה ביותר שהסולם מאפשר. הגרסאות המתקנות הן 19.2.8, 19.3.5 ו-19.4.2.
מה החולשה?
ביטוי רגולרי הוא תבנית שמתארת צורה של טקסט, ותוכנה משתמשת בו כדי להחליט אם מחרוזת מסוימת עומדת בכלל כלשהו. בקובץ ההגדרות של תהליך הבנייה האוטומטי של GitLab, ה-CI, יכולים לשבת ביטויים כאלה, למשל כדי לקבוע באילו ענפים ירוץ שלב מסוים בתהליך.
לפני שהתבנית נבדקת מול טקסט היא עוברת הכנה: התוכנה מתרגמת אותה למבנה פנימי שאפשר להריץ. לפי הרשומה, הבדיקה של התבנית לפני השלב הזה לא הייתה מספקת, ותבנית שנבנתה בכוונה בצורה מסוימת מפילה את ההכנה שלה. הסיווג שניתן לחולשה הוא CWE-190, גלישת מספר שלם, כלומר מצב שבו חישוב פנימי חורג מהתחום שהמשתנה יכול להכיל והתוצאה שמתקבלת אינה זאת שהקוד התכוון אליה. מכאן, לפי הרשומה, אפשר להגיע להרצת קוד על השרת.
שני פרטים ברשומה מסבירים למה הציון הוא 10 ולא תשע ומשהו. הראשון, התוקף אינו צריך חשבון. השני, ההשפעה חורגת מהרכיב שבו יושב הבאג אל המערכת שמסביבו. הרשומה מוסיפה שהניצול אפשרי בתנאים מסוימים, ואינה מפרטת אותם.
מי מושפע?
שרתי GitLab בשתי המהדורות, הקהילתית CE והארגונית EE, בגרסאות 19.2 שלפני 19.2.8, בגרסאות 19.3 שלפני 19.3.5, ובגרסאות 19.4 שלפני 19.4.2.
מדובר בשרת שמחזיק את קוד המקור של מי שמריץ אותו. בישראל מותקנות התקנות כאלה בחברות תוכנה ובצוותי פיתוח בארגונים גדולים, לא מעט מהן על תשתית פנימית, ואלה ההתקנות שצריך לעדכן ביד. מי שעובד מול השירות המנוהל בענן אינו מתחזק שרת בעצמו.
האם מנוצלת בפועל?
אין ידיעה על ניצול. החולשה אינה מופיעה בקטלוג ה-KEV של סוכנות הסייבר האמריקאית CISA, הרשימה שמרכזת חולשות שיש עליהן ראיות לשימוש בשטח, וזה המצב לפי העדכון האחרון של הרשומה. מצב כזה יכול להשתנות, בטח בחולשה שאינה דורשת חשבון.
שווה להסתכל על המקורות שהרשומה מפנה אליהם. שניים מהם הם דיווחים בפלטפורמת HackerOne, כלומר החולשה הגיעה ל-GitLab דרך מסלול של דיווח מסודר מחוקרים, ולא מתוך תקיפה שנתפסה אחרי שקרתה. למי שמעדכן עכשיו יש סיכוי טוב להקדים.
מה עושים?
עדכנו את השרת לגרסה 19.2.8, 19.3.5 או 19.4.2, לפי הענף שרץ אצלכם. הודעת הגרסה של GitLab מרכזת את התיקון ואת הגרסאות, והיא גם המקום לבדוק אם מאז יצאה גרסה מתוקנת חדשה יותר באותו ענף.
אם אינכם יודעים איזו גרסה רצה אצלכם, היא מופיעה בעמוד /help של ההתקנה עצמה. עדיף לבדוק שם מלהסתמך על הזיכרון מהעדכון האחרון.
אם עדכון מיידי אינו אפשרי, הקטינו בינתיים את החשיפה. שרת פיתוח פנימי אינו צריך להיות נגיש מהאינטרנט הפתוח, וחולשה שאינה דורשת חשבון הופכת כל מי שמגיע לכתובת לתוקף אפשרי. חסימה ברמת הרשת או גישה דרך VPN בלבד מצמצמות את מי שיכול בכלל לנסות.
אחרי העדכון, עברו על יומני הפעילות של השרת מהתקופה שלפניו. ציון 10 בלי צורך בחשבון הוא בדיוק המצב שבו עדיף לבדוק מאשר להניח.