
ההתחברות ל-MCP של OpenCode מסרה כתובת URL של שרת ל-PowerShell — ואין CVE שיסמן זאת
- MoonshotחדשMoonshotAI: Kimi K3.1 Pro2026-10-2455אינטליגנציה
- OrcaחדשOrcaCyber: DeepSeek V4.1 Flash Abliterated2026-10-23$0.70 / $1.60 לכל 1M טוקנים · 199 tok/s
- OrcaחדשOrca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 לכל 1M טוקנים · 14 tok/s
- deepseekחדשDeepSeek: DeepSeek V4.1 Flash 10172026-10-1745אינטליגנציה
- DeepSeekחדשDeepSeek: DeepSeek V4.1 Flash2026-10-1740אינטליגנציה
- OrcaOrca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 לכל 1M טוקנים · 150 tok/s
- openaiOpenAI: GPT-6.1 Sol2026-09-2952אינטליגנציה
- anthropicAnthropic: Claude Sonnet 5.52026-09-2856אינטליגנציה
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 לכל 1M טוקנים · 1062 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2238אינטליגנציה
- OpenAIOpenAI: GPT-6 Sol2026-09-2248אינטליגנציה
- AnthropicAnthropic: Claude Opus 5.52026-09-2258אינטליגנציה
- xAIGrok 4.72026-09-2146אינטליגנציה
- OrcaOrca: OrcaCyber Zero 1.02026-09-17$3.00 / $7.50 לכל 1M טוקנים · 159 tok/s
- OrcaOrca: OrcaVerify Text 1.02026-09-16$2.00 / $0.00 לכל 1M טוקנים · 1906 tok/s
- OpenAIOpenAI: GPT-6 Astra2026-09-0453אינטליגנציה77כתיבת קוד
- GoogleGoogle: Gemini 3.8 Flash2026-09-0241אינטליגנציה76כתיבת קוד
- AlibabaQwen: Qwen3.8 Max (0902)2026-09-0245אינטליגנציה76כתיבת קוד
- AnthropicAnthropic: Claude Fable 5.12026-09-0153אינטליגנציה82כתיבת קוד
- TencentTencent: Hy4 preview2026-08-28$0.83 / $2.50 לכל 1M טוקנים · 48 tok/s
ב-19 באוקטובר 2026חשפה Pillar Security פגיעות הרצת קוד מרחוק ב-OpenCode, סוכן התכנות בקוד פתוח שמתוחזק על ידי Anomaly: שרת Model Context Protocol מרוחק שמפתח הגדיר יכול היה להריץ קוד שרירותי על המכונה של אותו מפתח במהלך התחברות OAuth של MCP, ללא בקשת הסכמה בדרך. הבאג הוגבל ל-Windows ול-Windows Subsystem for Linux, שם OpenCode העביר את כתובת ה-URL להתחברות שסופקה על ידי השרת לפקודת PowerShell ללא escaping. Pillar מציינת את הטווח המושפע כ-1.0.137 עד 1.18.32. Anomaly תיקנה זאת ב-1.18.33, ופורסמה ב-npm ב-28 בספטמבר 2026, ולא ביקשה CVE ולא פרסמה ייעוץ אבטחה — כך ששום דבר בפיד פגיעויות רגיל לא יגיד לצוות מושפע לשדרג. Pillar דיווחה שאין ראיות לכך שהפגיעות נוצלה אי פעם בהתקפה. זהו רשומה אחת ב-ארכיון אירועי ה-AI, שבו כל רשומה כוללת מקורות משלה, חומרה, דרגת ודאות וסימון שנוי במחלוקת.
מה היה הפגם למעשה
כאשר לקוח MCP מתחבר לשרת מרוחק שמבקש הרשאה, הוא מריץ תהליך לחיצת יד לגילוי OAuth. השרת עונה עם 401 ואתגר שמצביע על מסמכי הגילוי שלו, ושדה אחד במסמכים אלה — authorization_endpoint — אומר ללקוח לאן לשלוח את המשתמש כדי להתחבר. זהו מחרוזת חופשית, והצד שמאומת הוא הצד שבוחר אותה.
ב-OpenCode 1.18.32 המחרוזת הזו עברה מהרשת אל מעטפת פקודה. Pillar עקבה אחרי המסלול ממסמך הגילוי של השרת דרך MCP SDK אל oauth-provider.ts, mcp/index.ts ו-browser.ts, וסיים ב-open, החבילה הקטנה שבה OpenCode משתמש כדי להפעיל דפדפן. שום דבר במסלול הזה לא בדק את סכימת ה-URL, ושום דבר לא השווה אותה למקור של השרת שהמפתח הגדיר. לחיצת היד אוטומטית מעצם התכנון — כל הרעיון הוא לשלוח אותך לדף התחברות בלי שתצטרך להעתיק כתובת URL — כך ששום שלב אישור לא עמד בין תשובת השרת למשגר.
The launcher is where it broke. On macOS and Linux, open passes the address as an argument vector and no shell is involved. On Windows, version 10.1.2 of open — the version every affected OpenCode release pinned — builds a PowerShell command, base64-encodes it and runs it with powershell -EncodedCommand. Pillar quotes the source: the application name is escaped on one line, and the target URL is not. PowerShell evaluates $(...) subexpressions inside double-quoted strings, so an address of the form https://evil.test/$([IO.File]::WriteAllText('C:\Users\Public\pwned.txt','RCE')) runs before the browser launch fails. OpenCode discards that failure.
שני מאפיינים הקשו על זיהוי. המטען אינו מכיל רווחים, ולכן נרמול כתובת URL משאיר אותו כפי שהוא, והיא כתובת https רגילה מבחינה תחבירית. והשרת לא היה צריך להיות עוין כשהגדירו אותו: Pillar מציין שפגיעה מאוחרת, רשומת מרשם שנחטפה, התחזות באמצעות שגיאת הקלדה או דומיין שפג תוקפו — כל אחד מאלה היה הופך רשומת תצורה מהימנה למנגנון הפצה.
מי נחשף
האוכלוסייה שנחשפה היא משתמשי Windows ו-WSL שמריצים את OpenCode עם שרת MCP מרוחק מוגדר. Pillar מתאר את OpenCode כמי שיש לו בערך 3 מיליון הורדות npm בשבוע ו-211,000 כוכבי GitHub; הדוח של Infosecurity Magazine מציין שמספר הכוכבים הוא יותר מ-218,000. אף אחד מהנתונים האלה אינו ספירה של התקנות שנפגעו, ואיש לא פרסם ספירה כזו.
הטריגר הוא הנקודה היחידה שבה שני התיאורים העיקריים נבדלים זה מזה, והוא חשוב גם לסיכון וגם לחומרה. Pillar מתאר את הניצול ככזה שאינו דורש אינטראקציה נוספת מצד המשתמש או הסכמה. The Hacker News, בדוח מ-22 באוקטובר שלו, אומר ששלב הדפדפן פועל רק כאשר מפתח מתחיל את ההתחברות — על ידי הרצת opencode mcp auth או ביצוע הבקשה המתאימה — ושהימצאות השרת מוגדר בלבד, או פתיחת סשן, אינה מגיעה אליו. כך או כך, המפתח לא עושה דבר חריג; התחלת אימות מול שרת שכבר נמצא בתצורה היא שגרה. אבל "אין אינטראקציה" ו"אינטראקציה שגרתית אחת" הן טענות שונות, וההבדל הזה מזין ישירות את הניקוד.
התיקון הגיע כשהוא מתואר כריפקטור
הפגם דווח באופן פרטי על ידי Pillar דרך GitHub Security Advisory ב-29 באוגוסט 2026, עם חומר שחזור מלא. ב-25 בספטמבר נשלחה פנייה נוספת מחוץ לשרשור הייעוץ; Anomaly אישרה שהדוח הגיע לצוות שלה והשיבה ששרתי MCP זדוניים נמצאים מחוץ למודל האיומים שלה. באותו יום נכנסה בקשת משיכה #51414 — שמוזגה כ-commit 29f07e0c — למיזם. היא מתוארת כמאחדת שמונה אתרי קריאה להשקת דפדפן לפונקציית עזר אחת. גרסה 1.18.33 הגיעה ל-npm שלושה ימים לאחר מכן, ב-28 בספטמבר.
לטלאי יש שלוש שכבות. התלות הפתוחה הועברה ל-11.0.4, שעוטפת את היעד במרכאות בודדות, ו-PowerShell אינו מרחיב דבר בתוך מרכאות בודדות. עוזר חדש בשם openUrl() דוחה סכמות שאינן HTTP(S). בדיקת סכמה נוספה ל-redirectToAuthorization עצמו, בגבול שצוין בדוח של Pillar. לא בקשת ה-pull request ולא הערות השחרור מזכירות פגם אבטחה, ו-Anomaly לא ביקשה CVE.
The Hacker News מדווח שמדיניות האבטחה שפרסמה Anomaly קובעת ששרתי MCP שמשתמש מגדיר נמצאים "מחוץ לגבול האמון שלנו", ושהחברה פרסמה התראות לגבי פגמי הרצת קוד אחרים ב-OpenCode השנה, כולל אחד שתוקן באוגוסט. תיאורו של Pillar את התגובה שהיא קיבלה גלוי יותר: "עדכנו את התלות, אבל באופן כללי, ניסיון להתמודד עם שרת MCP זדוני נמצא מחוץ למודל האיומים שלנו."

