
Proof-of-concept لـ CVE-2021-44906 يوضح تلويث النموذج الأولي في minimist عبر تجاوز Function.prototype، مع أمثلة قابلة للتشغيل وتحليل تقني مفصل لسلسلة الاستغلال.
المصدر الأصلي: https://github.com/Marynk/JavaScript-vulnerability-detection/blob/main/minimist%20PoC.zip
npm run hack
وسترى أن خاصية done لأي دالة قد تغيرت إلى true.
شرح سطر الأوامر node index.js --_.concat.constructor.prototype.done true:
-- هي علامة الشرطة التي تستخدم عادة في وسائط سطر الأوامر._ هو المفتاح المدمج في minimist: https://github.com/minimistjs/minimist/blob/v1.2.5/index.js#L37.concat.constructor.prototype.done true ستقوم بتعيين _.concat.constructor.prototype.done إلى .trueلأن _.concat.constructor من نوع Function، سيتم إضافة خاصية تسمى done إلى نموذج (prototype) جميع الدوال Function.
السبب في أن سلسلة النموذج (prototype chain) بهذا الطول هو أنه في الإصلاحات السابقة، قام المطور بحظر __proto__ و Arrary.prototype و Object.prototype و Number.prototype و String.prototype. لذا كان علينا استخدام constructor الذي يحتوي على خاصية prototype وهو غير مدرج في القائمة السوداء.
مثال آخر:
npm run hack2
ومع ذلك، في المثالين أعلاه، يمكننا فقط العبث بالقيم وليس تعريف الدوال.
في إصلاح CVE-2020-7598 (1.2.2)، وفي 1.2.3 قام المطور بإصلاح بعض الثغرات عن طريق التحقق من __proto__ و Arrary.prototype و Object.prototype و Number.prototype و String.prototype، لكنهم نسوا التحقق من Function.prototye. ولهذا السبب يمكن لهذا الاستغلال أن يؤثر فقط على خاصية Function.
بالنسبة لإصلاح هذا CVE، قام المطور بالتحقق من Function.prototype وكذلك constructor: https://github.com/minimistjs/minimist/blob/v1.2.6/index.js#L73