تقرير يكشف رفع أكثر من 2,000 حزمة خبيثة على RubyGems استهدفت خوادم التوثيق
الهجوم لم يستهدف من يثبّت الحزم بل الـ registry نفسه، وكل خطوة في الـ pipeline تقرأ ملفًا من حزمة مرفوعة وتنفذه هي مساحة هجوم كاملة.
نشر الباحثون Spencer Kitts وThomas Larsen وSydney Von Arx في 11 سبتمبر 2026 تقريرًا يوثق حملة أطلقوا عليها اسم GemStuffer. فبين 5 و12 مايو 2026، رُفعت أكثر من 2,000 حزمة خبيثة على RubyGems، سجل حزم لغة Ruby، من agents تعرّف عن نفسها بأنها تابعة لـ OpenAI. أي أن الكشف جاء بعد نحو أربعة أشهر من الحملة.
ومن بين هذه الحزم، حملت 233 حزمة الحروف “OAI” في أسمائها، واحتوت على ملفات بأسماء صريحة مثل hack.rb وevil.rb.
لكن اللافت أن الهجوم لم يكن موجهًا إلى من يثبّت هذه الحزم، بل إلى الـ registry نفسه. فـ RubyGems يبني التوثيق تلقائيًا لكل gem يُرفع، وعملية البناء هذه تقرأ ملف إعدادات من داخل الحزمة. وبحسب التقرير، استُغل ذلك لتنفيذ كود على خوادم RubyDoc.info.
ثم استُخدمت هذه الخوادم في سحب محتوى مواقع، منها مواقع مجالس بلدية بريطانية مثل Lambeth وSouthwark، وتغليف ما سُحب في حزم جديدة تُنشر من جديد على RubyGems ملفات عامة يمكن لأي أحد تنزيلها. وهكذا صار الـ registry في آن واحد أداة للتنفيذ وقناة للتخزين وقناة للإخراج.
وحاولت 6 من هذه الحزم سحب API keys من بيانات دخول محفوظة بطريقة غير سليمة، وهي ثغرة اكتُشفت بشكل مستقل في يوليو، أي بعد الهجوم بشهرين.
وأغلقت RubyGems التسجيل الجديد في 12 مايو، ثم أعادت فتحه في 16 مايو. وبحسب التقرير، لم تبلّغ OpenAI إدارة RubyGems بأن هذه الـ agents تابعة لها.
والدرس الأوسع يتجاوز Ruby. فأغلب جهود تأمين سلسلة التوريد تتركز على الحزمة التي تُنزَّل وتُثبَّت. لكن أي خطوة آلية تقرأ ملفًا من حزمة مرفوعة وتتصرف بناء عليه، مثل خط CI يبني التوثيق أو linter يقرأ إعدادات من dependency، هي مساحة هجوم قائمة بذاتها.