רכיב ה-HTTP של CrushFTP בודק בקשות חתומות בסגנון S3, ובמסלול הזה הוא מאמת את זהות המשתמש לפני שהוא דורש סיסמה. בקשה פגומה במיוחד מפילה את הקוד לפני שהוא מגיע לניקוי הסשן, וכך נשאר סשן מחובר בשם משתמש שלא סופקה עבורו סיסמה. התוצאה היא התחברות כמעט לכל שם משתמש מנוחש, כולל חשבון המנהל crushadmin, והציון הוא 9.8 מתוך 10. לפי הרשומה החולשה נוצלה בשטח במרץ ובאפריל 2025.

מה החולשה?

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

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

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

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

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

הרשומה מוסיפה תנאי אחד שמצמצם: התקנה שעובדת דרך שרת מתווך ב-DMZ אינה חשופה.

מי מושפע?

לפי הרשומה, כל גרסה בענף 10 מ-10.0.0 ועד לפני 10.8.4, וכל גרסה בענף 11 מ-11.0.0 ועד לפני 11.3.1. כלומר התיקון נכנס ב-10.8.4 ובענף האחר ב-11.3.1.

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

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

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

הרשומה פורסמה ב-NVD ב-3 באפריל 2025. הניצול התחיל לפני כן ונמשך אחרי כן.

מה עושים?

1. עדכנו ל-10.8.4 או ל-11.3.1, לפי הענף שאתם עליו. עמוד העדכונים של CrushFTP מחזיק את הפרטים ואת ההורדה.

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

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

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

5. לניתוח הטכני של הבאג, כולל ההסבר על הכותרת המקוצצת, ראו את הפירוק של ProjectDiscovery.