
إثبات المفهوم لـ CVE-2021-26700: تنفيذ التعليمات البرمجية عن بُعد في إضافة VSCode npm-script عبر settings.json ضار في مساحة العمل، مع إرشادات مفصلة للاستغلال والمعالجة.
تم إصلاحها في 10 فبراير 2021 في https://github.com/microsoft/vscode-npm-scripts/commit/cdd5e507564e0cc0f60bcccf184822be3fd73e07
https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-26700
ثغرة تنفيذ التعليمات البرمجية عن بُعد في إضافة eg2.vscode-npm-script (تم اختبارها على الإصدار 0.3.13) لـ VSCode تعني أن ملف .vscode/settings.json خبيث في مشروع يمكن أن يؤدي إلى تنفيذ تعليمات برمجية عن بُعد عند فتح ملف باسم package.json.
لم تكن هذه الثغرة ضمن أي برنامج مكافآت ثغرات Microsoft نشط، ولكن تم الإبلاغ عنها والتعامل معها من قبل MSRC.
بدون وجود ملف .vscode/settings.json خبيث في مستودع، عند فتح ملف package.json مع تثبيت إضافة ، سيتم تنفيذ الأمر .
eg2.vscode-npm-scriptnpm ls --depth 0 --jsonعن طريق تعيين المفتاح npm.bin في ملف settings.json الخاص بالمشروع، على سبيل المثال إلى ./payload.sh، سينفذ فتح package.json بدلاً من ذلك الأمر ./payload.sh ls --depth 0 --json من الدليل الذي يحتوي على package.json.
تكسر هذه الثغرة الافتراض بأنه يمكن قراءة الكود المصدري بأمان.
مثال لكيفية استخدام المهاجم لهذا:
linux-poc المرفق.package.json.payload.sh.رأيت طريقتين للتخفيف من مخاطر settings.json الخبيثة في مساحة عمل VSCode:
منع تعيين الإعدادات لكل مساحة عمل. هذا مُستخدم بالفعل في VSCode لـ git.path و terminal.integrated.shell.linux وبعض الإعدادات الأخرى.
قد يكسر هذا التوافق لبعض المستخدمين، ولكن له سابقة.
المرجع: https://vscode.readthedocs.io/en/latest/getstarted/settings/#settings-and-security
إذا تم تعيين هذا الإعداد في مساحة عمل، اطلب من المستخدم تأكيد الإعداد قبل تنفيذ الملف الثنائي.
هذا لن يكسر التوافق الحالي، وهو المسار الذي اتبعته إضافة ESLint اعتبارًا من الإصدار 2.1.7.
eg2.vscode-npm-script.linux-poc كمجلد في VSCode.package.json لعرضه./tmp/output.txt لإثبات التنفيذ.eg2.vscode-npm-script.windows-poc كمجلد في VSCode.package.json لعرضه.calc.exe.ملاحظة: لم أتمكن من استخدام مسار نسبي للملف الثنائي في ويندوز، لكن قد يكون هذا بسبب عدم إلمامي الكافي بويندوز.