رسم توضيحي تقني مجرّد على خلفية بلاطية داكنة: عمود ضيق لخادم توثيق على اليسار يمرّر بطاقات مستطيلة صغيرة عبر قناة مضيئة نحو عقدة وكيل واحدة على اليمين، تحمل حلقة من أجسام صغيرة على شكل مفاتيح. إحدى البطاقات محدّدة بإطار كهرماني وتحمل ظلّ مفتاح خافتًا تنعكس صورته في حلقة الوكيل. خلف العمود توجد شبكة غير منتظمة من مدخلات المكتبة، أحدها مظلّل أغمق من الباقي. تقسم خطوط فيروزية رفيعة القناة إلى مقاطع تسليم. لا أشخاص، ولا شعارات، ولا أي كتابة من أي نوع. شعار OrcaRouter مركّب في الزاوية السفلية اليمنى.
AI Safety Incidents

CVE-2026-75130: خادم توثيق MCP الخاص بـ Context7 يسجل 9.0، ولا يذكر السجل أي إصدار مُصلَح

الكاتب

Alistair Wren

تاريخ النشر

أحدث النماذج · 20عرض جميع النماذج →
المعايير: Artificial Analysis · يُحدَّث يوميًا
العودة إلى جميع المقالات

في 18 أغسطس 2026، نشرت VulnCheck الثغرة CVE-2026-75130 المتعلقة بـ Context7، خادم توثيق المكتبات الذي تديره Upstash من أجل Model Context Protocol والذي تستعلم عنه وكلاء البرمجة للحصول على وثائق خاصة بإصدار معيّن. تكمن الثغرة في الميزة التي تسميها Upstash Custom AI Instructions: يُرفق مالك مكتبة إرشادات بمدخل توثيق، ويقدّم Context7 تلك الإرشادات داخل نافذة السياق لكل وكيل يبحث عن المكتبة، ولا شيء في ذلك المسار ينقّيها. أثبتت Noma Security — التي يُنسب إلى باحثها الأول في ثغرات الذكاء الاصطناعي Eli Ainhorn فضل اكتشافها — أن مدخلًا ملوّثًا يمكن أن يجعل وكيلًا متصلًا يقرأ ملفات .env في جذر المشروع، ويرسل محتوياتها إلى مستودع GitHub يتحكم فيه المهاجم كبلاغ issue، ويحذف مجلدات محلية تحت ذريعة «تنظيف» — كل ذلك من طلب توثيق روتيني. ولم يُسجَّل أي ضحية. أما بقية حوادث الوكلاء الموثّقة، ولكل منها خطورتها ودرجة ثقتها وعلامة الخلاف الخاصة بها، فتقع في أرشيف حوادث الذكاء الاصطناعي، حيث يمكن قراءة المدخلات المجاورة لهذا السجل بجانبه.

خادم Context7 صغير، وهذا هو الجزء الذي يستحق الفهم أولاً. تشير تدوينة Noma إلى أنه يتيح أداتين، resolve-library-id وquery-docs، وأنه لا يستطيع تنفيذ التعليمات البرمجية أو كتابة الملفات أو الوصول إلى الشبكة بمفرده. كل تأثير موثّق ينفّذه الوكيل الموجود في الطرف الآخر، وهو يملك بالفعل إمكانية الوصول إلى نظام الملفات والصدفة والشبكة على جهاز المطوّر. يُظهر سجل npm حجم القاعدة المثبّتة: @upstash/context7-mcp نُزّلت 4,064,176 مرة خلال الثلاثين يومًا الممتدة من 22 يوليو إلى 20 أغسطس 2026، وهي الفترة المحيطة بالنشر.

الآلية: مكتبة واحدة مسمومة، وكل وكيل يستعلم منها

