یک کتابخانه کد NPM معروف به نام Pac-Resolver برای از بین بردن آسیب پذیری شدید اجرای کد از راه دور به روز شده است. توسعه دهندگانی که بسته را در برنامه های خود گنجانده اند ، باید اطمینان حاصل کنند که وابستگی های خود را برای از بین بردن اشکال به روز کرده و به روز رسانی های لازم را برای ایمن سازی آنها در اختیار کاربران قرار دهند. اگر اطلاعات پیکربندی پراکسی گرفتار بمب ، که می تواند از منابع متعدد باشد ، اجرا شود ، کد مخرب به پایان می رسد.
روز سه شنبه ، تیم پری ، که یک ابزار توسعه دهنده به نام HTTP Toolkit می سازد ، توضیح داد که چگونه این نقص را پیدا کرده است. یک هفته پیش به عنوان CVE-2021-23406 ، هنگام اضافه کردن پشتیبانی پروکسی به نرم افزار خود.
Pac-Resolver ، بیش از سه میلیون بار در هفته بارگیری شده ، از فایلهای "Proxy Auto-Config" (PAC) پشتیبانی می کند ، کلاینت های HTTP که از پروکسی برای نام میزبان معین استفاده کنند.
"فایل های PAC راهی برای توزیع قوانین پیچیده پروکسی ، به عنوان یک فایل واحد که انواع URL ها را به پروکسی های مختلف ترسیم می کند ، ارائه می دهد." پری در مشورتی توضیح می دهد. "آنها به طور گسترده در محیط های سازمانی مورد استفاده قرار می گیرند و بنابراین اغلب باید در هر نرم افزاری که ممکن است در محیط سازمانی اجرا شود پشتیبانی شوند."
این فایل ها ممکن است از سرور شبکه محلی ، از طریق HTTP یا از راه دور توزیع شوند. سرور ، روشی که به اندازه کافی متداول است که استانداردی به نام WPAD (Web Proxy Auto-Discovery Protocol) برای خودکارسازی کشف فایل PAC وجود دارد.
مشاهده پرونده های PAC به Netscape Navigator 2.0 در 1996 برمی گردد ، پری توضیح می دهد ، "این یک فایل جاوا اسکریپت است برای اتصال به اینترنت ، که از راه دور بارگذاری می شود ، اغلب به طور ناامن و/یا از محلی که می تواند به صورت بی سر و صدا توسط شبکه محلی شما بارگیری شود ، باید اجرا کنید. 1996 واقعاً زمان ساده تری بود. چه چیزی می تواند اشتباه باشد؟ "
خوب ، یک کار ایجاد یک تابع sandbox با استفاده از ماژول vm Node.js است که شامل هشدار زیر در اسناد آن است: "ماژول vm یک مکانیسم امنیتی نیست. از آن برای اجرای کد غیرقابل اعتماد استفاده نکنید."
مشکل ماژول vm ، همانطور که پری توضیح می دهد ، این است که اگر عملکردی مانند این را در فایل PAC کد جاوا اسکریپت قرار دهید …
// در اینجا عملکرد واقعی PAC است:
تابع FindProxyForURL (url ، host) {
بازگشت "DIRECT" ؛
}
// و در اینجا برخی از کد های دلخواه پاداش:
const f = this.constructor.constructor (`
// در اینجا ، ما در حال اجرا در خارج از سندباکس هستیم!
console.log ('Read system env vars:'، process.env)؛
console.log ('!!! فایل PAC دارای کد دلخواه است!')؛
process.exit (1) ؛ // فرآیند کلاینت HTTP را از راه دور بکشید
// ... سرقت داده ها ، شکستن چیزها ، و غیره و غیره و غیره
`) ؛
f () ؛
… این به vm.runInContext اشاره می کند ، که یک sandbox ایجاد شده از پارامتر شی در محیط Node.js خارجی ایجاد می کند. این راهی برای اجرای کد خارج از سندباکس فراهم می کند.
اما بگویید که شما باید آن هشدار ماژول را از دست بدهید. سپس ، مانند خالق Pac-Resolver ، که در Pac-Proxy-Agent استفاده می شود ، و به نوبه خود در Proxy-Agent استفاده می شود ، شما باید کد خود را بازبینی کرده و رفع آن را صادر کنید.
"متأسفانه ، Pac Perry می گوید -Proxy-Agent اسکریپت های PAC را به طور صحیح سندبوک نمی کند. " "هر بار که با استفاده از فایل PAC درخواستی می کنید ، می تواند کد دلخواه را اجرا کرده و هر کاری را در سیستم شما انجام دهد. اگر مخرب است ، در مشکل بزرگی هستید."
هر کسی از نسخه Pac-Resolver ، Pac- استفاده می کند Proxy-Agent یا Proxy-Agent قبل از نسخه 5.0 به طور بالقوه در برابر بارگیری یک فایل PAC مخرب آسیب پذیر است.
چگونه می توان از آن سوء استفاده کرد؟ یک فایل پیکربندی به دام انداخته شده می تواند توسط یک مدیر شبکه سرکش برای خراب کردن دستگاه ارائه شود ، یا شخصی می تواند یک واکشی ناامن از پرونده را رهگیری کرده و آن را بازنویسی کند تا به اجرای کد از راه دور برسد. در حقیقت ، پری تعدادی از مسیرها را در نوشتن خود ذکر کرد:
رفع این مشکل ، که در نسخه 5+ 5 هر یک از این بسته ها وجود دارد ، در پایین درخت وابستگی در بسته Pac-Resolver's Degenerator انجام شد.
پری این را می بیند حادثه به عنوان گواهی بر ارزش بررسی وابستگی های کد شما.
"در بسیاری از موارد ، به ویژه برای برنامه های بزرگ با وابستگی های پیچیده ، این امکان برای همه وابستگی ها وجود ندارد ، اما حداقل بررسی حساس ترین وابستگی های شما (مانند پیکربندی خودکار پروکسی) به شما کمک می کند این اشکالات ناخواسته را بگیرید و به رفع آنها برای همه کمک می کند. "
