عمليات بث Node.js: اكتشف مهندسو Google وجود ثغرة أمنية في نصوص NPM

الصورةمطورو Node.js ، قم بتشغيل الأمر `npm install 'على مسؤوليتك وتذكر أن الدودة ذاتية الانتشار تتجول بحرية حول النظام البيئي.

لا يمكنك أبدًا أن تفترض أن الملف الذي تم تنزيله من الإنترنت آمن. وينطبق هذا على NPM ، مدير حزم Node.js القياسي. تسمح الثغرة الأمنية في تثبيت البرامج النصية للمهاجم بإنشاء دودة ذاتية الانتشار يمكن أن تمر عبر حزم NPM.


يكتب مطور Google Sam Sakoni في مقاله "Exposing NPM Hydra": "هذا ممكن لأن حزمة NPM واحدة يمكن أن تمر بسهولة عبر معظم النظام البيئي من خلال نفسها".

كما هو الحال في مديري الحزم الآخرين ، تدعم NPM البرامج النصية لـ "دورة الحياة" التي يمكن تنفيذها بواسطة أوامر خارجية في النظام كمستخدم حالي. على الرغم من أن هذه البرامج النصية غالبًا ما تكون مفيدة وتستخدم لتنظيف الملفات بعد عملية التثبيت ، وتجميع الوحدات الثنائية وإنشاء ملفات التكوين تلقائيًا ، إلا أنها يمكن أن تكون خطيرة في نفس الوقت ، لأنها يمكن أن تحدث أي تغييرات على النظام عند تنفيذ أوامر مختلفة.
يكتبون في مقال على مدونة NPM الرسمية: "من الممكن أن تقوم حزم NPM المكتوبة بنية خبيثة ، أثناء التثبيت ، بتنفيذ نصوص برمجية مضمنة في حزم أخرى ، والتي بدورها يتم نشرها في السجل ، وحزم أخرى أنشأها المستخدم". ومع ذلك ، تشير الشركة إلى أن فوائد استخدام هذه النصوص تفوق مخاطر التهديد المحتمل.

يقلل المنشور من المخاطر ويجذب الانتباه إلى الحزم "النظيفة منذ البداية" ، ولكن ليست جميعها مضمونة "مائة بالمائة" من ذلك. مقالة ساكوني ، باستثناء بعض الحلول البديلة ، لا توضح كيفية التأكد من أن الحزم التي يقوم المستخدمون بتثبيتها لن تكون كما توقعوا.

وتشير المقالة إلى أن "NPM لا يمكنها ضمان أمان تسجيل الحزمة الخاصة بها".

تتسرب الدودة عبر تبعيات الحزم

تستفيد الدودة من ثلاث ميزات في NPM: الإصدار الدلالي (semver) ، والنشر في سجل مركزي ، وامتيازات للمستخدم الذي يقوم بتسجيل الدخول تلقائيًا. لأن المستخدم يظل مفوضًا حتى تسجيل الدخول يدويًا. يسمح أي شخص يقوم بتسجيل الدخول وتشغيل التثبيت للوحدات النمطية الأخرى بتنفيذ مجموعة متنوعة من الأوامر. طالما لا يوجد ربط بإصدارات محددة ، يمكن ترقية الحزم إلى إصدارات جديدة ، ويمكن لكل منها تنفيذ التعليمات البرمجية. وأخيرًا ، يمكنهم إرسال حزم إلى خادم التسجيل المركزي ، حيث يمكن للآخرين تثبيتها.

يعتمد هجوم الدودة على الهندسة الاجتماعية للعدوى الأولية ويمكن أن تتحرك "التحسينات" المذكورة أعلاه بحرية حول النظام البيئي.

أولاً ، يخدع المهاجم صاحب حزمة NPM لتثبيت الحزمة المصابة على نظامه. يمكن أن يكون التصيد أو أي هجوم آخر مماثل. وبمجرد تثبيته ، فإنه ينشئ إصدارًا "طروادة" من حزمة مالك وحدة NPM ويضع خطافًا لإطلاق الدودة أينما تم تثبيتها. تصبح الوحدة المعدلة المنشورة على حساب المالك نقطة البداية لإصابة جميع حزمها ، مما يؤدي إلى إطلاق وحدة طروادة باعتبارها تابعة. تقوم الدودة بإنشاء إصدارات جديدة من الوحدات النمطية في الحساب مع التعليق "bugfix" ، والآن ، عندما يتم تثبيتها ، يمكن تنفيذ التعليمات البرمجية للنشر الذاتي.

على سبيل المثال. Phonegap لديه 463 تبعيات وسيطة. ويمكن لـ 276 حساب NPM فردي تحديث إصدارات حزمها. يقول ساكوني إن شخصًا واحدًا فقط من أصل 276 يكفي للدودة لمواصلة إصابة كل من قام بتثبيت الحزمة من مشروع PhoneGap.

NPM تنفي المخاطر في

حين لم يتم إغلاق الثقب ، تبرز ملاحظة حول الضعف من فريق الاستعداد للطوارئ الحاسوبية بالولايات المتحدة عدة حلول للتحايل على الخطر. يستخدمون خيار "-ignore-scripts" عند تثبيت تبعيات جديدة ، وإغلاق الإصدارات باستخدام "npm-shrinkwrap" ، وتشجيع المستخدمين الذين يتم حظر وحداتهم أنفسهم باستمرار من NPM.

يجب على المؤسسات التي تستخدم NPM في بيئاتها تشغيل مرآة تسجيل NPM محلية ومنع المستخدمين الفرديين من تثبيت التبعيات مباشرة من السجل الرئيسي. يجب عليهم التحقق بانتظام من السجل المحلي والتأكد من أن الملفات الضارة ليست في قائمة التبعيات.

أوصت Sakoni بتحديد وقت انتهاء صلاحية الرموز المميزة وإجبار المستخدمين على إنهاء NPM بعد فترة زمنية معينة. في منشور مدونة ، لم تصف الشركة هذه التوصيات ، لكنها أعلنت عن حلول أخرى لتقليل المخاطر.

تتمثل إحدى الأفكار في تعقيد نشر الوحدات النمطية ، إذا لم يكن المستخدم على علم بالخطر ، فقد يكون هذا مصادقة ثنائية. لا يزال بإمكانك العمل مع الشركات التي توفر الحماية ، وتقدم للأخيرة فحص الوحدات ، ولكن هذا غير ممكن حتى الآن. في الوقت الحالي ، تراقب الشركة الحزم التي يتم تحديثها بشكل متكرر ، حيث يمكن الكشف عن الدودة من خلال الإصدارات المتكررة جدًا من الإصدارات الجديدة ، لكنها تعتمد بشكل أكبر على المستخدمين الذين سيقومون هم أنفسهم بإبلاغ الحزم المشبوهة.

وقالت المدونة: "بلا شك ، إذا حاول العديد من المستخدمين نشر حزم ضارة بشكل جماعي في حفلة موسيقية ، فستكون متاحة في سجل الآلية الوقائية الوطنية".

ثق ولكن تحقق

ستكون بضعة أيام صعبة بالنسبة للآلية الوقائية الوطنية. تحديد الحزم الخبيثة المنشورة هو "كعب أخيل" الخاص بهم. في المناقشة الحالية حول موضوع التنظيم من قبل مدير الحزم المحذوفة من التسجيل. إزالة مطور حزمة من NPM الأسبوع الماضي ، وبالتالي كسر الكثير من المشاريع التي تعتمد عليها. من السهل جدًا تسجيل الرمز الخاص بك تحت اسم الوحدة البعيدة. يمكن لأي شخص قام بتعيين اسم شخص آخر تعيين الرمز لأي مستخدم ، والذي يعتمد على الأصل.

في الأيام القليلة الماضية ، ناقش Reddit و GitHub الكثير حول الثقة في المطورين ، ودعم الحزم التي قاموا بإنشائها وما إذا كانوا سيبدأون في إنشاء تعليمات برمجية ضارة. في النظام البيئي العالمي ، يعد هذا افتراضًا خطيرًا ، لأنه إذا أراد أحد هؤلاء المطورين كسر الكثير من التعليمات البرمجية ، فسيتعين عليه مواجهة المجتمع بأكمله. ومع ذلك ، يجب أن تكون هناك طرق لتثبيت الوحدات بأمان ، يمكن أن يكون توقيعًا رقميًا أو طرقًا أخرى للتحقق من الرمز من أجل الأمان والصحة. في هذه الأثناء ، يبقى فقط الشعور بالإنذار في كل مرة تقوم فيها بتشغيل الأمر `npm install`.

المقال الأصلي: www.infoworld.com/article/3048526/security/nodejs-alert-google-engineer-finds-flaw-in-npm-scripts.html

Source: https://habr.com/ru/post/ar392409/


All Articles