Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
multiparty-CVE-2026-8161 — إثبات مفهوم لاستغلال CVE-2026-8161، وهي ثغرة رفض خدمة في محلل multipart متعدد الأطراف، توضح تلوث النموذج الأولي المؤدي إلى استثناء غير مُلتقط وتعطل النظام. | Kitploit
أدوات/GitHubGitHub/ser0n-ath/multiparty-cve-2026-8161
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبأمن الويب
GitHubser0n-ath/multiparty-cve-2026-8161

multiparty-CVE-2026-8161

إثبات مفهوم لاستغلال CVE-2026-8161، وهي ثغرة رفض خدمة في محلل multipart متعدد الأطراف، توضح تلوث النموذج الأولي المؤدي إلى استثناء غير مُلتقط وتعطل النظام.

عرض المستودع
منذ 3 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-8161

إثبات المفهوم لـ CVE-2026-8161 (Multiparty)

الوصف

[email protected] والإصدارات الأقدم معرّضة لهجوم حجب الخدمة (Denial of Service) من خلال استثناء غير مُلتقَط (uncaught exception).

يخزّن المحلّل (parser) الحقول والملفات المرفوعة في كائنات JavaScript عادية ولا يميّز بأمان المفاتيح المملوكة للمحلّل عن الخصائص الموروثة للكائن. يمكن أن يتسبب اسم حقل متعدد الأجزاء (multipart field name) مُصمَّم بعناية في قراءة المحلّل لقيم غير متوقعة من سلسلة النماذج الأولية (prototype chain) وتعطّله أثناء معالجة الرفع.

قد تتأثر أي خدمة تقبل رفع ملفات متعددة الأجزاء عبر إصدارات multiparty المعرّضة للخطر.

كيف يعمل

تحدث المشكلة لأن fields و files كائنات JavaScript عادية، لكنها تُستخدم كخرائط آمنة من مفتاح-قيمة لأسماء يتحكم بها المستخدم.

root@kitploit:~
var fieldsArray = fields[name] || (fields[name] = [])
fieldsArray.push(value)

var filesArray = files[name] || (files[name] = [])
filesArray.push(file)

المشكلة أن fields[name] و يستخدمان البحث العادي عن الخصائص في JavaScript. بالنسبة للكائنات العادية، يمكن أن يُرجع هذا البحث خصائص موروثة من سلسلة النماذج الأولية بدلاً من القيم المخزنة على الكائن نفسه فقط.

files[name]

عندما يكون الاسم __proto__، يمكن لـ JavaScript حله عبر سلسلة النماذج الأولية وإرجاع كائن النموذج الأولي الموروث بدلاً من undefined. وبما أن تلك القيمة صادقة (truthy)، يتم تخطي التعيين الاحتياطي ولا يقوم المحلّل أبداً بإنشاء مصفوفة حقيقية لذلك الحقل.

يصلح التصحيح هذه المشكلة بالاعتماد فقط على المفاتيح التي تنتمي مباشرة إلى الكائن:

root@kitploit:~
var filesArray = Object.prototype.hasOwnProperty.call(files, name)
  ? files[name]
  : undefined

ثم يقوم المحلّل بالإلحاق فقط عندما تكون القيمة المخزنة مصفوفة فعلياً، وإلا يقوم بتهيئة مصفوفة جديدة:

root@kitploit:~
if (Array.isArray(filesArray)) {
  filesArray.push(file)
} else {
  files[name] = [file]
}

عند استدعاء .push() على قيمة ليست مصفوفة، يتم إلقاء خطأ TypeError. ولأن هذا يحدث داخل تدفق المعالجة غير المتزامن (async) في Multiparty، فقد لا تلتقط معالجة الأخطاء العادية من جانب المتصل هذا الاستثناء، مما يسمح للاستثناء بتعطيل العملية.

الجدول الزمني

  • 2026-01-12: تم الإبلاغ عن الثغرة إلى القائمين على multiparty.
  • 2026-01-17: تم قبول التقرير، وبدأت أعمال المعالجة.
  • 2026-02-14: بدأت المراجعة المنسقة مع @pillarjs/security-triage.
  • 2026-02-16: مناقشات التصحيح -> Object.prototype.hasOwnProperty.call(...).
  • 2026-03-29: تم تحديث عنوان الاستشارة والبيانات الوصفية لتعكس تأثير حجب الخدمة.
  • 2026-04: تمت مراجعة نهج المعالجة والموافقة عليه.
  • 2026-05-08: تم الانتهاء من الاستشارة وحجز CVE-2026-8161.
  • 2026-05-11: تم دمج الإصلاح في pillarjs:master.

الاستخدام التجريبي

قم بتشغيل بيئة mocklab وأرسل حمولة الاختبار إلى كلا الهدفين:

root@kitploit:~
docker compose up -d
python3 secdos.py -u http://localhost:8080/api/submit
python3 secdos.py -u http://localhost:8081/api/submit

سيتعطل الهدف المعرّض للخطر ويعيد [PASS]. سيتعامل الهدف المُصحَّح مع الطلب بأمان ويعيد [FAIL].

إذا أعدت التشغيل ضد الخادم المعرّض للخطر، أعد تشغيله أولاً

نظرة عامة على الإعداد

الخادم المعرّض للخطر

  • الوصول على localhost:8080
  • خادم Nginx يعمل كوسيط عكسي (reverse proxy)، عند الفشل يعرض صفحة خطأ بحالة 502
  • يحل Nginx عنوان الخادم المعرّض للخطر حسب اسم الخدمة
  • يستخدم multiparty 4.2.3 (معرّض للخطر)

الخادم المُصحَّح

  • يعمل ويُوصَل إليه على localhost:8081
  • لا يتطلب Nginx
  • يستخدم multiparty 4.3.0 (مُصحَّح)

يتطلب بناء صورة مُصحَّحة من dockerfile وسيط بناء PATCHED=1

المراجع

https://github.com/pillarjs/multiparty/security/advisories/GHSA-qxch-whhj-8956 https://github.com/pillarjs/multiparty/commit/8ee6aca09aca29e923da48da8260c87aa964b282

تنزيل الأداة