הבקשה נדחתה בהודעת שגיאה, והמשיכה משם עד פקודה שרצה כ-root: שרשרת החולשות בשער הדואר של Barracuda
בקשה אחת, שישה שדות בטופס, אל ה-endpoint /cgi-mod/index.cgi של המכשיר. השרת עונה עליה בהודעת שגיאה מסודרת: הסיסמה לא שונתה, תחזרו למסך ההתחברות. ואז, באותה בקשה עצמה, הוא מקבל קובץ גיבוי שצורף אליה, משחזר ממנו שורות אל מסד הנתונים הפנימי שלו, ומריץ אחת מהן כפקודת מערכת בהרשאות root.
את השרשרת הזאת פרסמו ב-5 בנובמבר חוקרי watchTowr Labs, בניתוח שכתב Sina Kheirkhah, על Barracuda Email Security Gateway. היא מורכבת משתי חולשות שהיצרן תיקן שלושה ימים קודם לכן: CVE-2026-116606, עקיפת הרשאות שלא דורשת אימות כלל, ו-CVE-2026-111560, הזרקת פקודות מערכת. לבד, השנייה דורשת חשבון מנהל. ביחד, הראשונה מספקת אותו. בהמשך נעבור חוליה חוליה על הדרך מהודעת השגיאה ועד ה-root, על החותם שהיה אמור לעצור גיבוי מזויף ולא עצר, ועל מה שעדיין לא ידוע על ניצול בשטח.
המכשיר שיושב לפני כל תיבת דואר בארגון
ESG הוא מכשיר שמוצב בגבול הרשת לפני שרתי הדואר: כל מייל נכנס עובר דרכו, נסרק לספאם ולנוזקות, ורק אחר כך מגיע לתיבה של העובד. המכשיר לכן רואה את כל התכתובת הנכנסת, מחזיק פרטי אימות למערכות דואר פנימיות, ויושב בנקודה שחייבת להיות נגישה מהאינטרנט כדי לעשות את העבודה. זה הופך אותו למטרה מבוקשת, וההיסטוריה של הדגם הזה ממחישה את זה היטב. ב-2023 ניצלה קבוצה שמנדיאנט מסמנת כ-UNC4841 את CVE-2023-2868 כחולשת יום-אפס באותם מכשירים, ולפי מה ש-Barracuda פרסמה אז, חלק מהמכשירים שנפגעו היו צריכים החלפה פיזית. אותה חולשה יושבת ברשימת ה-KEV של CISA מ-26 במאי 2023.
מתחת למעטפת, המכשיר הוא יישום Perl עם מסד MySQL להגדרות. החוקרים לא נדרשו להנדסה לאחור של קושחה מוצפנת: הם התקינו שתי גרסאות, 9.4.0.027, שבה החולשות עדיין קיימות, ו-9.4.0.029 המתוקנת, והשוו ביניהן. קובצי התיקון עצמם, כתבו, הכילו "קוד מקור מלא ב-Perl, מה שהפך את החיים שלנו לקלים יותר".
החוליה הראשונה: הבקשה נדחתה, והמשיכה
הלוגיקה שטיפלה בשינוי סיסמה, בשורות 383 עד 406 של המודול Index.pm, התנהגה בצורה שלא מסתדרת עם מה שהיא מדווחת למשתמש. כשהשינוי נכשל, הקוד לא עצר את הבקשה. הוא החזיר את משתנה התפקיד של המשתמש, אותו תפקיד בעל ההרשאות המינימליות שמסך ההתחברות עצמו מקבל, והפונקציה שאחראית על בניית התשובה (response, בשורות 584 עד 597) המשיכה משם לנתב את הבקשה אל המודול שהיא ביקשה. במילים אחרות, השרת אמר "לא" ברובד אחד והמשיך לעבוד ברובד אחר. התיקון של Barracuda מחליף את ההחזרה הזאת ביציאה מוקדמת ומוחלטת מהבקשה, דרך פונקציה חדשה בשם _bailout_with_json_login_response. הערת הקוד בתיקון מסבירה את הכוונה כמעט במילים של דוח חולשה: שליחת השגיאה והפסקה כאן, כי החזרת תפקיד משתמש תאפשר ל-response להריץ את מטפלי המודולים.
ל-NVD נכנסה החולשה ב-2 בנובמבר, עם ציון 9.3 בסולם CVSS 4.0 שקבעה Mandiant כגוף מקצה ה-CVE. הווקטור שלה הוא זה שעושה את ההבדל: PR:N, כלומר אפס הרשאות נדרשות מהתוקף.
אז למה העלאת הקובץ בכלל נענתה?
עקיפת הרשאות שווה משהו רק אם יש לאן ללכת איתה, וכאן נכנס לתמונה מודול בשם bayesian_upload.pm. תפקידו הלגיטימי הוא לקבל קובץ שמשתמש מעלה ולהעביר אותו לשחזור. בדיקת ההרשאות שלו, בנוסח שהחוקרים מצטטים, היא perm { 1 }, ובפועל הקוד יוצא מוקדם רק עבור המשתמש guest. כל תפקיד אחר, כולל זה שהתקבל מההתחברות שנכשלה, עובר.
מה שהמודול מעביר לשחזור הוא ארכיון tar שבתוכו קובץ backup.xml. הרכיב שמטפל בחלק המכונה Spam_Config טוען משם dump של MySQL ומחזיר שורות אל מסד הנתונים המקומי של המכשיר, ובכללן ערך ההגדרה system_timezone. עד כאן לא קרה שום דבר שנראה כמו תקיפה. הועלה גיבוי, ושוחזרו ממנו הגדרות, בדיוק כמו שהתכוון מי שכתב את התכונה.
בין ההעלאה לשחזור כן יש אמצעי הגנה אחד, והוא הסיבה שכל זה היה אמור לא לעבוד. כל רשומת קובץ בגיבוי נושאת חותם שלמות, והמכשיר מוודא אותו לפני שהוא נוגע בתוכן. הרעיון תקין: מי שלא יודע לחשב את החותם לא יכול לייצר גיבוי שהמכשיר יסכים לקרוא. הכול תלוי בסוד שנכנס לחישוב.
לפי התיאור של watchTowr, החותם הוא md5 של תוכן הקובץ בשרשור עם סוד ועם נקודה. הסוד הזה אינו ייחודי למכשיר ואינו מתחלף, אלא מחרוזת קבועה שמוטמעת בקוד, ושמה גם את הכותרת לפוסט של החוקרים: "Barracuda Networks is your new best friend". מרגע שהסוד ידוע, החותם מפסיק להיות הוכחה למשהו. כל אחד יכול לחשב אותו עבור קובץ שהוא בנה בעצמו. ההגנה נשארה במקום, והיא פשוט מאשרת עכשיו גם את מה שהתוקף הכין.
ומשם אל root
עד כאן הגענו למסד הנתונים של המכשיר עם ערך שאנחנו שולטים בו. החוליה האחרונה היא מה שקורה לערך הזה אחר כך. המודול Backup2.pm בנה פקודת מערכת שכותבת את ערך אזור הזמן לקובץ הגדרות, והוא עשה את זה בעזרת backticks, התחביר שמריץ פקודת shell מתוך Perl ומחזיר את הפלט שלה, ו-sed. מרכאות בודדות סביב הערך לא הגנו עליו, כי Perl מעביר את המחרוזת הזאת ל-shell שמפרסר אותה. סקריפט נפרד בשם fix_tz.pl הכיל את אותה תבנית בדיוק עבור /etc/sysconfig/clock, והוא זה שמורץ דרך sudo. זאת הנקודה שבה הערך שהתוקף שתל בגיבוי הופך לפקודה שרצה בהרשאות root.
"זאת לא עוד חולשת OS Command Injection, אלא אחת שרצה כ-root", כתבו החוקרים. החולשה הזאת, CVE-2026-111560, קיבלה 8.6 מ-Mandiant, והווקטור שלה הוא PR:H: היא מניחה שלתוקף יש הרשאות גבוהות. ההנחה הזאת נכונה בחמשת המוצרים האחרים שהיא נוגעת בהם, לפי עמוד האבטחה של Barracuda: Load Balancer ADC, Message Archiver, WAF Control Center, Web Application Firewall ו-Web Security Gateway. ב-ESG היא לא נכונה, כי שם החוליה הראשונה מספקת את ההרשאות בעצמה. התיקון מצד היצרן לא מסתפק בניקוי הקלט: הוא מוודא את ערך אזור הזמן מול התוכן של /usr/share/zoneinfo/ ועובר לכתיבה לקובץ ישירות מ-Perl, בלי shell באמצע.
ההוכחה שהחוקרים הציגו היא בקשת POST אחת מסוג multipart, שמאגדת את שדות שינוי הסיסמה יחד עם הפרמטרים UPDATE_activation_code ו-pu_bayesian_upload וקובץ הגיבוי המוכן. הפקודה שהם הריצו בה הייתה יצירת קובץ, בלי שום תוכן מזיק. הם פרסמו ב-GitHub כלי לבדיקת חשיפה, כדי שארגונים יוכלו לבדוק את עצמם. exploit עובד הם לא פרסמו.
מה עוד לא ידוע
שתי החולשות לא מופיעות ברשימת ה-KEV של CISA, ואין דיווח פומבי שמקשר אותן לתקיפה. זה לא אומר שהן לא נוצלו, אלא רק שאיש לא פרסם שהן כן, וההיסטוריה של הדגם הזה היא בדיוק הסיבה לא להסיק מהשקט יותר ממה שיש בו.
גם הציונים עצמם לא לגמרי מיושבים. ב-NVD שתי הרשומות מסומנות כממתינות לניתוח, כך שהציונים שמסתובבים הם של Mandiant ולא של NVD. בתוך קובץ ההתקנה של התיקון מצאו החוקרים הערה שמדברת על 9.8, והם משערים שמדובר בשתי החולשות שנוקדו יחד, מה שלדבריהם "מומחי CVSS יזהו במהירות כפשע". ועוד פרט שכדאי לשים לב אליו: לפי הערת העדכון באותו עמוד אבטחה, ב-5 בנובמבר שונה בו השדה שמציין אם נדרש אימות עבור CVE-2026-116606. כיום כתוב בו "לא", עם ההסתייגות שנדרשת גישה לממשק הניהול.
מה זה אומר בפועל
אם יש לכם ESG בגבול הרשת, הבדיקה היא לא גרסה אלא תיקון: עמוד האבטחה של Barracuda מונה את התיקונים לפי מזהה, BNSF-40425 לגרסאות 9.4.017 ומעלה ו-BNSF-40430 למה שמתחת, ובשאר המוצרים לפי מזהה בלבד בלי טווח גרסאות. היצרן מדגיש שהתיקונים מותקנים אוטומטית, ולכן שווה לוודא ששירות העדכון האוטומטי באמת פעיל ולא כובה בזמנו לצורך תחזוקה. הצעד השני הוא הצמצום שהיה מונע את כל השרשרת הזאת מהאינטרנט: ממשק הניהול של מכשיר כזה לא צריך להיות נגיש מבחוץ, גם כשהמכשיר עצמו כן. בדקו את זה מכתובת חיצונית, לא מתוך הרשת.
תגובות