SonicWall SMA1000: שרשור שתי חולשות יום-אפס להשתלטות מלאה על ה-VPN
התוקפים לא פרצו דרך ה-VPN. הם הפכו את ה-VPN עצמו לבסיס ההשתלטות שלהם. חוקרי Volexity פרסמו ב-17 ביולי ניתוח מפורט של קמפיין שבו תוקף בודד ניצל שתי חולשות יום-אפס במכשירי הגישה מרחוק SonicWall SMA1000, שרשר אותן להרצת קוד בהרשאות root, ושתל על הקופסה ארבע נוזקות שונות כדי להישאר בפנים.
הגילוי המקורי הגיע מצוות ה-MDR של Rapid7, שזיהה ניצול פעיל וממוקד עוד לפני שהיצרנית ידעה על הבעיה. SonicWall פרסמה התראת אבטחה ב-14 ביולי, וסוכנות הסייבר האמריקאית CISA הכניסה את שתי החולשות לרשימת החולשות המנוצלות בפועל (KEV) באותו השבוע. מי שמפעיל SMA1000 חשוף עד שהוא מעדכן, ואם המכשיר כבר נוצל, עדכון לבדו לא יספיק.
מה זה SMA1000 ולמה זו מטרה מבוקשת
SMA1000 היא סדרת מכשירי גישה מרחוק (secure mobile access) שארגונים מציבים בקצה הרשת כדי לתת לעובדים חיבור VPN למשאבים הפנימיים. הדגמים המושפעים הם 6210, 7210 ו-8200v. בדיוק מפני שהמכשיר יושב בגבול בין האינטרנט לרשת הפנימית, ומפני שהוא זה שמאמת את המשתמשים, הוא מחזיק בתוכו את מה שתוקף הכי רוצה: פרטי אימות של עובדים, מסד נתונים של הסשנים הפעילים, ואפילו את זרעי ה-TOTP, הערכים הסודיים שמהם נגזרות הספרות המתחלפות של אימות דו-שלבי. לפי Rapid7, זה בדיוק מה שהתוקף חילץ.
התמונה הזאת חוזרת על עצמה כבר שנים. מכשירי הקצה של Ivanti, Fortinet ו-SonicWall הפכו ליעד מועדף של תוקפים מתוחכמים דווקא מפני שהם חשופים לאינטרנט, קשים לניטור מבפנים, ומרכזים בתוכם את המפתחות לכל השאר. Volexity אף מציינת נקודה מטרידה נוספת: מזהה החומרה של המכשיר (product_uuid) קריא לכל תהליך, ובמכשירים פיזיים רבים הוא זהה לערך ברירת מחדל משותף בין לקוחות, כך שהוא הופך לעקיפת אימות משנית מול שירות הבקרה. מכשיר קצה שנפרץ הוא לא רק דלת פתוחה, הוא גם כספת של פרטי אימות לכל הרשת.
שתי חולשות, שרשרת אחת
הראשונה, CVE-2026-15409, היא חולשת SSRF (Server-Side Request Forgery, הכרחת השרת לשלוח בקשות רשת מטעם התוקף) שקיבלה את הציון המקסימלי האפשרי, CVSS 10.0. הנקודה הרגישה היא ה-endpoint בשם /wsproxy. בקשה לא מאומתת שנושאת את הכותרת User-Agent המדויקת "SMA Connect Agent" ופרמטר שמתחיל בערך -3389 גורמת למכשיר להשיב בסטטוס HTTP 101 (מעבר פרוטוקול) ולפתוח מנהרת WebSocket אל שירותים שאמורים להיות נגישים רק מתוך המכשיר עצמו. בלי סשן, בלי סיסמה, בלי כלום. "העקיפה מאפשרת לבקשה חיצונית לא מאומתת לפתוח מנהרת WebSocket אל שירותים שמאזינים רק ל-localhost", כתבו חוקרי Volexity.
מה מסתתר מאחורי אותם שירותים פנימיים? Volexity מנתה שלושה שנחשפו דרך המנהרה: רכיב EPMD בפורט 1051, מסד הנתונים CouchDB בפורט 1050, ושירות הבקרה של המכשיר בפורט 8188. ה-CouchDB הוא החוליה החלשה: הוא הוגדר עם פרטי אימות קבועים מראש, ברירת המחדל הקלאסית admin:admin. דרך המנהרה התוקף מתחבר אליו, ומנצל את הגישה כדי לכתוב קובץ script זדוני אל תיקיית /tmp של המכשיר.
כאן נכנסת החולשה השנייה, CVE-2026-15410 (CVSS 7.2). שירות הבקרה שמאזין בפורט 8188 חושף פעולת RPC בשם execRemoveHotfix שאמורה למחוק עדכון (hotfix) שהותקן. הבעיה: הפעולה בונה את נתיב הקובץ שאותו תמחק בלי לבדוק את הקלט, ומשרשרת ישירות ערך שהתוקף שולט בו. שרשור של רצף ../ בקלט (path traversal, יציאה מהתיקייה המיועדת אל נתיב אחר במערכת הקבצים) מפנה את הפעולה אל ה-script שהושתל קודם ב-/tmp, וזה מורץ בהרשאות root. שתי חולשות בדרגת חומרה שונה, אבל בשרשור הן הופכות בקשת רשת אנונימית אחת לשליטה מלאה על הקופסה, מבלי שהתוקף החזיק ולו פעם אחת בפרטי אימות תקפים.
ארבע נוזקות על הקופסה
אחרי שהשיג root, התוקף לא הסתפק ב-webshell אחד. Volexity תיעד ארבעה כלים ייעודיים שנשתלו על המכשיר.
הראשון, שהחוקרים כינו KNUCKLEBALL, הוא script בפייתון במשקל כ-80 קילובייט. תפקידו להזריק שני קובצי Java (ארכיוני JAR) לתוך תהליך הליבה של המכשיר, workplace.startup.CommandStartup, בעזרת ה-Java Attach API. הוא גם דואג לשרוד אתחול דרך רישום ב-/etc/init.d, ומשנה את הגדרות שרת ה-web כדי לנתב בקשות אל שני נתיבים תמימים למראה, /__api__/login ו-/__api__/logout, ישר אל הנוזקות המוזרקות.
שני הכלים המוזרקים הם Suo5 ו-ORANGETAIL. Suo5 (בקובץ agent_wp8.jar) הוא גרסה שעברה התאמה של כלי proxy קוד-פתוח מוכר, ומשמש את התוקף כדי לנתב תעבורה דרך המכשיר הפרוץ אל תוך הרשת הפנימית. ORANGETAIL (agent_wp9.jar) הוא webshell מותאם אישית בהשראת הכלי Behinder, שמצפין את התקשורת עם התוקף ב-AES-128 עם מפתח קבוע מוטמע, ומחזיר שגיאת 404 לכל מי שלא שולח את מחרוזת ה-User-Agent הנכונה, כדי להסתתר מסריקות אוטומטיות.
הכלי הרביעי, ROOTRUN, הוא קובץ הרצה קטן (בשם המחופש xzfind) עם דגל setuid, שכל תפקידו להעלות כל פקודה שהתוקף מריץ להרשאות root. "הכלי משתמש בפונקציית setuid כדי להעלות את עצמו ל-root, ואז מריץ פקודה שסופקה לו דרך ה-shell", תיארו החוקרים.
יחד ארבעת הכלים בונים דריסת רגל עמידה: KNUCKLEBALL מזריק ומקבע, Suo5 נותן מנהרת תעבורה אל תוך הרשת, ORANGETAIL משמש כדלת אחורית מוסתרת ומוצפנת, ו-ROOTRUN מבטיח שכל פעולה תרוץ בהרשאות הגבוהות ביותר. השימוש בשרת ה-web של המכשיר עצמו כמסלול ההגעה אל הנוזקות, דרך נתיבים שנראים כמו כתובות התחברות תמימות, נועד להטמיע את התקשורת בתוך תעבורה לגיטימית ולהקשות על זיהוי.
מי עומד מאחורי המתקפה
Volexity עוקב אחרי התוקף בשם UTA0533. סימן הפריצה המוקדם ביותר, כתיבת הקובץ xzfind, מתוארך ל-22 ביוני 2026, כלומר התוקף פעל בשקט כשלושה שבועות לפני הפרסום הפומבי. בלוגים של המכשירים נראתה פעילות ניצול פעילה בסוף יוני, וב-2 ביולי אותחל אחד המכשירים, ככל הנראה מהלך שמחק רכיבים זדוניים ששכנו רק בזיכרון. המתקפות הגיעו ממעל 200 כתובות IP שונות, חלקן שירותי VPN מסחריים כמו ExpressVPN ו-MullvadVPN, מה שמקשה על ייחוס גיאוגרפי חד-משמעי.
מה שכן דלף הם שמות המחשבים של התוקף עצמו, שנחשפו כשניסה תנועה רוחבית אל הרשת הפנימית: DESKTOP-5P0TSCP, DESKTOP-IC3C80F ופשוט KALI, שם ברירת המחדל של הפצת הלינוקס הפופולרית לבדיקות חדירה. לפי Rapid7, לאחר שהשיג דריסת רגל התוקף חילץ מהמכשיר פרטי אימות, את מסד הסשנים ואת זרעי ה-TOTP, ואז ביצע אימות מול ה-Active Directory הפנימי ישירות מכתובת ה-IP של המכשיר, בלי לעבור דרך ה-VPN הרגיל. Volexity הוסיף שהתוקף הריץ tcpdump על המכשיר כדי ללכוד תעבורת LDAP לא מוצפנת ולחלץ ממנה עוד פרטי אימות. השילוב הזה, של מכשיר קצה שמשמש גם כנקודת כניסה וגם כמאגר סודות, הוא מה שהופך פריצה כזאת למסוכנת הרבה מעבר לקופסה עצמה.
מה זה אומר בפועל
מי שמפעיל SonicWall SMA1000 צריך לעדכן מיד לגרסאות 12.4.3-03453 או 12.5.0-02835, שסוגרות את שתי החולשות. אבל אם המכשיר היה חשוף לאינטרנט לפני העדכון, עדכון לבדו הוא לא סוף הסיפור: מכיוון שהתוקף חילץ פרטי אימות, מסדי סשנים וזרעי אימות דו-שלבי, צריך להניח שהם דלפו, לאפס את הסיסמאות ולהנפיק מחדש את גורמי האימות של כל המשתמשים שעברו דרך המכשיר. כדאי גם לחפש את סימני הפריצה שפרסם Volexity, ובראשם הקובץ xzfind, ה-script בשם deploy_new.py והגדרות ה-web שהשתנו. מכשיר קצה שנפרץ בשקט במשך שבועות הוא לא אירוע שמסתיים בהתקנת עדכון.
תגובות