בליבת לינוקס תוקנה חולשה במנגנון הפנימי שמנהל נעילות בין תהליכים. משתמש או תוכנה שכבר רצים על המערכת יכולים לנצל אותה כדי להרחיב את ההרשאות שלהם. אין כאן דרך לתקוף מרחוק, והתיקון כבר שולב בגרסאות הליבה המעודכנות.
מה החולשה?
כשכמה תהליכים במערכת צריכים את אותו משאב, הליבה מנהלת תור. מנגנון הנעילות אחראי לרשום מי ממתין למה, ולשחרר את הממתינים בסדר הנכון.
החולשה היא באג מסוג use after free, שימוש בזיכרון אחרי שחרורו. הליבה שחררה מבנה נתונים אבל השאירה מצביע שממשיך להצביע על אותו מקום. אם התוקף מצליח לגרום לזיכרון הזה להתמלא בתוכן שהוא בחר לפני שמשתמשים בו שוב, המערכת מתייחסת לנתונים שלו כאילו היו המבנה המקורי.
מה שקרה כאן ספציפית הוא שהקוד שמסיר ממתין מהתור פעל על התהליך הנוכחי במקום על התהליך שבאמת המתין. בתרחיש מסוים אלה אינם אותו תהליך, ומכאן נובעים כמה כשלים בבת אחת, ביניהם מצביע משוחרר שנשאר תלוי באוויר.
הפרטים האלה טכניים מאוד, וזה אופייני לחולשות ליבה. מה שחשוב לגזור מהם הוא ההבדל בין באג שגורם לקריסה לבין באג שמאפשר לתוקף לשלוט במה שקורה אחריה. זה מהסוג השני.
מי מושפע?
מערכות שמריצות ליבת לינוקס מגרסה 2.6.39 ואילך, לפני התיקונים שנכנסו בגרסאות 6.1.175, 6.6.140, 6.12.86 ו-6.18.27.
טווח הגרסאות הרחב מטעה מעט. בפועל, משתמשי הפצות לינוקס נפוצות מקבלים את התיקון דרך העדכונים הרגילים של ההפצה, ולא צריכים להתעסק עם מספרי ליבה. הרלוונטיות הגבוהה יותר היא לשרתים ולמערכות משובצות שמריצים ליבה מותאמת ולא מתעדכנים אוטומטית.
האם מנוצלת בפועל?
נכון לעדכון האחרון של הדף הזה, החולשה אינה מופיעה בקטלוג ה-KEV של סוכנות הסייבר האמריקאית CISA, הרשימה שמרכזת חולשות שידוע על ניצול שלהן. כלומר אין דיווח פומבי על ניצול.
חשוב גם לשים לב לוקטור: הגישה הנדרשת היא מקומית. אין כאן דרך לתקוף שרת מרחוק. חולשות מהסוג הזה משמשות בדרך כלל כשלב שני, אחרי שתוקף כבר השיג דריסת רגל כלשהי במערכת.
מה עושים?
עדכנו את המערכת דרך מנהל החבילות של ההפצה שלכם, והפעילו אותה מחדש. עדכון ליבה נכנס לתוקף רק אחרי אתחול, וזאת הנקודה שהכי הרבה שרתים נתקעים בה: העדכון הותקן, אף אחד לא אתחל, והמערכת ממשיכה לרוץ על הליבה הישנה.
בשרתים שאי אפשר לאתחל בקלות, בדקו אם ההפצה שלכם מציעה עדכון ליבה חם. זה קיים בחלק מההפצות המסחריות ומאפשר לסגור את הפער עד לחלון האתחול הבא.
מכיוון שהניצול דורש גישה מקומית, ההגנה המשלימה היא לצמצם מי יכול להריץ קוד על השרת מלכתחילה. משתמשים מיותרים, שירותים שרצים בהרשאות גבוהות מהנדרש וגישת מפתחים ישנה הם מה שהופך חולשה מקומית לרלוונטית.