ב-Apache Struts, מסגרת עבודה ותיקה לפיתוח יישומי ווב בג'אווה, תוקנה חולשה שמאפשרת הרצת קוד מרחוק. החולשה פורסמה ב-2017 ותוקנה מזמן, והיא נמצאת בדף הזה מסיבה אחת: שרתים שלא עודכנו מאז עדיין נסרקים ונתקפים בעזרתה היום.
מה החולשה?
Struts משמשת לבניית יישומי ווב, ובתוכה יש מנגנון תבניות בשם Freemarker שמרכיב את עמודי ה-HTML.
לתבניות כאלה יש שפת ביטויים משלהן, שמאפשרת לחשב ערכים בזמן בניית העמוד. החולשה מתרחשת כשמפתח משתמש בביטוי במקום שבו הייתה אמורה להופיע מחרוזת פשוטה. במצב הזה, קלט שמגיע מהמשתמש מגיע למנגנון שמעריך ביטויים, והתוצאה היא שהתוקף יכול לגרום להרצת קוד על השרת.
שווה לשים לב להבדל דק אבל חשוב: הבאג אינו בקוד של Struts בלבד אלא בשילוב בין המסגרת לבין הדרך שבה נעשה בה שימוש. זאת אחת הסיבות שחולשות במסגרות עבודה מתגלות מאוחר ומתוקנות לאט.
מי מושפע?
יישומים שמריצים Apache Struts בגרסאות 2.0.0 עד 2.3.33, ובגרסאות 2.5 עד 2.5.10.1.
המשמעות המעשית היא שרתים ותיקים. יישום ג'אווה שנבנה בעשור הקודם, עובד, ואיש כבר לא נוגע בו, הוא בדיוק המקרה. גופים ציבוריים וחברות גדולות בישראל מפעילים לא מעט מערכות כאלה.
האם מנוצלת בפועל?
החולשה אינה מופיעה כיום בקטלוג ה-KEV של סוכנות הסייבר האמריקאית CISA, הרשימה שמרכזת חולשות שידוע על ניצול שלהן בשטח.
זה לא אומר שהיא לא רלוונטית. חולשות Struts היסטוריות נכללות באופן קבוע בכלי סריקה אוטומטיים, מפני שמאגר המטרות, כלומר שרתים ישנים שאיש לא מעדכן, כמעט לא מצטמצם עם השנים. ככל שחולשה ותיקה יותר, כך גדל הסיכוי שמי שעדיין חשוף לה חשוף גם להרבה חולשות אחרות.
מה עושים?
עדכנו את Struts לגרסה נתמכת. הפרטים נמצאים בהודעת האבטחה של הפרויקט.
אם אי אפשר לעדכן, מפני שהיישום ישן מכדי לשאת שדרוג, זאת החלטה שצריכה לעלות לדיון ולא להישאר ברירת מחדל שקטה. האפשרויות הן להגביל את הגישה ליישום לרשת פנימית בלבד, להעמיד לפניו שכבת סינון, או להחליט על החלפה מתוכננת.
בדקו אילו יישומי ג'אווה ישנים בכלל רצים בארגון. במערכות בנות עשור נפוץ למצוא ספריות שאיש לא זוכר שהותקנו.
ואם יש לכם שרת שחשוף לחולשה בת שנים, אל תניחו שהוא נקי. שרת שנגיש מהאינטרנט עם חולשה ותיקה כמעט תמיד כבר נסרק, והשאלה היחידה היא אם מישהו טרח לנצל את התוצאה.