
تصحيح أمني لـ CVE-2023-26136 في tough-cookie 2.5.0 - إصلاح ثغرة تلوث النموذج الأولي مع التوافق مع الإصدارات السابقة
يعالج هذا المشروع CVE-2023-26136، وهي ثغرة حرجة لتلوث النموذج الأولي (prototype pollution) في إصدارات tough-cookie قبل 4.1.3. تؤثر الثغرة على تطبيق الويب الخاص بشركة Penguin Software Inc.، الذي يستخدم [email protected] لمعالجة ملفات تعريف الارتباط.
CVE-2023-26136 هي ثغرة تلوث النموذج الأولي (prototype pollution) تحدث عند استخدام CookieJar مع rejectPublicSuffixes=false. تنشأ المشكلة من تهيئة غير صحيحة للكائنات في فئة MemoryCookieStore، مما يسمح للمهاجمين بحقن خصائص في Object.prototype عبر نطاقات ملفات تعريف ارتباط مصممة بشكل خبيث.
توجد الثغرة في lib/memstore.js حيث يتم تخزين ملفات تعريف الارتباط باستخدام كائنات JavaScript عادية ({}). وبما أن هذه الكائنات ترث من Object.prototype، يمكن للمهاجمين استغلال ذلك عن طريق تعيين ملفات تعريف ارتباط بنطاقات مثل __proto__ أو constructor أو prototype، مما يؤدي إلى تلوث النموذج الأولي.
يستبدل الإصلاح جميع حالات {} بـ Object.create(null) في فئة MemoryCookieStore:
// Before (vulnerable)
this.idx = {};
// After (fixed)
this.idx = Object.create(null);
يمنع هذا التغيير تلوث النموذج الأولي عن طريق إنشاء كائنات بدون سلسلة نماذج أولية، مما يعزل تخزين ملفات تعريف الارتباط بشكل فعال عن الوراثة غير المقصودة.
lib/memstore.js: تم تحديث تهيئة الكائنات لاستخدام Object.create(null)├── README.md # This file
├── changes.diff # Git-compatible diff file
├── test-cve-2023-26136.js # Unit test for the fix
├── tough-cookie/
│ ├── index.js # Exploit demonstration
│ ├── Original v2.5.0/ # Original vulnerable version
│ ├── v2.5.0-PATCHED/ # Patched version
│ │ └── tough-cookie-2.5.0.tgz # Packed version
│ └── package.json
└── mission.txt # Original mission requirements
الإصدار المُصحح متاح كـ tough-cookie/v2.5.0-PATCHED/tough-cookie-2.5.0.tgz.
للتثبيت:
npm install ./tough-cookie/v2.5.0-PATCHED/tough-cookie-2.5.0.tgz
يجب أن تجتاز مجموعة اختبارات tough-cookie الأصلية. لتشغيل الاختبارات:
cd tough-cookie/v2.5.0-PATCHED
npm install
npm test
ملاحظة: لا يتضمن tough-cookie 2.5.0 الأصلي دليل اختبارات في هذا التوزيع، لكن الإصدار المُصحح يحافظ على توافق كامل مع واجهة برمجة التطبيقات الأصلية.
قم بتشغيل اختبار الوحدة المخصص للتحقق من الإصلاح:
node test-cve-2023-26136.js
المخرجات المتوقعة:
Testing CVE-2023-26136 fix...
✅ CVE-2023-26136 fix verified: No prototype pollution detected
✅ Test passed: The vulnerability has been successfully patched
يتضمن المشروع عرضًا توضيحيًا للاستغلال في tough-cookie/index.js:
cd tough-cookie
node index.js
سيختبر هذا كلًا من الإصدار الأصلي الضعيف والإصدار المُصحح، موضحًا:
EXPLOITED SUCCESSFULLY للإصدار الأصليEXPLOIT FAILED للإصدار المُصححيحتوي ملف changes.diff على ملف فرق (diff) متوافق مع git يمكن تطبيقه باستخدام:
git apply changes.diff
يتضمن هذا الفرق فقط التغييرات اللازمة لإصلاح الثغرة دون أي تعديلات غير مقصودة.
يعمل الاستغلال عبر:
CookieJar مع rejectPublicSuffixes: false__proto__Object.prototypeالأضرار المحتملة:
✅ تم اختباره والتحقق منه على Node.js 20 (LTS)
مستودع GitHub: مستودع tough-cookie المُفترَع
وسم Git: v2.5.0-patched-cve-2023-26136-fix
GitHub Actions - مستوى خبير
Jenkins - مستوى متقدم
Travis CI - مستوى متوسط
CircleCI - مستوى متوسط
GitLab CI/CD - مستوى متقدم
يحافظ هذا المشروع على ترخيص tough-cookie الأصلي (BSD-3-Clause) مع إضافة الإصلاح الأمني.
ملاحظة: هذا تصحيح يركز على الأمان يحافظ على التوافق الكامل مع الإصدارات السابقة مع القضاء على ثغرة CVE-2023-26136.