כשקוראים אותה כרצף, ציר הזמן ממקם את הבאג של OpenCode בסוף מסלול בן חמש שנים ולא בתחילתו. הפגם שיצר אותו כבר היה פומבי, והתיקון שלו כבר יצא, לפני שהשורה שהשתמשה בו נכתבה.
מדוע אימות סכימה לא היה מונע זאת
הפתרון המוסכם לסוג זה של באג הוא אימות סכימת URL: לחסום את הסכימות המוזרות, לאפשר http ו-https, וזהו. זה מה שה-MCP TypeScript SDK מספק, וזה מה ש-OpenCode הוסיף ב-1.18.33. המטען של Pillar עובר את כל אחת מהבדיקות האלה, כי הוא https. רשימת החסימה של ה-SDK חוסמת javascript:, data: וvbscript:; רשימת היתר מחמירה יותר של http/https הוצעה בבקשת המשיכה #841 של ה-SDK באוגוסט 2025 ונסגרה ללא מיזוג, בעוד שבקשת המשיכה #877 הביאה את רשימת החסימה של שלוש הסכמות ב-v1.17.4 — ו-Pillar אומרת שזו עדיין הייתה המדיניות ב-SDK 1.32.0 כשהיא פרסמה. מה שבאמת סגר את החור ב-OpenCode היה עדכון התלות, לא הבדיקות שנראות כמו תיקון האבטחה.
ההיסטוריה מצביעה נגד ראיית זה כמעידה של פרויקט אחד. חבילת open נושאת אזהרה ב-README מאז 2021 שלפיה היא אינה מספקת ערבויות אבטחה ושניקוי הקלט הוא באחריות הקורא. באוקטובר 2020 משתמש פתח את issue #202 ודיווח שכתובת URL המכילה סימן דולר איבדה חלק מעצמה ב-WSL 2 — הרחבת המחרוזת, שהוגשה כמטרד של קישור שבור. באוקטובר 2023 מהנדס ב-Adobe פתח את issue #323, "הזרקת פקודות של מערכת ההפעלה ב-Windows בעת פתיחת כתובות URL", עם הוכחת היתכנות בת שורה אחת: open('https://$(calc.exe)'). המתחזק ציטט את ה-README ואמר שבקשות משיכה שמשפרות את ה-escaping יתקבלו בברכה; ה-issue נסגר כלא מתוכנן שלושה ימים לפני ש-open 11.0.0 הפיצה את ה-escaping בכל זאת, ב-15 בנובמבר 2025. OpenCode כתבה את הקריאה שלה לפתיחת הדפדפן ב-7 בדצמבר 2025, שלושה שבועות אחרי שגרסה מתוקנת של open כבר הייתה קיימת, מול pin שכבר היה בן חודשים.
בחודשים שלפני שנכתבה אותה קריאה, האקוסיסטם של MCP תיעד שלושה CVE-ים על אותו sink או על אותו שדה: CVE-2025-6514 ב-mcp-remote (CVSS 9.6, נחשף על ידי JFrog ב-9 ביולי 2025), CVE-2025-58062 ב-openmcp-client, ו-CVE-2025-10619 ב-sequa-mcp. הניגוד של Pillar הוא ללקוחות שלעולם אינם בונים פקודת shell ממחרוזת מרוחקת כלל: הוא מציין את gemini-cli, Claude Code, github-mcp-server ו-mcp-gateway של Docker ככאלה שמעבירים את ה-URL כווקטור ארגומנטים, מה שמביא לכך שהשאלה מה מכילה המחרוזת מפסיקה להיות קריטית.

