
# استغلال RCE تعليمي لثغرة CVE-2021-26700 في إضافة npm الخاصة بـ VS Code، يوضح نفق DNS إلى خادم Caldera C2 عبر تنفيذ package.json خبيث.
(ملاحظة: هذا الدليل صالح لأعضاء مختبر DSNS فقط.)
هذه ثغرة تنفيذ برمجيات عن بُعد (RCE) كانت موجودة في إضافة من إضافات Visual Studio Code (VS Code) تُسمى npm، وهي من تطوير Microsoft وكانت تهدف إلى دعم تشغيل سكربتات npm المعرَّفة في ملف package.json.
لاستغلال هذه الثغرة، قد يرفع المهاجم بعض السكربتات الخبيثة المخفية في ملفات إلى مستودعه العام على GitHub، مع بعض التعديلات الطفيفة في الإعدادات التي تستخدمها إضافة npm. إذا قام شخص ما بتنزيل هذا المستودع وفتحه في بيئة VS Code مثبَّت عليها الإضافة المحددة، فبمجرد أن يعرض ملف package.json، سيتم تنفيذ السكربت الخبيث. في السيناريو الخاص بي، السكربت الخبيث هو ملف دفعي (batch file) يُسمى calc.bat وسيقوم بتنفيذ برنامج deployagent.ps1، والذي سينشئ بعد ذلك نفق DNS (DNS tunneling) إلى خادم Caldera الخاص بمختبر DSNS على http://192.168.1.29:8888.
نظرًا لأن هذه الثغرة (CVE) اكتُشفت في عام 2021 وقد أصلحها فريق Microsoft في الإصدارات اللاحقة، نحتاج إلى إيجاد طريقة لتنزيل إصدار أقدم ([v0.3.13](https://eg2.gallery.vsassets.io/_apis/public/gallery/publisher/eg2/extension/vscode-npm- script/0.3.13/assetbyname/Microsoft.VisualStudio.Services.VSIXPackage)) من إضافة npm. بدلاً من ذلك، قمت بتضمينه على GitHub لسهولة الوصول. كما تم تضمين سكربت لتثبيت VS Code على نظام Windows.
على نظام Windows (مثل APT3 في مختبر DSNS)، شغِّل الأمر التالي للحصول على هذا المستودع
git clone https://github.com/jason-ntu/CVE-2021-26700.git
(يمكنك أيضًا تنزيل المستودع وفك ضغطه من خلال الواجهة الرسومية). يُفترض أن الخطوات التالية تُنفَّذ داخل المستودع (أي داخل مجلد CVE-2021-26700 المستنسَخ).
لتثبيت VS Code على Windows، شغِّل .\install-vscode.bat
قم بإعداد الأمر code كاختصار لفتح VS Code بإضافة الإعداد التالي إلى settings.json الخاص بـ VS Code.
لتثبيت الإصدار المطلوب من إضافة npm، شغِّل .\install-extension.bat
لاستغلال الثغرة، تحتاج إلى فتح المستودع في VS Code وعرض ملف package.json. بعد ثوانٍ من الانتظار، يجب أن يكون اتصال DNS من Caldera على http://192.168.1.29:8888 إلى الضحية قد أُنشئ. تم تنفيذ RCE!
المرجع: jackadamson's github