Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
jenkinsci__workflow-cps-plugin_CVE-2022-25173_2646-v6ed3b5b01ff1 — استغلال لـ CVE-2022-25173 يستهدف تجاوز صندوق رمل مترجم CPS في Jenkins Pipeline Groovy Plugin، مما يتيح تنفيذ برمجيات عشوائية داخل وحدة تحكم Jenkins عبر سكربتات Pipeline مصممة. | Kitploit
أدوات/GitHubGitHub/shoucheng3/jenkinsci__workflow-cps-plugin_cve-2022-25173_2646-v6ed3b5b01ff1
التحليل الثابتالتحليل الديناميكي (عزل)تحليل الثغرات الأمنيةتحليل الكودالاستغلالDevSecOps
GitHubshoucheng3/jenkinsci__workflow-cps-plugin_cve-2022-25173_2646-v6ed3b5b01ff1

jenkinsci__workflow-cps-plugin_CVE-2022-25173_2646-v6ed3b5b01ff1

استغلال لـ CVE-2022-25173 يستهدف تجاوز صندوق رمل مترجم CPS في Jenkins Pipeline Groovy Plugin، مما يتيح تنفيذ برمجيات عشوائية داخل وحدة تحكم Jenkins عبر سكربتات Pipeline مصممة.

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
عرض المستودع
7منذ 10 أشهرلم تتم المراجعة بعد
مشاركة

Pipeline: إضافة جروفي

Jenkins Plugin Changelog Jenkins Plugin Installs

مقدمة

مكوّن رئيسي في مجموعة إضافات Pipeline، يوفّر محرك التنفيذ القياسي لخطوات Pipeline، استنادًا إلى مفسّر Groovy مخصّص يعمل داخل عملية تحكّم Jenkins.

(من حيث المبدأ، يمكن دعم محركات تنفيذ أخرى، مع كون FlowDefinition نقطة دخول API، لكن لم يُنشأ نموذج أولي لأي منها، ومن المرجّح أن كتابة أحدها سيتطلب جهدًا كبيرًا جدًا.)

كود سكربت Pipeline بلغة Groovy مثل:

