ZimReaper: כך קבוצת ריגול רוסית גונבת 90 ימי מייל מ-Zimbra ברגע שההודעה נפתחת
ההודעה נכנסת לתיבה כמו כל מייל אחר. אין קובץ מצורף חשוד, אין קישור שמבקש ללחוץ, ובחלק מהמקרים גם אין טקסט שנראה חריג. אבל ברגע שהנמען פותח אותה, או סתם מסמן אותה בחלונית התצוגה של Zimbra, קוד מתחיל לרוץ בדפדפן שלו ולהעתיק את תיבת הדואר שלו לשרת של תוקף רוסי.
זאת התמצית של קמפיין שחוקרי Unit 42 של פאלו אלטו וProofpoint תיארו בסוף יולי, סביב חולשה בשם CVE-2025-66376 בשרתי הדואר Zimbra. שתי החברות עוקבות אחרי אותה קבוצה בשמות שונים, והרשויות בארה"ב כבר הוציאו התרעה משותפת. בהמשך נראה איך מייל בודד מצליח להריץ קוד למרות שהשרת אמור לנקות אותו, מה הקוד גונב ברגע שהוא רץ, ולמה גם מי שיחליף סיסמה עלול להישאר עם דלת פתוחה.
רקע קצר לפני המכניקה
Zimbra היא חבילת דואר ולוח שנה שארגונים מריצים על השרתים של עצמם, במקום להישען על Gmail או Microsoft 365. בדיוק בגלל זה היא מטרה מבוקשת: משרדי ממשלה, גופי ביטחון ומוסדות מחקר שרוצים להחזיק את הדואר בבית בוחרים בה, והתעבורה שעוברת דרכה מעניינת מאוד את מי שעוסק בריגול. זאת גם לא הפעם הראשונה. Proofpoint מסמנת קו שלם של מבצעים נגד שרתי webmail פחות מוכרים תחת השם Operation RoundPress, ו-Zimbra חוזרת בהם שוב ושוב.
החולשה כאן היא מסוג Cross-Site Scripting (XSS, הזרקה של קוד שרץ בדפדפן דרך תוכן שהאתר מציג בלי לסנן אותו כמו שצריך). מה שהופך את המקרה הזה למעניין הוא לא עצם קיום החולשה, אלא הדרך שבה התוקפים הצליחו לעקוף את ההגנה שאמורה למנוע אותה.
איך מייל אחד מריץ קוד בדפדפן שלכם
כדי שמייל HTML לא יריץ קוד, לכל לקוח webmail יש רכיב שמנקה את גוף ההודעה לפני שהוא מציג אותה: הוא אמור להוריד תגיות מסוכנות ולהשאיר רק עיצוב תמים. הטריק של המתקפה הזאת הוא שהתוקפים בנו את המטען כך שהמנקה עצמו ירכיב אותו בחזרה.
בפועל זה עובד ככה. התוקפים מחביאים בתוך div מוסתר (display:none) תגית svg עם onload, החלק שירוץ ברגע שהאלמנט נטען. אבל הם לא כותבים אותה שלמה, אלא מפרקים אותה לחתיכות ומפזרים ביניהן הוראות @import מזויפות של CSS והערות HTML. המסנן של Zimbra רואה את רצפי ה-@import, מזהה אותם כדבר שצריך להסיר, ומוחק אותם. וכשהוא מוחק אותם, שאר התווים נדבקים חזרה זה לזה לכדי תגית תקינה. Proofpoint קוראת לטריק הזה tag-splitting, פיצול תגיות. בלשון הדו"ח: "המסנן מסיר או משנה את רצפי ה-@import, והתווים שנשארים מתחברים למבנה תקין: svg onload=eval(atob(...))."
ברגע שהתגית הזאת מורכבת, הדפדפן טוען אותה, ה-onload יורה, ופיסת JavaScript מקודדת ב-Base64 מפוענחת ורצה. היא רצה בתוך ההקשר של הדפדפן, כלומר עם כל ההרשאות של המשתמש המחובר. "הסקריפט שרץ בהקשר של עמוד הדפדפן מקבל גישה לכל המידע שזמין בתוך סשן ה-webmail המאומת", כותבים ב-Proofpoint.
כמה קליקים צריך בשביל זה? כאן החוקרים לא לגמרי מסכימים. Proofpoint מכנה את זה half-click, חצי קליק, כי מספיק לפתוח את ההודעה או לסמן אותה בחלונית התצוגה. Unit 42 קוראת לזה zero-click, בלי קליק בכלל. גם מסדי הציונים חלוקים: NVD נותנת לחולשה 6.1 מתוך 10 בהנחה שיש אינטראקציה של המשתמש, בעוד MITRE נותנת לה 7.2 בהנחה שאין. מבחינת הקורבן ההבדל זניח. לא צריך ליפול בפח, מספיק לקרוא מייל.
מה הסקריפט עושה ברגע שהוא רץ
עד כאן איך הקוד נכנס. מה שהוא עושה אחר כך מסודר ומהיר.
ה-JavaScript עובר על כל המיילים מ-90 הימים האחרונים שהמשתמש יכול לגשת אליהם, ומשתמש ביכולת הייצוא המובנית של Zimbra כדי לארוז אותם לקובץ TGZ ולשלוח אותו בבקשת HTTP POST לשרת שליטה ובקרה (C2, השרת שאליו הנוזקה מדווחת ומעלה מידע). זה לא נעצר במיילים. הסקריפט מריץ שאילתות על ה-Global Address List, ספר הכתובות הארגוני, ומחלץ ממנו את כתובות המייל של כל הארגון, שם וכתובת של כל עובד. הוא אוסף גם סיסמאות ששמורות במילוי אוטומטי בדפדפן, את קודי הגיבוי של האימות הדו-שלבי (2FA scratch codes, הקודים החד-פעמיים שמאפשרים להיכנס גם בלי הטלפון), ואת ה-CSRF token של הסשן.
את המידע הוא מוציא בשתי דרכים, לפי הגודל. פיסות קטנות נשלחות מקודדות בתוך שאילתות DNS, בקשות שנראות תמימות ושרוב הארגונים לא חוסמים ולא מנטרים לעומק. את הדברים הכבדים, כמו ארכיון תיבת הדואר, הקבוצה מעלה דרך HTTPS כקובץ דחוס. Proofpoint מכנה את מסגרת האיסוף הזאת Flowerbed.
הדלת האחורית ששורדת איפוס סיסמה
עכשיו מגיע החלק שהופך אירוע חד-פעמי לגישה קבועה. אחרי שהסקריפט אסף את המידע, הוא פונה ל-API של Zimbra ומייצר סיסמת אפליקציה ייעודית בשם ZimbraWeb. סיסמת אפליקציה כזאת נועדה במקור לתוכנות דואר חיצוניות שלא יודעות לעבור אימות דו-שלבי, ובדיוק בגלל זה היא עוקפת אותו: היא מאפשרת התחברות דרך IMAP, POP3 או SMTP בלי הקוד השני. במקביל הקבוצה מדליקה את IMAP בחשבון אם הוא היה כבוי.
כאן הבעיה האמיתית. הסיסמה הזאת שורדת איפוס סיסמה, כפי שBleepingComputer ניסחה על בסיס ההתרעה: app-specific passwords survive password resets. פירוש הדבר שארגון שגילה את הפריצה, עדכן את Zimbra והחליף לכל המשתמשים סיסמה, עדיין משאיר לתוקף כניסה פתוחה דרך ה-ZimbraWeb שנוצר. לתקן את השרת זה הכרחי, אבל לבד זה לא מספיק.
מי עומד מאחורי זה, ומי המטרות
הקבוצה מזוהה בכמה שמות. Proofpoint קוראת לה TA488, Unit 42 מסמנת אותה CL-STA-1114, ובקהילה היא מוכרת בעיקר בשם LAUNDRY BEAR, השם שהמודיעין ההולנדי נתן לה במאי 2025 אחרי חשיפת פריצה למשטרה הלאומית ההולנדית. מיקרוסופט מכנה קבוצה חופפת Void Blizzard. כל הגורמים מסכימים על דבר אחד: מדובר בריגול בחסות מדינה רוסית. Proofpoint מוסיפה שלפי כתבי אישום פדרליים בארה"ב, TA488 הוא קבלן פרטי שעובד בשירות המודיעין הרוסי.
רשימת המטרות מציירת תמונה ברורה של ריגול מדינתי: מדינות נאט"ו ואוקראינה, מדינות חבר העמים ואפריקה, וגם ארגונים בארה"ב. לפי ההתרעה, המגזרים שנפגעו כוללים ממשל, ביטחון והבסיס התעשייתי הביטחוני, אנרגיה, תחבורה, פיננסים, חינוך, תקשורת, אכיפת חוק וארגונים לא-ממשלתיים. Unit 42 ספרה תשע כתובות IP ותשעה דומיינים לשרתי ה-C2, שכל אחד מהם היה פעיל בממוצע 35.4 ימים לפני שהוחלף, סימן לתשתית מתוחזקת שמתחלפת כל הזמן. לצד ניצול החולשה, הקבוצה מפעילה גם ערכות פישינג שמתחזות למסכי ההתחברות של Zimbra.
ובאשר לציר הזמן: החולשה נוצלה כיום-אפס במשך כחמישה חודשים ב-2025 לפני ש-Zimbra תיקנה אותה ב-6 בנובמבר 2025. CISA הוסיפה אותה לרשימת החולשות המנוצלות שלה (KEV) ב-18 במרץ 2026, וב-23 ביולי 2026 יצאה ההתרעה המשותפת של CISA, ה-NSA וה-FBI.
מה זה אומר בפועל
אם הארגון שלכם מריץ Zimbra, שתי הגרסאות שסוגרות את החולשה הן 10.0.18 ו-10.1.13, וכדאי כבר להיות מעבר להן. אבל בגלל הדלת האחורית, עדכון לבדו לא סוגר את הסיפור: צריך לעבור על כל חשבון ולבדוק אם נוצרה בו סיסמת אפליקציה בשם ZimbraWeb ולבטל אותה, לבדוק אם IMAP הודלק בלי סיבה, ולעבור על יומני הגישה לתיבות. מי שמצא סימן לפריצה צריך להניח שגם קודי האימות הדו-שלבי דלפו, ולעבור לאימות עמיד לפישינג. עדכנתם, אימתתם, אבל לא ביטלתם את ZimbraWeb? התוקף עדיין בפנים.
תגובות