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

CVE-2026-18953: لم يكن لخادم Transform MCP Server من AWS أي حد للكتابة

الكاتب

Alistair Wren

تاريخ النشر

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

نشرت Amazon النشرة الأمنية 2026-075-AWS في 5 أغسطس 2026 بشأن CVE-2026-18953، وهو اجتياز للمسار في get_resource، أداة awslabs.aws-transform-mcp-server، خادم Model Context Protocol مفتوح المصدر الذي يعمل على جهاز المطوّر نفسه حتى يتمكن مساعد ذكاء اصطناعي من إدارة مهام AWS Transform واسترداد مخرجاتها. لم تقيّد الإصدارات من 0.1.0 إلى 0.1.4 أسماء المسارات بالقدر الكافي، وكان يمكن للمعامل savePath كتابة ملفات خارج دليل العمل المقصود — ويقول التنبيه في مستودع GitHub لدى Amazon إن ذلك "قد يؤدي إلى تنفيذ تعليمات برمجية محليًا". منحت Amazon له تقييم 8.6، مرتفع. الإصلاح هو الإصدار 0.1.5، ولا يوجد حل بديل من جهة الخادم أو بالتهيئة فقط، لأن مسار التعليمات البرمجية المصاب موجود في التهيئة الافتراضية. لم يسجل أي مصدر عام قيام أحد باستغلاله. يقع السجل الكامل، مع درجات الخطورة والثقة الخاصة به، في Orca AI Incident Archive إلى جانب حوادث MCP ووقت تشغيل الوكيل المسجلة في الشهر نفسه.

خادم MCP يكتب حيث يعمل المطوّر

تُعدّ خوادم Model Context Protocol الطبقة التي تمنح المساعد أدوات قابلة للاستدعاء، وهذا الخادم محلي عن قصد. وتصفه نشرة Amazon بأنه "خادم MCP مفتوح المصدر يعمل محليًا على جهاز المطوّر ويتيح للمساعدات المدعومة بالذكاء الاصطناعي التفاعل مع AWS Transform لتشغيل مهام تحويل الشيفرة واسترداد مخرجاتها". ويذكر وصف حزمته على Python Package Index أنه يكشف دورة حياة Transform عبر 19 أداة، تدير مساحات عمل التحويل والمهام والموصلات والمهام التي تتطلب مشاركة بشرية في الحلقة والمخرجات والدردشة، ويغطي تحديث الأنظمة المركزية، والترحيل من VMware، وتحديث .NET، وتحويلات الشيفرة المخصصة.

هذا الموضع هو ما يجعل الثغرة ذات أهمية. فالخادم الموجود على البنية التحتية الخاصة بالمورّد نفسه، والذي يتعامل مع اسم ملف بشكل خاطئ، يفسد تخزين المورّد. أما هذا الخادم فقد كان يعمل بصفة المطوّر، داخل الدليل الرئيسي للمطوّر، إلى جانب إعدادات shell ومفاتيح SSH الخاصة به، والأثر الذي تصفه Amazon ليس تنزيلًا تالفًا بل "تنفيذ تعليمات برمجية محليًا". وكل درجة مرتبطة بـ CVE تتفق على نقطة واحدة: متجه الهجوم محلي، وليس شبكيًا.

الأداة المذكورة في التنبيه هي الأداة التي تُنزّل مُخرَج المهمة إلى القرص. get_resource تأخذ savePath الذي يحدد المكان الذي يجب أن يستقر فيه الملف. الخطأ هو أن شيئًا لم يمنع ذلك المسار من الإشارة إلى مكان آخر.

إلى أي مدى هو سيئ، وبحسب حساب مَن؟

