Incus היא מערכת לניהול מכולות ומכונות וירטואליות על שרת אחד. לפי הרשומה, לקוח שיש לו הרשאה ליצור מכונות יכול לנצל חולשה בייבוא גיבויים כדי לכתוב קבצים על השרת המאחסן עצמו, מחוץ לשטח שהוקצה למכונה שלו. הציון הוא 9.4 מתוך 10 בסולם CVSS 4.0, והתיקון נמצא בגרסאות 7.0.2 ו-7.5.0.

מה החולשה?

כשמערכת שומרת קובץ שהגיע מבחוץ, היא מצרפת את השם שקיבלה לתיקייה שהיא ייעדה לו. אם השם מכיל רצף שאומר "תיקייה אחת למעלה", והמערכת אינה בודקת אותו, הנתיב שנבנה מצביע אל מחוץ לתיקייה המיועדת. אפשר לטפס כך עד לכל מקום בשרת. לכשל הזה קוראים Path Traversal, והסיווג הוא CWE-22.

כאן השם הבעייתי מגיע ממקום שלא חושבים עליו. גיבוי של מכונה ב-Incus כולל קובץ index.yaml שמתאר מה יש בגיבוי, ובתוכו גם שמות של נפחי אחסון נוספים שהמכונה תלויה בהם. לפי הרשומה, השמות האלה לא עברו אימות, כך שתוקף יכול להכין גיבוי שבו שם נפח תלוי מכיל רצפי ../, לייבא אותו, ולגרום ליצירת תיקיות על השרת עם תוכן שהוא קובע.

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

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

מי מושפע?

הרשומה מגדירה שני טווחים: Incus מגרסה 7.0.0 לפני 7.0.2, ומגרסה 7.1.0 לפני 7.5.0. מי שעל 7.0.2 ומעלה בענף הראשון, או על 7.5.0 ומעלה בשני, מחוץ לטווח.

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

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

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

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

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

מה עושים?

1. בדקו את הגרסה שמותקנת אצלכם והשוו לשני הטווחים: בענף 7.0 עדכנו ל-7.0.2 או מעלה, ובענף 7.1 ואילך ל-7.5.0 או מעלה.
2. אם אינכם יכולים לעדכן מיד, הנתיב שהרשומה מתארת מתחיל בייבוא של גיבוי. בדקו מי מורשה לייבא גיבויים וליצור מכונות במערכת, וצמצמו את הרשימה למי שחייב. זאת קריאה של התיאור ולא מעקף שהמפתחים פרסמו.
3. אחרי העדכון, אם המערכת פתוחה למשתמשים שאינם מנהלים, חפשו תיקיות בהרשאות root שנוצרו במקומות שאינכם מזהים מחוץ לשטח האחסון של המכונות, ובדקו את יומן הייבוא של גיבויים.
4. הפרטים המלאים נמצאים בהודעת האבטחה של Incus, והיא גם חלק מסדרת הודעות שפורסמה באותו מועד, כך ששווה לעבור עליה כולה ולא רק על החולשה הזאת.