تم الإعلان مؤخرًا عن اكتشاف ثغرة أمنية خطيرة في مستودع حزم RubyGems.org (تم بالفعل فهرسة الثغرة الأمنية تحت CVE-2022-29176)، والتي تسمح ، بدون ترخيص مناسب، باستبدال حزم الآخرين في المستودع عن طريق بدء عملية سحب (yank) حزمة شرعية وتحميل ملف آخر بنفس الاسم ورقم الإصدار في مكانه.
يذكر أن الثغرة الأمنية ناتجة عن خطأ في معالج إجراء "yank" ، والذي يعامل الجزء من الاسم الذي يلي الواصلة كاسم النظام الأساسي، مما يجعل من الممكن بدء إزالة الحزم الخارجية التي تتطابق في جزء الاسم حتى حرف الواصلة.
على وجه الخصوص، في كود معالج عملية "yank"، تم استخدام الاستدعاء 'find_by!(full_name: "#{rubygem.name}-#{slug}")' للبحث عن الحزم، بينما تم تمرير معلمة "slug" إلى مالك الحزمة لتحديد الإصدار المراد إزالته.
يمكن لمالك الحزمة "rails-html" تحديد "sanitizer-1.2.3" بدلاً من الإصدار "1.2.3" ، مما قد يتسبب في تطبيق العملية على "rails-html-sanitizer-1.2.3" طرد ″ من شخص آخر. »
تم نشر تقرير استشاري أمني لـ Rubygems.org أمس.
يتعلق التحذير بوجود خلل سمح لمستخدم ضار بالتعدين على جواهر معينة وتحميل ملفات مختلفة بنفس الاسم ورقم الإصدار ونظام أساسي مختلف.
دعنا نلقي نظرة أعمق لمعرفة الخطأ الذي حدث أثناء عملية الاستخراج. كذريعة ، دعنا نتخيل سيناريو حيث نقوم بإنشاء جوهرة تسمى "rails-html" بقصد الحصول على وصول غير مصرح به إلى جوهرة "rails-html-sanitizer" المستخدمة على نطاق واسع.
يذكر أنه يجب استيفاء ثلاثة شروط من أجل استغلال هذه الثغرة بنجاح:
- لا يمكن تنفيذ الهجوم إلا على الحزم التي تحتوي على حرف الواصلة في أسمائها.
- يجب أن يكون المهاجم قادرًا على وضع حزمة جوهرة مع جزء من الاسم يصل إلى حرف الواصلة. على سبيل المثال ، إذا كان الهجوم ضد حزمة "rails-html-sanitizer" ، فيجب على المهاجم وضع حزمة "rails-html" الخاصة به في المستودع.
- يجب أن تكون الحزمة التي تعرضت للهجوم قد تم إنشاؤها في آخر 30 يومًا أو لم يتم تحديثها لمدة 100 يوم.
تم تحديد المشكلة من قبل باحث أمني كجزء من برنامج مكافآت HackerOne للعثور على المشكلات الأمنية في مشاريع المصادر المفتوحة المعروفة.
تم إصلاح المشكلة على موقع RubyGems.org في الخامس من مايو ، ووفقًا للمطورين، لم يتم رصد أي آثار لاستغلال هذه الثغرة في سجلات النظام خلال الأشهر الثمانية عشر الماضية. مع ذلك، لم يُجرَ حتى الآن سوى تدقيق سطحي، ومن المقرر إجراء تدقيق أكثر تعمقًا في المستقبل.
في الوقت الحاضر ، نعتقد أنه لم يتم استغلال هذه الثغرة الأمنية.
يرسل RubyGems.org بريدًا إلكترونيًا إلى جميع مالكي الأحجار الكريمة عند إصدار نسخة الأحجار الكريمة أو إزالتها. لم نتلق أي رسائل بريد إلكتروني للدعم من مالكي الأحجار الكريمة تشير إلى أنه تم استخراج الأحجار الكريمة الخاصة بهم دون إذن.
لم يجد التدقيق في تغييرات الأحجار الكريمة على مدار الـ 18 شهرًا الماضية أي أمثلة على الاستخدام الضار لهذه الثغرة الأمنية. مزيد من التدقيق لأي استخدام محتمل لهذا الاستغلال لم يجد أي مثال على استخدام هذا الاستغلال للاستيلاء على جوهرة دون إذن في تاريخ RubyGems. لا يمكننا ضمان عدم حدوث ذلك أبدًا ، لكن لا يبدو أنه من المحتمل حدوثه.
للتحقق من مشاريعك ، يوصى بتحليل محفوظات العمليات في ملف Gemfile.lock يتم التعبير عن النشاط الضار في وجود تغييرات بنفس الاسم والإصدار ، أو تغيير النظام الأساسي (على سبيل المثال ، عند حزمة xxx-1.2.3 .1.2.3 تم تحديثه إلى xxx-XNUMX-xxx).
كحل لمواجهة انتحال الحزم المخفية في أنظمة التكامل المستمر أو عند نشر المشاريع، يُنصح المطورون باستخدام Bundler مع خيارات "--frozen" أو "--deployment" لتأكيد التبعيات.
وأخيرًا، إذا كنت مهتمًا بمعرفة المزيد عن هذا الموضوع ، يمكنك العثور على التفاصيل في الرابط التالي.