جرى عرض Noma التوضيحي، الموصوف في تقرير ContextCrush الخاص به بتاريخ 5 مارس 2026، في ثلاث خطوات ينفذها الوكيل بدلاً من الخادم. سجّل مكتبة في سجل Context7 مع قواعد مسمومة مرفقة بها. وجّهت تعليمات في تلك القواعد الوكيل إلى البحث عن وقراءة كل ملف .env في جذر المشروع؛ كما وجّهته تعليمات أخرى إلى نشر المحتويات في مستودع GitHub يتحكم فيه المهاجم كمسألة؛ وأمرته مجموعة تعليمات أخيرة بحذف المجلدات والملفات المحلية بغرض «التنظيف». أما الطلب الذي يضع كل هذا في السياق فهو طلب عادي — مجرد طلب مساعدة من مساعد برمجي بشأن مكتبة.

سببُ اعتبار هذه مشكلةَ سلسلة توريد بدلاً من حقن أوامر عادي هو موضع وجود الحمولة. فالمهاجم لا يصل أبداً إلى جهاز الضحية ولا يضطر إلى زرع نص في مستند يفتحه المستخدم. تقع التعليمات المسمومة في سجل Context7 نفسه، ويُستضاف ويُقدَّم عبر البنية التحتية الخاصة بـ Context7، ويصل عبر القناة الموثوقة نفسها التي تصل منها الوثائق المشروعة، بلا قدرة على تمييزه عنها. وتشير Noma إلى أن درجة الثقة لدى Context7، التي تقيّم المكتبات استناداً إلى سجل GitHub الكامن خلفها، لا تحمي من ذلك، لأن حساباً طويل الأمد يمكن شراؤه أو اختطافه أو تصنيعه. وملخص الشركة نفسه للنقطة البنيوية صريح: «سطح الهجوم ليس ما يستطيع خادم MCP فعله. بل ما يستطيع أن يجعل وكيل الذكاء الاصطناعي يفعله.»

درجتان لخلل واحد

تحتوي الاستشارة على CVSS 3.1 9.0 (حرجة) وCVSS 4.0 6.4 (متوسطة). وفّرت VulnCheck كلا المتجهين بصفتها جهة الإسناد CNA، ويحمل NVD كليهما دون تغيير، وينسب كلًّا منهما إلى VulnCheck. هذا الانقسام ليس خطأً؛ بل هو احتساب الإطارين للضرر نفسه على أجهزة مختلفة. يشير CVSS 3.1 إلى أن Scope قد تغيّر — إذ ينتقل الحقن من الخادم إلى جهاز المطوّر وما بعده — ولذلك يسجّل التأثير العالي الكامل على السرية والنزاهة والتوفر الناتج عن قدرات الوكيل بالوزن الكامل. تستبدل CVSS 4.0 النطاق بمقاييس منفصلة للنظام المعرّض والنظام اللاحق: فلا تسجّل أي تأثير على السرية أو النزاهة أو التوفر على Context7 نفسه (VC:N/VI:N/VA:N) وتأثيرًا عاليًا على الأنظمة اللاحقة (SC:H/SI:H/SA:H)، وهو ما توزنه صيغتها بثقل أقل. الخادم هو الناقل، وليس الضحية.

ينتشر التباين إلى قواعد البيانات. نُشرت استشارة GitHub، GHSA-97r6-3rgm-v39r، في الساعة 18:32 UTC يوم 18 أغسطس، أي بعد نصف ساعة من CVE، وتأتي شدته الملخّصَة متوسطة مع أن متجه CVSS 3.1 في السجل نفسه يمنح 9.0. تعكس قاعدة بيانات الثغرات الأوروبية لدى ENISA المدخل باسم EUVD-2026-61099 وتخزّن درجة أساس قدرها 6.4 تحت الإصدار 4.0 فقط. يمنح سجل الأرشيف الذي يتبعُه هذا المقال الحادثة تصنيف عالية — وهو ليس أيًا من الدرجتين المنشورتين — وهو تصنيف الأرشيف، لا قياسًا خاصًا به.

