
يحتوي هذا المستودع على حل لثغرة CVE-2023-26136.
إصدارات حزمة tough-cookie قبل 4.1.3 معرضة لتلوث النموذج الأولي (Prototype Pollution) بسبب المعالجة غير السليمة لملفات تعريف الارتباط عند استخدام CookieJar في وضع rejectPublicSuffixes=false. تنشأ هذه المشكلة من الطريقة التي يتم بها تهيئة الكائنات.
يهدف هذا المشروع إلى توفير إصدار مصحح من [email protected] يزيل الثغرة الأمنية CVE-2023-26136 مع ضمان التوافق الخلفي.
لإصلاح الثغرة، قمنا بتعديل memstore.js لضمان تخزين ملفات تعريف الارتباط في كائن دون مخاطر تلوث النموذج الأولي، وذلك عن طريق استبدال تهيئة الكائن القياسية بـ Object.create(null). يمنع هذا التلاعب بالنموذج الأولي عبر أسماء ملفات تعريف الارتباط المصممة بشكل خبيث.
في دليل tough-cookie/، يمكننا العثور على دليلين إضافيين يحتويان على الإصدارين الأصلي والمصحح من tough-cookie:
Original v2.5.0/) – إصدار tough-cookie 2.5.0 غير المعدل، وهو معرض للثغرة.v2.5.0-PATCHED/) – إصدار معدل يتضمن إصلاحًا لـ CVE-2023-26136.لتثبيت الإصدار الأصلي المعرض للثغرة:
npm install [email protected]
التصحيح المطبق يغير طريقة تخزين ملفات تعريف الارتباط: this.idx = {};
تم تغييرها إلى: this.idx = Object.create(null);
يمنع هذا المهاجمين من حقن الخصائص في سلسلة النموذج الأولي واستغلال الثغرة.
تنشأ الثغرة في tough-cookie (CVE-2023-26136) بسبب استخدام كائن JavaScript عادي {} لتخزين ملفات تعريف الارتباط. نظرًا لأن {} يرث من Object.prototype، يمكن استغلاله عن طريق حقن خصائص مثل proto، مما يؤدي إلى تلوث النموذج الأولي. قد يسمح هذا للمهاجم بالتلاعب بسلوك التطبيق أو التسبب في مشكلات أمنية.
للتخفيف من ذلك، يستبدل التصحيح {} بـ Object.create(null)، مما ينشئ كائنًا بدون نموذج أولي ([[Prototype]]: null). يضمن هذا عدم وراثة الكائن لأي خصائص من Object.prototype، مما يمنع المهاجمين من حقن خصائص خبيثة.
باستخدام Object.create(null)، نقوم فعليًا بعزل مخزن ملفات تعريف الارتباط عن وراثة النموذج الأولي غير المقصودة، مما يجعله أكثر أمانًا ضد هجمات تلوث النموذج الأولي.
لتثبيت الإصدار المصحح محليًا، اتبع الخطوات التالية:
tar -tzf tough-cookie-2.5.0.tgz
إذا لزم الأمر، قم باستخراجها:
tar -xzf tough-cookie-2.5.0.tgz
npm install ./tough-cookie-2.5.0.tgz
node index.js
الإخراج المتوقع:
EXPLOITED SUCCESSFULLY - للإصدار الأصلي
EXPLOIT FAILED - للإصدار المصحح
تم اختبار الإصدار المصحح على Node.js 20 (LTS) لضمان التوافق مع أحدث بيئة تشغيل مستقرة.
مستودع tough-cookie الأصلي (Salesforce) موجود حاليًا في الإصدار 5.1.1. نظرًا لأننا نعمل مع الإصدار 2.5.0، فإن التفرع المباشر من المستودع الرئيسي غير ممكن. بدلاً من ذلك، أنشأنا مستودعًا منفصلاً يحتوي على كل من الإصدارين الأصلي والمصحح. يمكنك العثور عليه هنا:
مستودع GitHub - النسخة المتفرعة
لمزيد من التفاصيل، قم بزيارة صفحة CVE الرسمية: CVE-2023-26136 - NVD