מה מבוסס, ומה לא
הרשומה מדורגת בדרגת מהימנות A על ידי הארכיון, והדיווח שמאחוריה עומד במבחן. Infosecurity Magazine פרסם ב-20 באוקטובר ראיון משלו עם אילון כהן מ-Pillar; The Hacker News פרסם דיווח משלו ב-22 באוקטובר; DKCERT, ה-CERT הלאומי של דנמרק, סיכם את הממצא ב-21 באוקטובר תוך ציטוט של Infosecurity; ומעבדת המחקר של Cloud Security Alliance פרסמה ניתוח שמוסיף את ההסתייגות המהותית היחידה שלהלן. אף אחד מאלה אינו הגורם המדווח, והם מסכימים על המנגנון, על הגרסאות ועל התיקון השקט. Anomaly עצמה לא פרסמה דבר על הפגם.
נקבע, רשמית:
• הפגם, המנגנון שלו והיקף הפלטפורמות שלו. Pillar מזהה שורות מקור ספציפיות והתיקון גלוי ב-diff הציבורי 1.18.32-to-1.18.33; שני דיווחי החדשות הבלתי־תלויים מתארים את אותה זרימת נתונים.
• הטווח המושפע, 1.0.137 עד 1.18.32, והגרסה המתוקנת, 1.18.33, שפורסמה ב-28 בספטמבר 2026.
• שאין CVE ושאין ייעוץ אבטחה. ניתן לבדוק זאת, וזוהי העובדה שעליה נשענים המגנים.
• שלא דווח על ניצול. Pillar מציינת שלא ראתה סימנים לשימוש בהתקפות, ו-The Hacker News מציין שלא פורסמו אינדיקטורים לפשרה. היעדר אינדיקטורים שפורסמו אינו הוכחה להיעדר, ובלי טלמטריה מהספק לא ניתן לאשר אף אחת מהקריאות.
לא מבוסס, או במתח:
• ה־9.8. המספר הזה הוא הציון המוצע של Pillar ב-CVSS v3.1, לא ציון רשמי: בהיעדר CVE אין ציון NVD ואין ציון ספק. הערת המחקר של Cloud Security Alliance מציינת ש-9.8 מניח שלא נדרשת אינטראקציית משתמש, ושאם הדיווח של The Hacker News על הטריגר נכון, דירוג שבו נדרשת אינטראקציית משתמש — כ-8.8 — יתאים יותר. הקטע הזה לא מכריע בכך; תג החומרה הגבוהה של הארכיון עצמו הוא סיווג, לא ציון.
• תאריך הפרסום. הדוח של Pillar נושא תאריך 19 באוקטובר 2026 בכותרתו, ושתי הכתבות החדשותיות משתמשות בתאריך הזה; ציר הזמן של החשיפה בתחתית הדוח של Pillar עצמו מציין את הפרסום כ-4 באוקטובר. הארכיון רושם 19 באוקטובר ברמת דיוק של יום.
• גודל האוכלוסייה החשופה. לא פורסם מספר. נתוני ההורדות והכוכבים לעיל הם מדדי מאגר, לא התקנות.
• האם מכונה כלשהי נפרצה בפועל. שום דבר שפורסם אינו תומך בכך, והתיעוד אינו מצביע על נזק ממשי.