هناك ثلاث درجات مرتبطة بهذه الثغرة CVE وهي غير متطابقة. Amazon، التي أسندت CVE بوصفها جهة الترقيم، تمنحها 8.6 عالية على CVSS v3.1 وفق المتجه CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H — محلي، تعقيد منخفض، لا تتطلب امتيازات، تتطلب تفاعل المستخدم، تغيّر النطاق، تأثير عالٍ على السرية والسلامة والتوافر. أما إدخال NIST في قاعدة بيانات الثغرات الوطنية فيحمل درجته الأساسية الخاصة به على v3.1 وهي 8.8 وفق متجه مختلف، CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H: تتطلب امتيازات منخفضة، ولا تتطلب تفاعل المستخدم. وكلتاهما تقعان في النطاق العالي. الخلاف يتعلق بالشروط المسبقة — هل يحتاج الفاعل بالفعل إلى موطئ قدم، وهل يجب إقناع شخص بشري — وليس بمدى سوء النتيجة.

درجة Amazon على مقياس CVSS v4.0 لنفس الثغرة CVE هي 6.3، متوسطة، على CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H. اقرأ مقاييس التأثير: لا شيء على النظام المعرّض للثغرة نفسه، وكل شيء مرتفع على النظام اللاحق. هذا هو شكل اختراق مسار يخرج عن حدود الأداة نفسها — فالضرر يقع على كل ما تستطيع الأداة الوصول إليه، لذا يستقر في عمود النظام الفرعي، ويسجّل النظام المعرّض للثغرة صفرًا.

A self-built HTML card titled 'One CVE, three scores', badged 'CVE-2026-18953 · CWE-22', subtitled 'Who scored it, on which scale, and what the vectors disagree about'. A table of four rows: Amazon as CVE numbering authority, CVSS v3.1, 8.6 High, vector AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H, noted as no privileges required and user interaction required; NIST as NVD primary, CVSS v3.1, 8.8 High, vector AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H, noted as low privileges required and no user interaction; Amazon again, CVSS v4.0, 6.3 Medium, vector AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H, noted as impact recorded on the subsequent system only; CISA SSVC dated 6 August 2026 with no numeric score, listing exploitation none, automatable no, technical impact total. Three boxes below read 'Where the two v3.1 vectors diverge', 'Where they agree' and 'What the record does not carry'. A footer reads 'Sources: AWS security bulletin 2026-075-AWS; GHSA-66mr-jr63-2jgw; NVD record for CVE-2026-18953, last modified 23 October 2026; CISA Vulnrichment SSVC dated 6 August 2026. The two v3.1 vectors are separate assessments of the same CVE, not a correction of one by the other.' The OrcaRouter logo is composited in the bottom-right corner.

يسجّل إثراء CISA لـ CVE، المؤرّخ في 6 أغسطس 2026، قرار SSVC مفاده الاستغلال: لا شيء، القابلية للأتمتة: لا، التأثير التقني: كلي. وقد جرى آخر تعديل على سجل NVD في 23 أكتوبر 2026، ولا يزال يحمل الرقمين 8.6 و8.8 جنبًا إلى جنب. ولا تعتبر أي من الوثيقتين أن الأخرى خاطئة.

ما الذي فعله الكود المصاب بالثغرة، وما الذي غيّره الإصدار 0.1.5

وصف أمازون لهذه الآلية يتألف من جملة واحدة وهو حذر: الأداة "لم تقيّد أسماء المسارات على نحو كافٍ"، ما قد يسمح "لفاعل يعتمد على السياق" بأن "يكتب ملفات عشوائية خارج دليل العمل المقصود عبر معامل savePath." لا يحدد التنبيه من هو الفاعل، ولا يقول ما الذي يحفّز الكتابة، ولا يصف كيف يبدو الاستغلال الناجح. ويقول فقط إن النتيجة "قد تؤدي إلى تنفيذ تعليمات برمجية محليًا."

ليس أكثر الروايات العامة تفصيلًا عن هذه الآلية روايةَ أمازون، بل هي مستودع صغير لإثبات المفهوم، ronamosa/CVE-2026-18953، نُشر على GitHub في 8 أغسطس 2026 بموجب ترخيص Apache-2.0 — إيداعان اثنان، ولا نجوم ولا تفرعات (forks) في وقت كتابة هذه السطور — يضمّ نسخًا حرفية من الملف المصاب والمرقّع file_validation.py، ويشغّل كليهما عبر المدخلات نفسها.

