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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/cucumberanorsncompany/sealsecurityassignment
التحليل الثابتتحليل الثغرات الأمنيةتحليل الكودالاستغلالأمن الويبالتعلم والتعليم
GitHubcucumberanorsncompany/sealsecurityassignment

SealSecurityAssignment

البحث في الثغرة CVE-2023-26136

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
عرض المستودع
1منذ 2 سنواتلم تتم المراجعة بعد

مهمة SealSecurityAssignment

البحث في الثغرة CVE-2023-26136

بحث حول الثغرة: CVE-2023-26136

الوصف:

الإصدارات من الحزمة tough-cookie قبل 4.1.3 معرضة لتلوث النموذج الأولي (Prototype Pollution) بسبب المعالجة غير الصحيحة لملفات تعريف الارتباط (Cookies) عند استخدام CookieJar في وضع rejectPublicSuffixes=false. تنشأ هذه المشكلة من طريقة تهيئة الكائنات.

https://nvd.nist.gov/vuln/detail/CVE-2023-26136

مقدمة:

ما هو تلوث النموذج الأولي (Prototype Pollution)؟

تمتلك JavaScript مفهوم الكائنات (objects)، الذي يشبه إلى حد ما القواميس (dictionaries). يمكن للكائن أن يحمل مجموعة من المتغيرات من أنواع مختلفة (مثل string, Boolean, int إلخ)، واسم المتغير هو المفتاح (key)، وقيمته هي القيمة (value)، إذا تابعنا تشبيه القواميس والكائنات. بشكل أدق، الكائن هو مماثل لبنية بيانات القاموس نفسها، وكل متغير هو مماثل لزوج مفتاح-قيمة. تحتوي الكائنات أيضًا على الكلمة المفتاحية proto التي تتيح إضافة متغيرات إضافية إلى كائن عن طريق تعديل نموذجه الأولي (prototype). تلوث النموذج الأولي (Prototype Pollution) هو هجوم يقوم فيه المهاجم بتلويث كائنه، عن طريق إضافة متغيرات إضافية إليه، عبر الكلمة المفتاحية proto. التفاعل التالي مع وحدة تحكم المتصفح يوضح الهجوم.

image

كما نرى، لدينا مستخدمان: admin1 و user1. كائن admin1 يحتوي على متغير منطقي: "isAdmin"، مضبوط على true. user1 لا يمتلك هذا المتغير إطلاقًا. في السطر 7، نضيف متغير isAdmin إلى النموذج الأولي لـ user1، وعلى الرغم من أنه واضح من السطر 10 أن المتغير لم يُضف إلى كائن user1 نفسه، إلا أن وحدة التحكم تستجيب بشكل إيجابي، هذه المرة، عندما نتحقق من قيمة user1.isAdmin. ذلك لأن user1 يرث خصائص نموذجه الأولي.

image

من الجدير بالذكر أيضًا أن النموذج الأولي هو كائن بذاته، وهو بدوره يرث خصائص وطرقًا من نموذجه الأولي، مما ينشئ سلسلة النماذج الأولية. تنتهي السلسلة بنموذج أولي فارغ (null prototype)، لذلك فإن النهج المعقول لمنع تلوث النموذج الأولي هو جعل الكائن الذي نعمل معه يرث صراحةً من نموذج أولي فارغ.

ما هي ملفات تعريف الارتباط (Cookies)؟

ملفات تعريف الارتباط (المعروفة غالبًا بملفات تعريف الارتباط على الإنترنت) هي ملفات نصية تحتوي على أجزاء صغيرة من البيانات — مثل اسم المستخدم وكلمة المرور — تُستخدم لتحديد جهاز الكمبيوتر الخاص بك أثناء استخدامك للشبكة. تُستخدم ملفات تعريف ارتباط محددة لتحديد مستخدمين معينين وتحسين تجربة تصفحهم على الويب.

بإذن من Kaspersky: https://www.kaspersky.com/resource-center/definitions/cookies

ما هو CookieJar؟

CookieJar هو كائن لتخزين ملفات تعريف الارتباط.

المهمة:

الثغرة:

وفقًا لوصف الثغرة، تنشأ من الطريقة التي يقوم بها Tough-Cookie بتهيئة ملفات تعريف الارتباط. نظرًا لأن ملفات تعريف الارتباط هي كائنات، فهي، نظريًا على الأقل، عرضة لتلوث النموذج الأولي.

المخاطر:

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

التصحيح:

تم التصحيح في الملف: memstore.js. وفقًا لتتبع المشكلة وكذلك للتصحيح الذي تم تقديمه في الإصدار 4.1.3، من أجل تصحيح الثغرة، نحتاج إلى تخزين ملفات تعريف الارتباط في خريطة (map) أو إنشاء كائن this.idx. عن طريق إنشاء this.idx باستخدام: this.idx = Object.create(null); بدلاً من this.idx = {}، نطبق اقتراحي حول كيفية منع تلوث النموذج الأولي في المقدمة، عن طريق الوراثة من نموذج أولي فارغ، وقطع سلسلة النماذج الأولية.

اختبار الثغرة (index.js):

نشرت Snyk إثبات المفهوم (PoC) للثغرة التي نوقشت. بنيت index.js بناءً عليه. غلفته بمنطق try-catch لالتقاط الاستثناءات في حالة ظهورها، وأضفت مخرجات إضافية لتتبع تقدم الاختبار، وانتهيت بالمخرجات المطلوبة (مثل "EXPLOITED SUCCESSFULLY" أو "EXPLOITED FAILED"). عند تشغيل الأمر: npm install [email protected] && node index.js نحصل على المخرجات التالية:

image

عند تشغيل الأمر: npm install ./tough-cookie-2.5.0-PATCHED.tgz && node index.js نحصل على المخرجات التالية:

image

في كلا السيناريوهين (التشغيل بالإصدار المنشور 2.5.0 والتشغيل بالإصدار المصحح خاصتي)، تمكنا من تعيين كل من ملف تعريف الارتباط العادي وملف تعريف الارتباط المستغل، ولكن في الإصدار المصحح، فشلنا في الوصول إلى ملف تعريف الارتباط المستغل.

ملخص:

في هذه المهمة تعلمت عن هجوم تلوث النموذج الأولي (Prototype Pollution)، وتعلمت عن كائن JavaScript، وتعرفت على حزمة Tough-Cookie.

تنزيل الأداة