HTML card titled 'One advisory, two scores', kicked 'OrcaRouter · AI incident archive · 2026-08-18', with the subtitle 'Identical facts, two severity bands apart. Both vectors were supplied by VulnCheck as the assigning CNA; NVD carries both unchanged and attributes each to VulnCheck'. Four chips read CVSS 3.1 9.0 critical, CVSS 4.0 6.4 medium, archive grade high and EPSS 0.49%. Three columns. 'Where the vectors agree' lists attack vector network with low complexity, privileges required low because the attacker needs a registry entry rather than the victim's machine, a routine documentation request as the trigger, and high confidentiality, integrity and availability impact in both frameworks. 'Where they diverge' lists CVSS 3.1 setting Scope to Changed and booking the jump to the developer's machine at full weight, CVSS 4.0 recording the vulnerable system as unharmed at VC:N, VI:N and VA:N, the same harms booked downstream at SC:H, SI:H and SA:H with less weight, and user interaction at required in 3.1 against passive in 4.0. 'How the databases record it' lists NVD keeping both vectors each tagged disclosure@vulncheck.com, GHSA-97r6-3rgm-v39r carrying a summary severity of medium while its own v3 vector reads 9.0, ENISA EUVD-2026-61099 storing 6.4 under version 4.0 only, and the archive grading the record high, which is neither score. A footer reads 'Sources: CVE-2026-75130 in the MITRE CVE Services record, 18 August 2026; NVD API; GitHub Advisory API; ENISA EUVD API. EPSS as recorded in ENISA's mirror.'

ثغرة CVE نُشرت في أغسطس بشأن إفصاح مارس

تم حجز معرّف CVE في 17 أغسطس 2026 ونُشر في الساعة 18:02 UTC يوم 18 أغسطس، وهو التاريخ الذي يحمله السجل. وتحتوي حاوية CNA أيضًا على تاريخ ثانٍ لا يظهر في صفحات المجمّع: datePublic، 5 مارس 2026 — أي خمسة أشهر ونصف قبل أن يوجد المعرّف، وفي اليوم نفسه الذي نشرت فيه Noma ContextCrush. والمرجع التقني الوحيد في الإشعار الاستشاري هو ذلك المقال من مارس، الذي يضع VulnCheck عليه وسمَي الوصف التقني والاستغلال.

يشرح الجدول الزمني لإفصاح Noma الفجوة. فوفقًا له، أُبلغت Upstash بالثغرة في 18 فبراير 2026 مع تقرير كامل وإثبات مفهوم، ويسجل قبول Upstash للنتائج وبدءها المعالجة في 19 فبراير، ويقول إن إصلاحًا «نُشر في بيئة الإنتاج مع تعقيم القواعد وضوابط الحماية» في 23 فبراير، ويؤرخ الإفصاح العام والتحقق النهائي من جانب Noma في 5 مارس. وبحسب رواية Noma، جرى حل ثغرة فبراير في غضون أيام.

تتوافق تواريخ سجل npm مع ذلك الجدول الزمني على نحو يجعل النطاق المتأثر يبدو غريبًا. @upstash/context7-mcp 2.1.2 نُشر في 23 فبراير 2026 الساعة 10:06 UTC، وهو اليوم الذي يقول نومَا إن الإصلاح وصل فيه إلى الإنتاج؛ ويقول سطر سجل التغييرات الخاص به: «إزالة تحذير غير ضروري وتحديث أوصاف الأدوات.» 2.1.3 تبِع في 4 مارس 2026، أي في اليوم السابق لمقالة نومَا، مع ملاحظات حول رفض طلبات GET على نقاط نهاية MCP وإضافة حقل مصدر إلى نتائج البحث. ولا تذكر أي من ملاحظتي الإصدار التنقية أو ضوابط الحماية أو الحقن. ينتهي النطاق المتأثر لدى CNA عند 2.1.2، ما يجعل 2.1.3 أول إصدار خارج ذلك النطاق.