قراءته للإصدار 0.1.4 هي هذه: validate_write_path() حلّت savePath باستخدام realpath وexpanduser، ورفضت قائمة رفض قصيرة من المواقع (~/.aws، ~/.ssh، ~/.gnupg، ~/.docker، ~/.aws-transform-mcp، /etc/shadow، /etc/passwd)، وأزالت مكوّنات الدليل من اسم الملف المقدم. لم تحصر المسار المحلول في أي دليل أساس أو دليل عمل. كانت قائمة حظر لأسماء ملفات حساسة — .bashrc، .zshrc، authorized_keys، id_rsa — مطبّقة على عمليات القراءة ولكن ليس على عمليات الكتابة.

يوضح المستودع ثلاث عمليات كتابة يسمح بها هذا: مسار مطلق لا يحتاج إلى أي اجتياز على الإطلاق، واختراق نسبي عبر ../../، واسم ملف نقطي كان مسار القراءة سيرفضه. وتقع الثلاث جميعًا داخل دليل مؤقت ينشئه البرنامج النصي، ويُظهر مخرج العينة الخاص به dropped_by_absolute_path.sh، وdropped_by_traversal.sh و.bashrc تحت دليل منزلي وهمي؛ ولا يُمس الدليل المنزلي الحقيقي أبدًا. يضيف الإصدار 0.1.5 الحد المفقود: دليل أساس مأخوذ من $AWS_TRANSFORM_MCP_WRITE_DIR أو دليل العمل عند بدء تشغيل الخادم، والذي يجب أن تقع تحته كل عملية كتابة بعد حلّ مسارها، إضافةً إلى قائمة حظر أسماء الملفات المطبقة على مسار الكتابة النهائي بعد حلّه. ويُطلق المدقق المُصلَح رسالة "Write path must be within the working directory" في مواجهة الثلاث جميعًا.

A generated abstract illustration on a pale grey-blue field with a faint blueprint grid: two nested rectangles drawn in thin dark-slate outline, one inside the other with a gap between them, sit slightly left of centre. A dotted cyan line runs from the centre of the inner rectangle outward, crossing the gap, and stops at the outer rectangle before resuming on the far side. Three small solid amber squares sit at staggered positions along that line, the outermost well beyond the larger rectangle. No text, numbers, people, brand marks or organisation logos appear. The OrcaRouter logo is composited in the bottom-right corner.

لا ترد أي من هذه التفاصيل في التنبيه الأمني، ولا يدّعي المستودع أنها جاءت منه. تعامل مع قائمة الحظر، وفحص اسم الملف للقراءة فقط، وإصلاح الدليل الأساسي على أنها إعادة بناء من الشيفرة المصدرية، لا كاستنتاج رسمي ثانٍ. وما يضيفه المستودع إلى ما هو أبعد من التنبيه هو بيان من يمكنه تزويد المسار: لأن مهمة الخادم هي سحب محتوى الوظائف والمهام إلى سياق مساعد، فإن الطرف الذي يختار savePath لا يلزم أن يكون الشخص الموجود عند لوحة المفاتيح. يمكن لمساعد يُقاد بمحتوى غير موثوق جلبه عبر الأداة نفسها أن يتخذ القرار. هذه حجة المستودع المستمدة من الشيفرة وتصميم الأداة، وليست ادعاءً تقدمه Amazon؛ إن «الفاعل المعتمد على السياق» غير المحدد لدى Amazon متوافق معها ويتوقف عند ذلك.

سبعة أسابيع بين الترقيع والنشرة

