وثائق

الاعتماديات الضعيفة

يقوم مكون الأمان بجرد حزم كل مشروع، ومقارنتها مع الإرشادات المنشورة، وتحديد قائمة الملفات المقفلة التي يتم قراءتها بالكامل، بالإضافة إلى وصف ما تقوم به عملية فحص الأمان في Coroid على pull request.

يحتفظ مكون الأمان بجرد لكل حزمة يتم تثبيتها في كل مشروع، ويقارنها مع الإرشادات المنشورة، بحيث يتم اكتشاف أي إصدار ضعيف عندما يصل إلى pull request، ومرة أخرى عندما تذكر إرشادة جديدة إصدارًا تقوم بتشغيله بالفعل.

الجرد

في كل مرة يتم فيها تحديث الفرع الافتراضي، وعلى الأقل مرة يوميًا، يقرأ مكون Coroid ملفات القفل الخاصة بالمشروع باستخدام OSV-Scanner، المثبت على إصدار محدد ومُتحقق من صحته عبر تجزئة المنشورات. لا يحصل الماسح على ملفات التبعية فقط، بالإضافة إلى تكوين Coroid الذي يتم إنشاؤه، دون أي وصول إلى الشبكة أو بيانات اعتماد. ولا يؤثر أي osv-scanner.toml على العملية.

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

ما يقرأه مكون Coroid بالكامل

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

ملفنظام بيئيإصدارات دقيقةتبعيات متسلسلة كاملةتغطية
package-lock.jsonnpmنعمنعمكامل
npm-shrinkwrap.jsonnpmنعمنعمكامل
pnpm-lock.yamlnpmنعمنعمكامل
yarn.locknpmنعمنعمكامل
requirements.txtPyPIنعملاجزئي
go.modGoنعملاجزئي

تم إنشاء هذه الجدول من اختبارات Coroid نفسه عبر الماسح، لذا لا يتغير إلا عند تحديث الاختبارات.

  • مساحات عمل npm، وpnpm، وYarn: يتم تغطية مساحة العمل package.json التي لا تحتوي على ملف قفل خاص بها بواسطة ملف القفل الرئيسي. أما package.json التي لم تعد تتطابق مع ملف القفل الخاص بها فهي تُعتبر جزئية حتى يتم إعادة إنشاء ملف القفل.
  • ملفات قفل npm يجب أن تكون الإصدارات 2 أو 3. أما مدخلات pnpm وYarn القادمة من Git أو ملف محلي أو تصحيح فهي تُعتبر جزئية.
  • requirements.txt تغطي فقط الإصدارات المحددة باستخدام ==.
  • ملفات الاعتماديات الأخرى (package.json بدون ملف قفل، pyproject.toml، poetry.lock، Pipfile، Cargo.lock، Gemfile.lock، pom.xml، Gradle، Composer، NuGet وغيرها) يتم اكتشافها وعرضها كجزئية، مع ذكر اسم الملف، لضمان عدم اعتبار المشروع مغطى عندما لا يكون كذلك.

الإرشادات

يقرأ مكون Coroid الإرشادات من OSV، الذي يحتوي أيضًا على إرشادات GitHub، لكل نظام بيئي تستخدمه مشاريعكم. يقرأ كل ساعة ما هو جديد أو تم تغييره منذ آخر قراءة، ومرة يوميًا يقرأ كل البيانات. تتم المقارنة باستخدام الجرد المحفوظ، لذا لا يحتاج إلى الوصول إلى مستودعكم.

هدف مكون Coroid هو مطابقة 95% من الإرشادات الجديدة مع كل جرد خلال 60 دقيقة من ظهورها في بيانات الإرشادات التي يقرأها، ويقيس الوقت المستغرق لكل مطابقة. لا يمكنه ضمان وقت محدد منذ الإفصاح الأصلي عن الثغرة: ذلك يعتمد على توقيت نشر الإرشادة.

إذا تأخرت بيانات الإرشادات أكثر من 90 دقيقة، أو فشلت آخر قراءة لها، تعرض صفحتا نظرة عامة والاعتماديات رسالة "تأخر تغذية الإرشادات منذ…"، ولا تُعتبر نسبة تغطية أي مشروع كاملة طوال هذه الفترة.

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

على طلبات السحب

يقوم فحص Coroid Security بفحص ملفات القفل التي يغيرها مكون pull request، في قاعدتها وفي رأسها، ويحسب فقط الإصدارات الضعيفة التي يُدخلها التغيير:

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

يتم تشغيل نفس الفحص على طلبات سحب الإصلاحات والميزات الخاصة بـ Coroid قبل فتحها. لمعرفة كيفية عمل هذا الفحص، وكيفية اشتراطه وإعادة تشغيله، يُرجى الاطلاع على صلاحيات GitHub وفحص أمان Coroid.

إشعارات

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