CyberPanel הוא לוח ניהול שמתקינים על שרת כדי לנהל ממנו אתרים, דומיינים ומסדי נתונים מתוך הדפדפן. בגרסאות עד 2.3.6, וגם ב-2.3.7 שלא הוחל עליה התיקון, אחת הכתובות בלוח מריצה פקודות מערכת למי שפונה אליה בלי שם משתמש ובלי סיסמה. הציון הוא 10 מתוך 10, והרשומה עצמה אומרת שהחולשה נוצלה בשטח באוקטובר 2024.

מה החולשה?

ב-CyberPanel יש שכבת הגנה בשם secMiddleware, קוד שעובר על בקשות נכנסות לפני שהן מגיעות אל הלוגיקה עצמה ובודק אותן. לפי הרשומה היא מופעלת רק על בקשות מסוג POST, אחת משיטות השליחה של HTTP. בקשה שנשלחת בשיטה אחרת אינה עוברת דרכה בכלל, וכך הכתובת /dataBases/upgrademysqlstatus נשארת פתוחה לכל מי שמגיע אליה. בקוד היא מטופלת בפונקציה upgrademysqlstatus שבקובץ databases/views.py.

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

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

מי מושפע?

הרשומה אומרת שכל הגרסאות עד 2.3.6 חשופות, וכן 2.3.7 כל עוד לא הוחל עליה התיקון. גרסה 2.3.8 כבר כוללת אותו, והשינוי עצמו נכנס בקומיט 5b08cd6.

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

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

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

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

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

מה עושים?

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

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

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