لم يأتِ الإصلاح مع الإعلان. يُؤرّخ سجل إصدارات Python Package Index — وهو بيانات وصفية من الجهة الأصلية في السجل الذي تُوزَّع الحزمة من خلاله — الإصدار 0.1.4 في 20 مايو 2026 والإصدار 0.1.5 في 17 يونيو 2026، أي سبعة أسابيع قبل نشر النشرة 2026-075 في 5 أغسطس. لا يوجد ملف 0.1.0 على السجل إطلاقًا؛ وأقدم عنصر منشور ضمن النطاق المتأثر هو 0.1.1، الذي رُفع في 9 مايو 2026. لذلك، لم يكن بإمكان أي مطوّر يثبّت من السجل إلا أن يتلقى نسخة مصابة بين 9 مايو و17 يونيو، وكان أي شخص يتابع الإصدارات قد انتقل بالفعل إلى شيفرة مُرقّعة بحلول منتصف يونيو.

A self-built HTML card titled 'The patch came seven weeks early', subtitled 'Release dates from the Python Package Index, laid against the advisory', with a side note that Amazon publishes no report date and no discovery date. A vertical timeline of nine dated milestones reads: 23 April 2026, first package file 0.0.0 on the index; 9 May 2026, 0.1.1, earliest artifact inside the affected range; 20 May 2026, 0.1.4, last vulnerable release; 17 June 2026, tagged PATCHED, 0.1.5, first fixed release, seven weeks before the bulletin; 5 August 2026 at 12:30 PDT, tagged ADVISORY, bulletin 2026-075-AWS published with the CVE published at 19:33 UTC the same day; 6 August 2026, CISA SSVC recording exploitation none, automatable no, technical impact total; 8 August 2026, independent proof-of-concept repository published; 23 October 2026, NVD last modified, carrying NIST's 8.8 beside Amazon's 8.6; 27 October 2026, 0.2.4, latest release at the time of writing. A highlight box reads '49 days' from the first fixed release to the bulletin. A footer reads 'Sources: PyPI release metadata for awslabs.aws-transform-mcp-server; AWS security bulletin 2026-075-AWS; CVE record for CVE-2026-18953; CISA Vulnrichment; github.com/ronamosa/CVE-2026-18953; NVD.' The OrcaRouter logo is composited in the bottom-right corner.

لا تذكر Amazon متى علمت بالمشكلة، ولا متى وصل التقرير، ولا لماذا صدر الإصدار الذي أغلقها. الشخص الوحيد المذكور بالاسم في السجل هو Drew Raines، وقد وُجّهت إليه عبارة شكر في كل من النشرة وإشعار GitHub الاستشاري «لتعاونه في هذه المشكلة من خلال عملية الإفصاح المنسّق عن المشكلات». نُشر GHSA-66mr-jr63-2jgw في مستودع awslabs/mcp التابع لـ Amazon في 5 أغسطس 2026، وهو اليوم نفسه الذي نُشرت فيه النشرة؛ وقد حُجز سجل CVE عند الساعة 13:44 UTC ونُشر عند الساعة 19:33 UTC في ذلك اليوم.

إذن، تاريخ الإصلاح محدد، أما سببه فليس كذلك. وجود نسخة مصحّحة على السجل قبل النشرة الاستشارية بسبعة أسابيع يتوافق مع إصلاح هادئ تلاه إفصاح منسّق — لكن ذلك استنتاج مستخلص من طابعين زمنيين، ولا تذكره أي من الوثيقتين.

ما يثبته السجل، وما لا يثبته

يصنّف الأرشيف هذا المدخل بدرجة A — موثّق توثيقًا جيدًا، والمصادر الأولية متفقة — ولا يضع عليه علامة "متنازع عليه". ويسجّله بوصفه سجلًا بحثيًا، وتحديدًا اكتشاف ثغرة لا حادثة نشر، مع عدم تسجيل أي ضرر واقعي. والتقييم يتعلق بجودة التوثيق، وهو يصمد بحسب الأدلة التي جرى مراجعتها: فالنشرة، واستشارة GitHub، وسجل CVE هي ثلاثة مستندات منشورة من Amazon تتفق على المنتج، والإصدارات، والإصلاح، والاعتراف بالفضل.

