آسیب پذیری در بسته NPM node-netmask مورد استفاده در 270 هزار پروژه

بسته NPM node-netmask که حدود 3 میلیون بارگیری در هفته دارد و به عنوان وابستگی به بیش از 270 هزار پروژه در GitHub استفاده می شود، دارای یک آسیب پذیری (CVE-2021-28918) است که به آن اجازه می دهد بررسی هایی را که از netmask استفاده می کنند دور بزند. برای تعیین وقوع برای آدرس دادن محدوده ها یا برای فیلتر کردن. این مشکل در انتشار node-netmask 2.0.0 برطرف شده است.

این آسیب پذیری این امکان را فراهم می کند که یک آدرس IP خارجی به عنوان یک آدرس از شبکه داخلی و بالعکس، و با منطق خاصی استفاده از ماژول node-netmask در برنامه برای انجام SSRF (جعل درخواست سمت سرور)، RFI انجام شود. حملات (Remote File Inclusion) و LFI (Local File Inclusion) برای دسترسی به منابع موجود در شبکه داخلی و گنجاندن فایل های خارجی یا محلی در زنجیره اجرا. مشکل این است که طبق مشخصات، مقادیر رشته آدرس که با صفر شروع می شوند باید به عنوان اعداد اکتال تفسیر شوند، اما ماژول node-netmask این را در نظر نمی گیرد و آنها را به عنوان اعداد اعشاری در نظر می گیرد.

به عنوان مثال، یک مهاجم می تواند با تعیین مقدار "0177.0.0.1" که مطابق با "127.0.0.1" است، یک منبع محلی درخواست کند، اما ماژول "node-netmask" تهی را حذف می کند و 0177.0.0.1" را به عنوان "در نظر می گیرد. 177.0.0.1" که در برنامه کاربردی هنگام ارزیابی قوانین دسترسی، تشخیص هویت با "127.0.0.1" امکان پذیر نخواهد بود. به طور مشابه، یک مهاجم می تواند آدرس "0127.0.0.1" را مشخص کند که باید با "87.0.0.1" یکسان باشد، اما در ماژول "node-netmask" به عنوان "127.0.0.1" رفتار می شود. به طور مشابه، می‌توانید چک را برای دسترسی به آدرس‌های اینترانت با تعیین مقادیری مانند «012.0.0.1» (معادل «10.0.0.1»، اما در حین بررسی به عنوان 12.0.0.1 پردازش می‌شود، تقلب کنید.

محققانی که مشکل را شناسایی کردند، این مشکل را فاجعه‌بار نامیدند و چندین سناریو حمله ارائه کردند، اما بیشتر آنها حدس‌آمیز به نظر می‌رسند. به عنوان مثال، در مورد امکان حمله به یک برنامه مبتنی بر Node.js صحبت می کند که اتصالات خارجی را برای درخواست منبعی بر اساس پارامترها یا داده های درخواست ورودی ایجاد می کند، اما برنامه به طور خاص نامگذاری نشده است یا جزئیات آن ذکر نشده است. حتی اگر برنامه‌هایی بیابید که منابع را بر اساس آدرس‌های IP وارد شده بارگیری می‌کنند، کاملاً مشخص نیست که چگونه می‌توان از این آسیب‌پذیری در عمل بدون اتصال به یک شبکه محلی یا بدون کنترل آدرس‌های IP «آینه‌ای» سوء استفاده کرد.

محققان فقط فرض می کنند که دارندگان 87.0.0.1 (Telecom Italia) و 0177.0.0.1 (Brasil Telecom) می توانند محدودیت دسترسی به 127.0.0.1 را دور بزنند. یک سناریوی واقعی تر، سوء استفاده از آسیب پذیری برای دور زدن لیست های مختلف بلاک سمت برنامه است. این موضوع همچنین می تواند برای اشتراک گذاری تعریف محدوده های اینترانت در ماژول NPM "private-ip" اعمال شود.

منبع: opennet.ru

اضافه کردن نظر