الثغرة الأمنية في حزمة NPM قناع الشبكة المستخدمة في 270 مشروع

تحتوي حزمة Node-netmask NPM، التي لديها حوالي 3 ملايين عملية تنزيل أسبوعيًا وتستخدم كاعتماد على أكثر من 270 ألف مشروع على GitHub، على ثغرة أمنية (CVE-2021-28918) تسمح لها بتجاوز عمليات التحقق التي تستخدم قناع الشبكة لتحديد التكرار لنطاقات العناوين أو للتصفية. تم إصلاح المشكلة في إصدار Node-netmask 2.0.0.

تتيح الثغرة الأمنية التعامل مع عنوان IP خارجي كعنوان من الشبكة الداخلية والعكس، وبمنطق معين لاستخدام وحدة قناع الشبكة في التطبيق لتنفيذ SSRF (تزوير الطلب من جانب الخادم)، وRFI (تضمين الملفات عن بعد) وهجمات LFI (تضمين الملفات المحلية) للوصول إلى الموارد الموجودة على الشبكة الداخلية وتضمين الملفات الخارجية أو المحلية في سلسلة التنفيذ. تكمن المشكلة في أنه وفقًا للمواصفات، يجب تفسير قيم سلسلة العناوين التي تبدأ بالصفر على أنها أرقام ثماني، لكن وحدة قناع الشبكة للعقدة لا تأخذ ذلك في الاعتبار وتعاملها كأرقام عشرية.

على سبيل المثال، يمكن للمهاجم أن يطلب موردًا محليًا عن طريق تحديد القيمة "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"، ولكن سيتم معاملته على أنه "127.0.0.1" في وحدة "node-netmask". وبالمثل، يمكنك الغش في التحقق من الوصول إلى عناوين الإنترانت عن طريق تحديد قيم مثل "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

إضافة تعليق