حزم Ruby Gems و Go Modules خبيثة كتستهدف بيانات اعتماد المطورين وخطوط CI
Poisoned Ruby Gems and Go Modules Exploit CI Pipelines for Credential Theft
حزم Ruby Gems و Go Modules خبيثة كتستهدف بيانات اعتماد المطورين وخطوط CI
ملخص: واحد الحملة ديال هجوم سلسلة التزويد (supply chain) تنسبات لحساب GitHub سميتو "BufferZoneCorp" نشرات حزم Ruby gems و Go modules مسمومة، مصاوبة باش تسرق بيانات اعتماد، وتتلاعب بـ workflows ديال GitHub Actions، وتزرع SSH باش تبقى لاصقة فمواكن المطورين و CI runners. هاد الحزم كيتخباو على أساس أنهم مكتبات عادية، ومن بعد الاكتشاف ديالهم تم الحذف ديالهم من RubyGems والحظر ديالهم من Go module registries. المؤسسات اللي كتستعمل هاد الحزم خاصها تحيدهم فالبلاصة، تبدل بيانات الاعتماد، وتراجع الأنظمة ديالها واش كاين شي ولوج ما مرخصش به.
أشنو واقع
هجوم منظم على سلسلة التزويد (supply chain) وزع حزم Ruby gems و Go modules خبيثة تحت حساب GitHub بالسمية ديال "BufferZoneCorp". هاد الحملة كتخدم بجوج مراحل: حزم نائمة (sleeper packages) كاتبقى ساكتة حتى كيتم التفعيل ديالها، وعاد كتطلق حمولة (payload) مصاوبة باش تخترق بيئات التطوير والبنية التحتية ديال CI.
بالنسبة لـ Ruby gems، كيهدفو لجمع بيانات اعتماد وقت التثبيت (install time). فاش كيتسطالاو، كيجمعو environment variables، و سوارت SSH، و أسرار AWS، وملفات بحال .npmrc، و .netrc، وإعدادات GitHub CLI، و بيانات اعتماد ديال RubyGems. هاد المعلومات المسروقة كتصيفت لواحد endpoint ديال Webhook.site كيتحكم فيه مهاجم.
الـ Go modules كتستعمل طريقة مطورة كتر. كيقشعو واش راهم خدامين فبيئة GitHub Actions عبر تقليب على المتغيرات GITHUB_ENV و GITHUB_PATH. غير كيعيقو بيهم، كيكتبو ملف Go تنفيذي مزور فواحد cache directory وكيتلاعبو بـ PATH ديال workflow باش هاد wrapper يتنفذ قبل الـ binary الأصلي ديال Go. هاد الـ wrapper كيقدر يعترض أوامر Go فاش كيدوز التحكم للـ binary الحقيقي باش ما يخسرش الـ build. هاد الـ Go modules كيكتبو حتى واحد SSH public key محطوط بشكل hard-coded فملف ~/.ssh/authorized_keys، وهادشي كيعطي للمهاجم إمكانية يرجع ويدخل للنظام المخترق عن بعد ويبقى لاصق فيه.
هاد الحزم تصاوبو باش يتفاداو يتفضحو عبر تقليد سميات ديال مكتبات معروفة: knot-activesupport-logger، و knot-devise-jwt-helper، و knot-rack-session-store، و knot-rails-assets-pipeline، و knot-rspec-formatter-json، و knot-simple-formatter بالنسبة لـ Ruby؛ وكاين go-metrics-sdk، و go-weather-sdk، و go-retryablehttp، و go-stdlib-ext، و grpc-client، و net-helper، و config-loader، و log-core، و go-envconfig بالنسبة لـ Go.
حتى لوقت نشر هاد التقرير، RubyGems حيدات הـ gems المتضررة، و Go module registry بلوكا هاد الحزم الخبيثة.
علاش هادشي مهم
هاد الهجوم كيستهدف جوج نقط حساسة فدورة حياة تطوير البرمجيات. المطورين ديال Ruby كيواجهو سرقة فورية لبيانات اعتماد خلال تثبيت الـ dependencies. والمطورين ديال Go فبيئات CI كيواجهو خطر اختراق خطوط الـ build ديالهم، اللي يقدر يترد سلاح باش يحقنو كود خبيث فالمشاريع (downstream projects) ولا يسرقو الأسرار المخبية فـ GitHub Actions workflows.
الاستعمال ديال الحزم النائمة يطول الوقت ديال الهجوم. فاعل التهديد يقدر يخلي حزمة مسمومة فالـ registries لمدة ما معروفاش قبل ما يفعل حمولة (payload) الخبيثة، وهادشي كيزيد الفرصة باش الحزمة تكون ديجا تدمجات فـ production dependencies قبل ما يعيق بيها شي حد.
التقنية ديال زرع باب خلفي (backdoor) بـ SSH مقلقة بزاف للمؤسسات اللي كيسيرو البنية التحتية ديال CI. غير كيتزاد public key محطوط بشكل hard-coded فـ authorized_keys، المهاجم كيبقا عندو أكسي وماكيتأثرش بتبديل بيانات الاعتماد ولا التغييرات فالـ workflow.
بالنسبة لمحللي SOC والمدافعين فمنطقة MENA اللي مكلفين بمشاريع Go و Ruby، هاد الهجوم كيبين لينا بلي خاصنا رؤية واضحة على سلسلة التزويد عبر الـ package registries مع مراقبة دقيقة لإعدادات CI runner.
الأنظمة المتضررة و CVEs
Ruby gems:
- knot-activesupport-logger
- knot-devise-jwt-helper
- knot-rack-session-store
- knot-rails-assets-pipeline
- knot-rspec-formatter-json
- knot-date-utils-rb (sleeper gem)
- knot-simple-formatter (sleeper gem)
Go modules:
- github.com/BufferZoneCorp/go-metrics-sdk
- github.com/BufferZoneCorp/go-weather-sdk
- github.com/BufferZoneCorp/go-retryablehttp
- github.com/BufferZoneCorp/go-stdlib-ext
- github.com/BufferZoneCorp/grpc-client
- github.com/BufferZoneCorp/net-helper
- github.com/BufferZoneCorp/config-loader
- github.com/BufferZoneCorp/log-core (sleeper module)
- github.com/BufferZoneCorp/go-envconfig (sleeper module)
CVEs: ما تعطى حتى CVE فوقت النشر.
أشنو خاصنا نديرو
- حيدو ݣاع الحزم المتضررة من مواكن التطوير، و CI runners، وبيئات الإنتاج فالبلاصة.
- راجعو
~/.ssh/authorized_keysفݣاع الأنظمة اللي تقدر تكون هاد الحزم تسطالات فيها؛ ومسحو أي SSH public keys ما معروفينش. - شوفو السجلات (logs) ديال النظام والتطبيقات واش كاين شي ولوج للملفات بلا إذن ولا تعديلات فملفات الإعدادات الحساسة.
- بدلو ݣاع بيانات الاعتماد اللي كانت معرضة للخطر، من بينها سوارت AWS، و GitHub tokens، وبيانات اعتماد ديال RubyGems، وأي أسرار خرى تقدر تكون تسرقات.
- قلبو فـ network logs وسجلات الجدار الناري واش كاين شي ترافيك HTTPS خارج لـ Webhook.site ولا أي endpoints خرين ديال التهريب.
- راجعو سجلات GitHub Actions workflow واش كاين شي Go executable wrappers مشبوهة أو تغييرات غير متوقعة فـ
PATH. - قلبو فـ git history والـ commits الجداد فالـ repositories المتضررة، للعثور على أي علامات ديال التلاعب فالـ pipeline.
أسئلة باقا مطروحة
- فوقاش تلاحو هاد الحزم لأول مرة، وشحال ديال الوقت بقاو متاحين قبل ما يتم الاكتشاف ديالهم؟
- شحال ديال المطورين والمؤسسات اللي سطالاو هاد الحزم؟
- واش باقا شي نسخ من هاد الحزم فـ alternative package registries ولا mirrors؟
- شنو هي الأرقام المحددة ديال الإصدارات ديال هاد الحزم الخبيثة؟
- واش الـ sleeper gems و modules تخدمو فشي حوادث معروفة قبل ما يتحيدو؟
- شكون هو فاعل التهديد اللي مور حساب BufferZoneCorp، وشنو الدافع ديالو؟
المصدر
Poisoned Ruby Gems and Go Modules Exploit CI Pipelines for Credential Theft