تتوافق ثلاثة تفسيرات مع تلك التواريخ، ولا يحدد VulnCheck ولا Noma أياً منها هو الصحيح. الأول، الذي طرحته Digital Applied في مقالتها بتاريخ 18 أغسطس وكررته AI Security Wire في 22 أغسطس، هو أن الإصلاح قد تراجع: فالبناء الذي حمل تصحيح فبراير يقع داخل النطاق المتأثر في أغسطس. والثاني هو أن النطاق مثبت ببساطة على البناء الذي اختبره الباحث، وأن 2.1.3، التي صدرت في اليوم السابق للإفصاح، هي الحد الحقيقي — وهو استنتاج تجريه عدة مجمّعات محتوى آلياً، بما فيها Feedly، التي تدرج «التحديث إلى الإصدار 2.1.3 أو أحدث» كإجراء تخفيف. والثالث هو أن إصلاح فبراير طُبّق حيث تُقدَّم القواعد بدلاً من حزمة العميل، وفي هذه الحالة لا يصف نطاق إصدار npm الإصلاح على الإطلاق. والإصلاح الأمني الصامت شائع بما يكفي بحيث لا يحسم غيابُ مدخل مطابق في سجل التغييرات شيئاً في أي من الاتجاهين.

HTML card titled 'Six months, one affected range', kicked '2026-08-18-context7-mcp-ti-shi-zhu · dates', subtitled 'Times UTC. Noma's disclosure timeline and the npm registry dates do not say what the 23 February fix changed, and no release note mentions sanitisation'. Four chips read 18 Feb 2026 reported to Upstash, 23 Feb 2026 fix live and npm 2.1.2, 5 Mar 2026 datePublic, and 18 Aug 2026 CVE published. Three columns. 'Noma's February timeline' lists 18 February discovery with the report and proof of concept delivered to Upstash, 19 February acceptance and remediation, 23 February deployment of a fix with rule sanitization and guardrails, and 23 February at 10:06 UTC the npm publication of 2.1.2 with a changelog reading 'Remove unnecessary warning and update tool descriptions'. 'The March boundary' lists 4 March at 12:51 UTC the npm publication of 2.1.3 whose changelog covers 405 handling for GET requests and a source field, 5 March publication of Noma's ContextCrush writeup with final verification, 5 March as the CNA's datePublic for the CVE, and the affected range ending at 2.1.2, which makes 2.1.3 the first build outside it. 'The August record' lists 17 August reservation of the identifier, 18 August at 18:02 UTC publication by VulnCheck as CNA, 18 August at 18:32 UTC the appearance of GHSA-97r6-3rgm-v39r with no version ranges, no fixed version in the CVE, the VulnCheck advisory or the GHSA, and NVD last modified 22 October at status Deferred with no CPE configurations. A footer reads 'Sources: MITRE CVE Services record for CVE-2026-75130; Noma Security, ContextCrush, 5 March 2026; npm registry version times; GitHub Advisory API; NVD API, read 29 October 2026.'

ما هو ثابت، وما هو غير ثابت

• مُثبت في السجل الأساسي. معرّف CVE، ونشره في 18 أغسطس، وVulnCheck بوصفها CNA، وتصنيف CWE-1427 لعدم التحييد الصحيح للمدخلات المستخدمة في تلقين LLM، والإسناد إلى Eli Ainhorn من Noma Security، ونطاق متأثر من Context7 حتى 2.1.2.

• أثبتته أبحاث Noma. مسار الحقن عبر Custom AI Instructions، وإثبات المفهوم المكوّن من ثلاث خطوات، وملاحظة أن الخادم لا يكشف إلا عن resolve-library-id وquery-docs، والبيان بأنه لم تُلاحظ أي أدلة على استغلال ثغرة فبراير في البرية.

