صفر دردسرساز و آسیبپذیری netmask
کتابخانه محبوب netmask از مجموعه npm دارای یک آسیبپذیری بحرانی است. صدها هزار برنامه برای خواندن و مقایسه آدرسهای IPv4 از این کتابخانه استفاده میکنند.
کتابخانه محبوب netmask از مجموعه npm دارای یک آسیبپذیری بحرانی است. صدها هزار برنامه برای خواندن و مقایسه آدرسهای IPv4 از این کتابخانه استفاده میکنند. این کتابخانه هر هفته بیش از 3 میلیون بار دانلود میشود و تا کنون در مجموع 238 میلیون بار دانلود شده است. همچنین حدود 279 هزار مخزن گیتهاب به آن وابسته هستند.
|
صفر سمت چپ، آیپی را تغییر میدهد |
این آسیبپذیری (CVE-2021-28918) به این معنا است که هنگام خواندن آدرس آیپی که با صفر شروع میشود، netmask آیپی را به شکل متفاوتی تفسیر میکند. یک آدرس آیپی میتواند با فرمتهای مختلفی از جمله هگزادسیمال (مبنای 16)، اکتال (مبنای 8) و عدد صحیح نمایش داده شود، هرچند معمولاً از فرمت دسیمال (مبنای 10) استفاده میشود. آیپی معروف 127.0.0.1 را در نظر بگیرید که به عنوان آدرس loopback یا localhost استفاده میشود. اگر این آدرس را با یک صفر در سمت چپ (0127.0.0.1) در مرورگر وارد کنید، خواهید دید که مرورگر به آدرس 87.0.0.1 منتقل میشود. علت این امر آن است که وقتی قسمتی از آدرس آیپی با صفر شروع شود، به صورت اکتال تفسیر میشود و معادل اکتال 127 برابر است با 87. اما کتابخانه netmask صفرهای ابتدایی را نادیده گرفته و همه قسمتهای آیپی را دسیمال در نظر میگیرد. |
از SSRF و گریز از بلاک لیست تا RFI |
در نگاه اول به نظر نمیرسد این باگ مسئله مهمی باشد. اما اگر مهاجم بتواند آدرس آیپی داده شده به یک اپلیکیشن را تحت تأثیر قرار دهد، این اشکال میتواند باعث آسیبپذیریهای مختلفی از جعل درخواست سمت سرور (Server-Side Request Forgery, SSRF) تا گنجاندن فایل از راه دور (Remote File Inclusion, RFI) را سبب شود. فرض کنید فردی یک سرور node راهاندازی کرده است تا درخواستهای ورودی را پاکسازی (sanitize) کند. به عنوان مثال، ممکن است یکی از پارامترهای ورودی URIی باشد که قرار است برای برقراری اتصال، دریافت منابع و … به کار رود. مهاجم یک آدرس آیپی در مبنای 8 را به عنوان ورودی میفرستد. این میتواند برای حمله SSRF مناسب باشد. مثلاً اگر مهاجم 0177.0.0.1 را بفرستد، سرور به 127.0.0.1 متصل میشود. به عنوان مثال، سیستمی که دارای webhookهایی است و URLها را از طریق netmask بررسی میکند، نسبت به SSRF آسیبپذیر خواهد بود. در عین حال، از این آسیبپذیری میتوان برای گنجاندن فایل از راه دور نیز استفاده کرد. برای این کار، مهاجم میتواند آدرسی بسازد که از دید netmask خصوصی به نظر میرسد اما سایر مؤلفهها، آن را عمومی ارزیابی میکنند. محصولات امنیتی و شبکهای بسیاری از قبیل فایروال اپلیکیشن وب (Web Application Firewall) برای تطبیق آدرسهای آیپی با لیستهای سیاه و لیستهای سفید از netmask استفاده میکنند. بنابراین اگر چنین آسیبپذیریهایی مورد بررسی قرار نگیرند، میتوانند به اشکالات مهمی در کنترلهای امنیتی منجر شوند. به گفته جان جکسون از کاشفان آسیبپذیری، اشکال کشف شده هزاران پروژه را نسبت به SSRF آسیبپذیر میکند. «Netmask هر هفته میلیونها بار دانلود میشود که باعث میشود آسیبپذیری تأثیر بالایی داشته باشد. این یک آسیبپذیری بزرگ زنجیره تأمین است». |
بهروزرسانی |
پس از گزارش آسیبپذیری، اولیویه پویتری (Olivier Poitrey) توسعهدهنده netmask آن را بهروزرسانی کرد. او بر خلاف کاشفان آسیبپذیری، آن را چندان خطرناک نمیداند: «بستگی دارد بحرانی را چه طور تعریف کنیم و چگونه از این کتابخانه استفاده کنیم. این باگ از نوع سرریز بافر یا اجرای [کد] از راه دور نیست.» «من نمیتوانم روی اپلیکیشن شما منع سرویس انجام دهم. اما اگر ACL (لیست کنترل دسترسی) شما بر مبنای دسترسی آیپی با استفاده از این کتابخانه کار کند میتوانم ACL را تضعیف کنم.» «من هنوز نمیتوانم سناریویی را تصور کنم که این [آسیبپذیری] در آن مورد بهرهبرداری قرار بگیرد. اکثر مواقع ACLها بر آیپیهای یاد گرفته شده از پشته آیپی مبتنی هستند و این آیپیها هیچگاه از فرمت آسیبپذیر استفاده نمیکنند.» آسیبپذیری CVE-2021-28918 در نسخه 2.0.0 کتابخانه netmask وصله شد، اما پس از آن مشخص شد که این وصله ناقص است. سپس شناسه CVE-2021-29418 به این آسیبپذیری تعلق گرفت و در نسخه 2.0.1 به طور کامل برطرف شد. |