Dirty Pipe הוא באג בליבת לינוקס שאפשר למשתמש מקומי, בלי הרשאות מיוחדות, לכתוב לתוך קבצים שהוא רשאי רק לקרוא, ומשם להסלים את עצמו להרשאות root. הציון שהוא קיבל הוא 7.8, והוא נמצא ברשימת החולשות שידוע כי נוצלו בפועל. הליבה תוקנה בגרסאות 5.10.102, 5.15.25 ו-5.16.11.

מה החולשה?

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

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

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

מי מושפע?

מערכות לינוקס שמריצות ליבה מהטווחים שפורסמו: מ-5.8 ועד 5.10.102, מ-5.15 ועד 5.15.25, ומ-5.16 ועד 5.16.11. לצדן מופיעות ברשומה גם הפצות ארגוניות שמבוססות על אותה ליבה, בהן Red Hat Enterprise Linux 8 על גרסאותיה השונות, כולל הגרסאות לפלטפורמות IBM Z ו-Power.

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

האם מנוצלת בפועל?

כן. ב-25 באפריל 2022 נוספה החולשה לקטלוג ה-KEV של סוכנות הסייבר האמריקאית CISA, רשימת החולשות שידוע כי תוקפים משתמשים בהן בפועל, עם מועד תיקון לגופים הפדרליים ב-16 במאי.

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

מה עושים?

עדכנו את הליבה. הגרסאות שסוגרות את החולשה הן 5.10.102 בענף 5.10, 5.15.25 בענף 5.15 ו-5.16.11 בענף 5.16, וכמובן כל גרסה חדשה מהן.

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

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