• أنشأه السجل. تاريخ نشر 2.1.2 في 23 فبراير 2026، وتاريخ نشر 2.1.3 في 4 مارس 2026، وسطر حزمة تجاوز منذ ذلك الحين 4.0 ليصل إلى 4.4.4 في 19 أكتوبر 2026.

• لم يُثبت: ما إذا كانت البناءات الحالية متأثرة. لا يذكر أي مصدر أن سلسلة 4.x معرّضة للخطر، ولا يذكر أي مصدر أنها خالية من الخطر. لا يسمّى سجل CVE ولا استشارة VulnCheck ولا استشارة GitHub أي إصدار مُصلَح، وقائمة نطاقات الإصدارات المعرّضة للخطر في استشارة GitHub فارغة.

• لم يثبت وجود أي ضحية أو استخدام فعلي في الميدان. يسجّل الأرشيف الضرر الفعلي بوصفه زائفًا. في 19 أغسطس، احتسبت CISA تعزيز السجل على أن الاستغلال «لا شيء»، وقابلية الأتمتة «لا»، والأثر التقني «كلي»؛ والعيب ليس في كتالوج KEV؛ وتسجل نسخة ENISA المرآة نسبة EPSS تبلغ 0.49 بالمئة. بحث Noma عرض توضيحي، وليس تقرير حادث.

• لم يُثبت: قراءة الانحدار نفسها. فهي تعتمد على مصادفة في التاريخ بين جدول زمني للإصلاح ومنشور npm، ولا يؤكد أي مصدر أولي أن مسار الكود نفسه فشل مرتين.

HTML card titled 'What the record establishes, and what it does not', kicked 'Evidence ledger · CVE-2026-75130', subtitled 'The archive grades this record confidence A, disputed false, real harm false, AI involvement confirmed. Those are its fields; this is what they rest on'. Four chips read confidence A, disputed false, real harm false, AI involvement confirmed. Three columns. 'Established by primary sources' lists CVE-2026-75130 published 18 August 2026 with VulnCheck as CNA and CWE-1427, credit to Eli Ainhorn of Noma Security, an affected range of Context7 through 2.1.2, the injection path and three-step proof of concept as Noma describes them, and npm dates of 2.1.2 on 23 February, 2.1.3 on 4 March and latest 4.4.4 on 19 October 2026. 'Not established' lists whether the 4.x line is vulnerable or clear with no source saying either way, whether February's fix regressed or was never in the client package, any victim or in-the-wild use with CISA's SSVC recording exploitation none and the flaw absent from KEV, and a fixed version, which the CVE, the VulnCheck advisory and the GHSA all leave unnamed. 'What corroborates it' lists VulnCheck's advisory restating the CVE and adding the weakness class and credit, GHSA-97r6-3rgm-v39r as an alias of the same submission thirty minutes later, ENISA EUVD-2026-61099 mirroring the record along with the CVE aggregator pages, and two secondary write-ups restating it with no newsroom coverage found on 29 October 2026. A footer reads 'Sources agree because the GitHub and ENISA entries derive from the same VulnCheck submission, not because a second party measured the flaw.'

التدعيم: إعادة الصياغة، والصمت حيث يهم الأمر

الوثائق التي تتوافق مع السجل مستمدة منه إلى حد كبير. تعيد استشارة VulnCheck صياغة نص CVE وتضيف تصنيف الضعف وإسناد الفضل إلى الباحث. استشارة GitHub هي نسخة أخرى من التقديم نفسه، نُشرت في المساء ذاته، دون نطاقات إصدارات ودون مراجعة مستقلة. مدخل ENISA هو نسخة مطابقة. نشرت Digital Applied، إحدى المصدرين اللذين يستشهد بهما الأرشيف، تحليلها في 18 أغسطس وحدّثته في 22 أغسطس بعمليات سحب حديثة من السجل؛ ونشرت AI Security Wire مقالاً ثانياً في 22 أغسطس. كلتاهما تعيدان صياغة الاستشارة وتنقلان استنتاج الانحدار، ولا تدّعي أي منهما أنها تحققت منه بشكل مستقل.