root@kitploit:~
retry(3) {
for (int i = 0; i < 10; i++) {
  branches["branch${i}"] = {
    node {
      retry(3) {
        checkout scm
      }
      sh 'make world'
    }
  }
}
parallel branches

يُشغَّل كبرنامج Groovy، حيث تُنفِّذ استدعاءات دوال خاصة معيّنة تُسمى خطوات عمليات خاصة بـ Jenkins. في هذا المثال، يتم تعريف الخطوة parallel في هذه الإضافة، بينما يتم تعريف node وretry وcheckout وsh في إضافات أخرى ضمن مجموعة Pipeline. المتغير العام scm معرَّف في إضافة Pipeline Multibranch.

يُترجَم سكربت Groovy إلى صنف باسم WorkflowScript، ولذلك هذا هو الاسم الذي يظهر في تتبّعات الاستدعاء (stack traces) بدلاً من اسم ملف السكربت (مثل Jenkinsfile).

على عكس برنامج Groovy العادي الذي يُشغَّل من سطر الأوامر، يتم حفظ الحالة الكاملة لبرنامج بناء Pipeline على القرص في كل مرة يتم فيها تنفيذ عملية غير متزامنة، وهو ما يشمل معظم خطوات Pipeline. يمكن إعادة تشغيل Jenkins بينما يكون البناء قيد التشغيل، وسيستأنف تشغيل البرنامج من حيث توقف. ليس الغرض من ذلك أن يكون فعّالًا، ولذلك يجب قصره على الكود «اللاصق» رفيع المستوى المرتبط مباشرة بميزات Jenkins؛ أما منطق البناء الخاص بمشروعك فيجب تشغيله من برامج خارجية على عقدة بناء، ضمن خطوة sh أو bat.

القيود المعروفة

تغطي ملحمة Pipeline Groovy في JIRA بعض القيود المعروفة في مفسّر Groovy. تنبع هذه المشكلات من حقيقة أن Pipeline لا يمكنه تشغيل Groovy مباشرة، بل يجب أن يعترض كل عملية لحفظ حالة البرنامج.

تغطي ملحمة Pipeline Sandbox المشكلات المتعلقة بـ صندوق Groovy الرملي المستخدم لمنع سكربتات Pipeline الخبيثة من السيطرة على Jenkins. يمكن للسكربتات التي تُشغَّل مع تعطيل الصندوق الرملي إجراء استدعاءات مباشرة لواجهات Jenkins الداخلية، وهو ما قد يكون حلًّا بديلًا مفيدًا عند نقص وظائف الخطوات، لكن لأسباب أمنية، يمكن للمسؤولين فقط الموافقة على مثل هذه السكربتات.

تغطي ملحمة Pipeline Snippet Generator المشكلات المتعلقة بالأداة المستخدمة لتقديم نماذج من صيغة الخطوات بناءً على نماذج إعداد مباشرة.

التاريخ

كانت هذه الإضافة تُعرف سابقًا باسم «Workflow CPS plugin» أو «Workflow Groovy Plugin». وبناءً عليه، فإن artifactId الخاص بـ Maven هو workflow-cps وليس pipeline-groovy.

التصميم التقني

تستخدم الإضافة مكتبة Groovy CPS لتنفيذ تحويل بنمط تمرير الاستمرارية على البرنامج أثناء ترجمته. يُستخدم مترجم Groovy القياسي لإنشاء AST، لكن يتم اعتراض توليد البايت كود بواسطة CompilationCustomizer يستبدل معظم العمليات بنسخ ترمي «خطأ» خاصًا، CpsCallableInvocation. يتم بعد ذلك التقاط هذا الخطأ بواسطة المحرك، الذي يستخدم المعلومات المستمدة منه (مثل الوسائط التي أوشكت على تمريرها لاستدعاء دالة) لتمرير التحكم إلى الاستمرارية التالية.

يمكن لسكربتات Pipeline تمييز دوال محددة بالتعليق التوضيحي @NonCPS. تُترجَم هذه الدوال بعد ذلك بشكل طبيعي (باستثناء فحوصات أمان الصندوق الرملي)، وبالتالي تتصرف إلى حد كبير مثل الدوال «الثنائية» من منصة Java أو بيئة تشغيل Groovy أو نواة Jenkins أو كود الإضافات. يمكن لدوال @NonCPS استخدام كائنات غير Serializable بأمان كمتغيرات محلية، وإن كان لا ينبغي لها قبول معاملات غير قابلة للتسلسل أو إرجاع أو تخزين قيم غير قابلة للتسلسل. لا يجوز استدعاء دوال عادية (محوَّلة بـ CPS) أو خطوات Pipeline من دالة @NonCPS، لذا فمن الأفضل استخدامها لإجراء بعض الحسابات قبل تمرير ملخص إلى السكربت الرئيسي. لاحظ بشكل خاص أن @Override للدوال المعرَّفة في أصناف ثنائية، مثل Object.toString()، يجب عمومًا تمييزها بـ @NonCPS، لأن الكود الثنائي هو الذي يستدعيها عادةً.

بعض أنواع الكائنات ليست آمنة بطبيعتها للتسلسل كما هي، ومع ذلك نريد الاحتفاظ بمرجع لها في مخطط البرنامج. مثال على ذلك Executor (~ فتحة منفِّذ على عقدة مدمجة أو وكيل) وهو جزء من السياق الذي تمرره خطوة node إلى أي خطوة ضمن كتلتها، خاصة sh/bat. تستخدم Pipeline واجهة Pickle لاستبدال هذه الكائنات بنسخ آمنة للتسلسل. عند تحميل WorkflowRun من القرص بعد إعادة تشغيل، يتم إلغاء تسلسل حالة البرنامج، كما يتم إلغاء تسلسل كائنات الـ pickle («إعادة ترطيب») بالتوازي. إذا تم إلغاء تسلسل جميع كائنات الـ pickle بنجاح وإعادة وضع الكائنات الناتجة في حالة البرنامج، يبدأ البرنامج في التشغيل مجددًا، ويتم استدعاء StepExecution.onResume لاستعادة المؤقِّتات وما شابه ذلك.

يتم تشغيل كل منطق البرنامج داخل «مؤشر ترابط CPS VM»، وهو مجرد تجمّع مؤشرات ترابط Java يمكنه تشغيل الدوال الثنائية وتحديد الاستمرارية التي يجب تنفيذها بعد ذلك. تستخدم خطوة parallel «المؤشرات الخضراء» (المعروفة أيضًا بتعدد المهام التعاوني): فهي تسجّل أسماء المؤشرات المنطقية (~ الفروع) لإجراءات مختلفة، لكنها لا تشغّلها حرفيًا في الوقت نفسه. قد يبدو البرنامج وكأنه ينفّذ المهام بشكل متزامن، لكن فقط لأن معظم الخطوات تعمل بشكل غير متزامن بينما يكون مؤشر ترابط VM خاملًا، وقد تتداخل في الوقت. لا يتم استهلاك أي مؤشر ترابط Java إلا خلال الفترات القصيرة عادةً التي يُشغَّل فيها كود Groovy فعليًا على مؤشر ترابط VM. تعرض أداة المنفِّذ إدخالًا للمنفِّذ «خفيف الوزن» (flyweight) على العقدة المدمجة فقط عندما يكون مؤشر ترابط VM مشغولًا؛ وعادةً يكون مخفيًا.

تنزيل الأداة