
تسجيل الدخول عبر 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 لكل مليون رمز · 199 tok/s
- OrcaجديدOrca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 لكل مليون رمز · 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 لكل مليون رمز · 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 لكل مليون رمز · 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 لكل مليون رمز · 159 tok/s
- OrcaOrca: OrcaVerify Text 1.02026-09-16$2.00 / $0.00 لكل مليون رمز · 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 لكل مليون رمز · 48 tok/s
في 19 أكتوبر 2026 كشفت Pillar Security عن ثغرة تنفيذ شيفرة عن بُعد في OpenCode، وكيل البرمجة مفتوح المصدر الذي تديره Anomaly: خادم بعيد لـ Model Context Protocol كان مطوّر قد أعدّه يمكنه تشغيل شيفرة عشوائية على جهاز ذلك المطوّر نفسه أثناء تسجيل الدخول عبر OAuth الخاص بـ MCP، دون أي مطالبة موافقة بين ذلك. كانت العلة محصورة في Windows وWindows Subsystem for Linux، حيث سلّم OpenCode عنوان URL لتسجيل الدخول الذي يوفّره الخادم إلى أمر PowerShell دون تهريبه. وتضع Pillar نطاق الإصدارات المتأثرة عند 1.0.137 حتى 1.18.32. أصلحت Anomaly العلة في 1.18.33، ونشرت الإصدار على npm في 28 سبتمبر 2026، ولم تطلب أي CVE ولم تنشر أي استشارة أمنية — لذا لن يُخبر أي شيء في خلاصة ثغرات عادية فريقًا متأثرًا بضرورة الترقية. لم تُبلِغ Pillar عن أي دليل على أن العلة استُخدمت في هجوم. هذا سجل واحد في أرشيف حوادث الذكاء الاصطناعي، حيث يحمل كل مدخل مصادره الخاصة وشدته ودرجة ثقته وعلامة كونه متنازعًا عليه.
ما كان العيب في الواقع
عندما يتصل عميل 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 في 29 أغسطس 2026، مع مواد إعادة إنتاج كاملة. في 25 سبتمبر تابعت خارج سلسلة نقاش الاستشارة؛ وأكدت Anomaly أن التقرير وصل إلى فريقها، وردّت بأن خوادم MCP الخبيثة تقع خارج نموذج التهديد الخاص بها. وفي اليوم نفسه، وصل طلب السحب #51414 — الذي دُمج بوصفه الالتزام 29f07e0c —. ويوصف بأنه يوحّد ثمانية مواضع استدعاء لإطلاق المتصفح في دالة مساعدة واحدة. ووصل الإصدار 1.18.33 إلى npm بعد ثلاثة أيام، في 28 سبتمبر.
تتكون الترقعة من ثلاث طبقات. انتقلت التبعية open إلى الإصدار 11.0.4، وهي تلفّ الهدف بعلامات اقتباس مفردة، ولا يوسّع PowerShell أي شيء داخل علامات الاقتباس المفردة. دالة مساعدة جديدة openUrl() ترفض المخططات غير HTTP(S). وأُضيف فحص للمخطط إلى redirectToAuthorization نفسها، عند الحد الذي كانت Pillar قد سمّته في تقريرها. لا يذكر طلب السحب ولا ملاحظات الإصدار أي ثغرة أمنية، ولم تطلب 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، قدّم مستخدم البلاغ رقم 202 مفاده أن رابطًا يحتوي على علامة دولار فقد جزءًا من نفسه على WSL 2 — توسيع السلسلة، وقد سُجّل كإزعاج يتعلق برابط معطوب. في أكتوبر 2023، قدّم مهندس من Adobe البلاغ رقم 323، "حقن أوامر نظام التشغيل على ويندوز عند فتح الروابط"، مع إثبات مفهوم من سطر واحد: open('https://$(calc.exe)'). اقتبس القائم على الصيانة ملف README وقال إن طلبات السحب التي تحسّن الهروب مرحّب بها؛ أُغلق البلاغ باعتباره غير مخطط له قبل ثلاثة أيام من إصدار open 11.0.0 للهروب على أي حال، في 15 نوفمبر 2025. كتب OpenCode استدعاءه لفتح المتصفح في 7 ديسمبر 2025، بعد ثلاثة أسابيع من وجود النسخة المُصلحة من open، وذلك اعتمادًا على تثبيت كان قديمًا بأشهر بالفعل.
في الأشهر التي سبقت كتابة ذلك الاستدعاء، سجّلت منظومة MCP ثلاث ثغرات CVE على نفس المصب أو نفس الحقل: 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 أسطر مصدر محددة، ويظهر الإصلاح في الفرق العام بين الإصدارين 1.18.32 و1.18.33؛ ويصف تقريران إخباريان مستقلان تدفق البيانات نفسه.
• النطاق المتأثر، من 1.0.137 حتى 1.18.32، والإصدار المُصلَح، 1.18.33، الذي نُشر في 28 سبتمبر 2026.
• أنه لا يوجد أي CVE ولا أي إشعار أمني. وهذا أمر قابل للتحقق، وهو الحقيقة المحورية التي يعتمد عليها المدافعون.
• أنه لم يُبلَّغ عن أي استغلال. وتقول Pillar إنها لم ترَ أي علامات على الاستخدام في الهجمات، وتشير The Hacker News إلى أنه لم تُنشر أي مؤشرات على الاختراق. وغياب المؤشرات المنشورة ليس دليلًا على الغياب، ومن دون بيانات القياس عن بُعد من المورّد لا يمكن تأكيد أي من القراءتين.
غير مُثبَت، أو في حالة توتّر:
• 9.8. هذا الرقم هو درجة CVSS v3.1 المقترحة من Pillar، وليست درجة رسمية: فمع عدم وجود 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 كمتجه وسائط (argument vector) ولا تبنِ سطر أوامر أبدًا من نص قادم من مصدر بعيد، واربط اكتشاف OAuth بأصل الخادم الذي قام المستخدم بتهيئته، وتعامل مع مستندات الاكتشاف وبيانات الخادم الوصفية ووصفات الأدوات كمدخلات غير موثوقة لا كإعدادات. وتضيف مذكرة Cloud Security Alliance استدلالات للبحث — مثل عملية OpenCode تُشغّل powershell.exe مع -EncodedCommand، على سبيل المثال — مع التشديد على أن هذه مجرد اقتراحات لهندسة الكشف وليست مؤشرات اختراق منشورة.
ليس اختراق Console
ظهر كشف Pillar بعد أيام من تأكيد Anomaly اختراقًا منفصلًا لـ Console المستضافة الخاصة بـ OpenCode، وهو اختراق قد يكون قد كشف مفاتيح مزوّدي API المخزّنة. الحدثان غير مرتبطين، وكان Eilon Cohen من Pillar صريحًا بشأن الفرق في مقابلته مع Infosecurity Magazine. وقال: "ضرب الاختراق نظامًا قديمًا خلف وكيل مفاتيح مستضاف، وكشف مفاتيح مزوّدين كان المستخدمون قد خزّنوها هناك. أما الثغرة التي أبلغنا عنها فتسير في الاتجاه المعاكس: خادم MCP بعيد ضار ينفّذ تعليمات برمجية على جهاز المطوّر نفسه أثناء مصافحة OAuth. هدف وموقع مهاجم مختلفان." اختراق Console سجل منفصل في الأرشيف، وينبغي قراءة الاثنين كمدخلين منفصلين.
ما يربطهما، في إطار كوهين، هو السؤال الكامن تحت كليهما: "من تسمح له بتسليم بيانات الاعتماد والمدخلات إلى أداة برمجة تعمل بالذكاء الاصطناعي، وماذا تفعل تلك الأداة بها."
فجوة الإفصاح هي الجزء الذي يبقى بعد زوال الخلل. ثغرةٌ يقيّمها مكتشفوها بأنها حرجة، جرى إصلاحها ضمن تحديث تبعية، وغابت عن كل إشارة آلية يعتمد عليها المدافع عادةً، لا تترك سوى الجرد المباشر وسيلةَ كشفٍ وحيدة — ولم ينشر المورّد أي تنبيه أمني يخبر أحدًا بإجرائه.