لم نجد أي تغطية صحفية لـ CVE في 29 أكتوبر 2026 — لا يوجد خبر من BleepingComputer أو The Register أو SecurityWeek — وكانت النتائج صفحات مجمّعات CVE بدلًا من تقارير إخبارية. هذا الغياب مهم لكيفية قراءة السجل: يصنفه الأرشيف بدرجة A، موثقًا جيدًا بمصادر أولية متوافقة، والمصادر الأولية متوافقة بالفعل، لكن التوافق هنا بين سجل CNA والبحث الذي يستشهد به، وليس بين قياسين مستقلين. تضيف عدة صفحات مجمّعات ادعاءات لا تدعمها مصادرها؛ فمثلًا يذكر مدخل Feedly أن تصحيحًا متاح ويسمّي 2.1.3، وهو ما لا يفعله أي إشعار، بينما أعادت صفحة VulDB فحصًا للروبوت بدلًا من المحتوى ولم يكن بالإمكان قراءتها على الإطلاق.

ما الذي تغيّر، وما الذي لم يتغيّر

فيما يتعلق بخطأ فبراير، تحركت Upstash في غضون أيام: قُبل في 19 فبراير، وأُصلح في 23 فبراير، بحسب رواية Noma. أما بالنسبة لسجل أغسطس، فإن بيان المورّد الوحيد الذي يشير إليه CVE هو منشور على LinkedIn من Upstash، موسوم هناك باعتباره استشارة مورّد، ولم نتمكن من قراءة محتواه دون جلسة. لا توجد أي استشارة أمنية على GitHub مقتصرة على المستودع تحمل إصدارًا مُصلحًا، كما أن مدخل NVD موجود عند الحالة مؤجل بلا تهيئات CPE وآخر تعديل في 22 أكتوبر 2026، لذا فإن تحليل NVD نفسه ليس ضمن السجل.

واصلت الحزمة نفسها الصدور. بين 20 أبريل 2025 و23 أكتوبر 2026، نشر مستودع upstash/context7 عددًا قدره 163 إصدارًا، ولا تذكر أيٌّ من ملاحظاتها هذا الـCVE أو تصف تعقيم التعليمات المخصصة التي تحمل الحقن. وهذا سجل لما اختار القائمون على الصيانة تدوينه، وليس دليلًا على أنه لم يُصلَح شيء.

ما يتركه السجل لدى المشغّل هو إدارة التعرّض لا مجرّد خطّ تحديثات. تتّجه توصيات Noma إلى مراجعة تكاملات MCP وفحص ما يمرّ بين الوكيل والخادم أثناء التشغيل؛ أما الإجراءات التي تقترحها OpenCVE فهي الترقية، أو تعطيل ميزة Custom AI Instructions أو تقييدها، وإضافة التحقق من المدخلات إلى الخادم. والنسخة التشغيلية من كل ذلك هي الخطوات الثلاث ذاتها: تثبيت إصدار خادم MCP بدل الاعتماد على أحدث إصدار، وإبعاد بيانات اعتماد الإنتاج عن ملفات البيئة النصية التي يستطيع الوكيل قراءتها، والتعامل مع استجابات الأدوات كمدخلات غير موثوقة لا كوثائق قد يتبعها الوكيل.

بعد عشرة أسابيع من النشر، لا يزال السجل العام ينتهي عند النقطة نفسها التي انتهى إليها في 18 أغسطس: معرّف، ودرجتان يفصل بينهما فارق فئتين، ونطاق متأثر حده الأعلى بناء شُحن في فبراير، ولا إصلاح مسمّى. ومن يتولى فرز CVE-2026-75130 عليه أن يقرر ما يستطيع وكلاؤه الوصول إليه، لأن السجل لا يخبرهم بأي إصدار ينبغي تثبيته.