• مُثبت. نشرت Amazon النشرة 2026-075-AWS في 5 أغسطس 2026، وتتناول CVE-2026-18953، وهو تجاوز مسار من نوع CWE-22 في get_resource التابعة لـsavePath التعامل معها في awslabs.aws-transform-mcp-server 0.1.0 حتى 0.1.4، وأُصلح في 0.1.5، ولا يوجد حل بديل من جانب الخادم أو يعتمد على الإعدادات فقط لأن المسار المعرّض للخطر موجود في الإعداد الافتراضي.

• مؤكد. الدرجات وتباينها: 8.6 عالية من Amazon بوصفها سلطة ترقيم CVE، و8.8 عالية من NIST بوصفها الدرجة الأساسية في NVD، و6.3 متوسطة على CVSS v4.0، وقرار CISA المؤرخ 6 أغسطس وفق SSVC بأنه لم يُلاحظ أي استغلال ولا مسار قابل للأتمتة.

• تم التأكيد. تواريخ الإصدار على Python Package Index، والإشادة بـ Drew Raines للإفصاح المنسق.

• مستنتج من الشيفرة المصدرية، بواسطة طرف ثالث. إن قائمة المنع، وقائمة حظر أسماء الملفات للقراءة فقط، والدليل الأساسي الغائب، وإصلاح _ALLOWED_WRITE_BASE كلها تأتي من مستودع إثبات المفهوم ronamosa، الذي يمكن لأي شخص مقارنة نسخه المضمّنة من نسختي أداة التحقق.

• مستنتَج من الطوابع الزمنية والتصميم. أن الإصدار 0.1.5 كان إصدارًا أمنيًا متعمدًا، وأن مساعدًا يُوجَّه بمحتوى غير موثوق قد يوفّر المسار العدائي. ولا تذكر أمازون أيًّا منهما.

• لم يثبت. أي استغلال في الواقع الفعلي. يعود تاريخ عبارة CISA «الاستغلال: لا شيء» إلى 6 أغسطس، أي قبل يومين من ظهور إثبات المفهوم العلني، لذا فهي تتحدث عن تلك اللحظة وليس عن أي شيء بعدها. لم يُنشر أي عدد للمستخدمين المتأثرين أو إشعار للعملاء أو بيانات قياس عن بُعد.

• غير مؤكد.تقارير مستقلة. لا يبدو أن أي وسيلة إعلامية رئيسية قد غطت هذا الـCVE. السجل العام هو وثائق أمازون الثلاث، وإثراءات NIST وCISA لها، وصفحات التتبع التي تعيد سرد السجل، ومستودع واحد صغير لإثبات المفهوم موصوف أعلاه.

ما الذي تغيّر، وما الذي ينبغي التحقق منه

حلّ أمازون هو رفع رقم الإصدار ولا شيء غير ذلك: الترقية إلى 0.1.5 أو أحدث، و«التأكد من ترقيع أي كود متفرّع أو مشتق ليدمج الإصلاحات الجديدة». البند الثاني هو الذي يسري. الخادم مفتوح المصدر، والنسخة المتفرّعة التي أدرجت مُدقِّق 0.1.4 ترث العيب دون أن ترث التنبيه؛ وتطلب النشرة من مشغّلي الكود المشتق نقل التغيير إليه، أي أن إصدار المنبع لا يصل إلى نسخة يحتفظ بها شخص آخر.

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

الشيء المفيد في هذا السجل ليس درجته. بل بنيته: خادم MCP محلي، وتنزيل مُخرَج بوجهة يحدّدها المستدعي، ولا حدّ فاصل بين الاثنين. والفحص المهم ليس تاريخ النشرة بل الإصدار المثبّت — 0.1.5 أو أحدث، والتغيير نفسه منقول إلى أي تفرّع نسخ المدقّق.