מה השתנה, ומה לעשות
התיקון הוא בדיקת גרסה, כי שום דבר אחר לא יגיד לך. OpenCode 1.18.33 ואילך מתוקן. יש לאתר התקנות מושפעות באמצעות עריכת מלאי של החבילה ישירות: ההמלצה של Pillar היא לערוך מלאי של OpenCode עצמו במקום להמתין לפיד, וההערה של Cloud Security Alliance מציעה לשאול את גרסת החבילה opencode-ai, מכיוון שאין מזהה שפיד יכול להתאים לו. צוותים שלא יכולים לשדרג ופועלים ב-Windows או ב-Windows Subsystem for Linux צריכים להסיר שרתי MCP מרוחקים שלא נבדקו מהתצורה של OpenCode; opencode mcp list מציג אילו שרתים קיימים.
לכל מי שמתחזק לקוח MCP, ההכוונה של Pillar צרה יותר מהעצה המקובלת: העבירו כתובות URL כווקטור ארגומנטים ולעולם אל תבנו שורת פקודה ממחרוזת מרוחקת, קשרו את גילוי OAuth למקור של השרת שהמשתמש הגדיר, והתייחסו למסמכי גילוי, למטא-נתוני שרת ולתיאורי כלים כקלט לא מהימן ולא כהגדרות. ההערה של Cloud Security Alliance מוסיפה היוריסטיקות ציד — תהליך OpenCode שמפעיל powershell.exe עם -EncodedCommand, למשל — תוך הדגשה שאלה הצעות להנדסת זיהוי, ולא אינדיקטורים לפשרה שפורסמו.
לא הפריצה ל-Console
הגילוי של Pillar הגיע ימים לאחר ש-Anomaly אישרה פרצה נפרדת ב-Console המתארח של OpenCode, שעשויה הייתה לחשוף מפתחות ספק API שמורים. שני האירועים אינם קשורים, ואילון כהן מ-Pillar היה מפורש לגבי ההבדל בראיון שלו ל-Infosecurity Magazine. "הפרצה פגעה במערכת מדור קודם מאחורי פרוקסי מפתחות מתארח, וחשפה מפתחות ספקים שהמשתמשים אחסנו שם," אמר. "הפגיעות שדיווחנו עליה פועלת בכיוון ההפוך: שרת MCP מרוחק זדוני שמבצע קוד על המחשב של המפתח עצמו במהלך לחיצת היד של OAuth. מטרה ועמדת תוקף שונות." הפרצה ב-Console היא רשומה נפרדת בארכיון, ויש לקרוא את השתיים כרשומות נפרדות.
מה שמקשר ביניהם, בניסוח של כהן, הוא השאלה העומדת בבסיס שניהם: "למי אתה נותן למסור פרטי גישה וקלטים לכלי קידוד מבוסס בינה מלאכותית, ומה הכלי הזה עושה איתם."
פער הגילוי הוא החלק שמאריך ימים יותר מהבאג עצמו. פגם שמגליו מדרגים כקריטי, שתוקן במסגרת עדכון תלות, ושאינו נוכח באף אות אוטומטי שמומחה הגנה נשען עליו בדרך כלל — מותיר את מיפוי המלאי הישיר כשיטת הגילוי היחידה, והספק לא פרסם שום התראה שמורה למישהו לבצע אחד כזה.
