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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
study-struts2-s2-054_055-jackson-cve-2017-7525_cve-2017-15095 — تقرير التحقيق عن ثغرات Struts2 S2-045, S2-055 وثغرات Jackson CVE-2017-7525, CVE-2017-15095 | Kitploit
أدوات/GitHubGitHub/secureskytechnology/study-struts2-s2-054_055-jackson-cve-2017-7525_cve-2017-15095
تحليل الثغرات الأمنيةتحليل الكوداستغلال تطبيقات الويبالأوراق والأبحاثالتعلم والتعليمArchived
GitHubsecureskytechnology/study-struts2-s2-054_055-jackson-cve-2017-7525_cve-2017-15095

study-struts2-s2-054_055-jackson-cve-2017-7525_cve-2017-15095

تقرير التحقيق عن ثغرات Struts2 S2-045, S2-055 وثغرات Jackson CVE-2017-7525, CVE-2017-15095

عرض المستودع
1062114منذ 8 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

تقرير التحقيق حول ثغرات Struts2 S2-054, S2-055 وثغرات Jackson CVE-2017-7525, CVE-2017-15095

تم نشر مقال ملخص يلخص النقاط الرئيسية ويجعله سهل القراءة. يُوصى به لمن يرغب في معرفة نظرة عامة أولاً أو لمن ليس لديه وقت كافٍ.

  • SSTtechlog 08 حول S2-054, S2-055 وثغرات jackson-databind CVE-2017-7525, CVE-2017-15095 | SST شركة SecureSky Technology
    • https://www.securesky-tech.com/column/techlog/08.html

في 1 ديسمبر 2017، تم إصدار تحديث أمني لـ Struts2. قبل الإصدار، كانت هناك مناقشات في القائمة البريدية تفيد بأن ثغرات Jackson (مكتبة JSON الشائعة في Java) مرتبطة بها، وكان الكاتب، الذي يستخدم Jackson في الأنظمة والأدوات الداخلية للشركة، مهتمًا بمعرفة التفاصيل الدقيقة.

  • https://lists.apache.org/thread.html/ed74083f2d7187e71ee5ed644c5e45ba58d0792b515d1d1cc28bfadf@%3Cdev.struts.apache.org%3E

في الواقع، تم إصلاح مشكلتين أمنيتين في المحتوى المنشور. الثغرة في jackson-databind، وهي مكون من Jackson، تؤثر فقط على S2-055.

  • S2-055 : https://cwiki.apache.org/confluence/display/WW/S2-055
    • هذا هو الإصلاح المقابل لـ CVE-2017-7525 في jackson-databind.
    • تم ترقية jackson-databind إلى الإصدار 2.9.2 في تبعيات Struts. وهذا يعالج أيضًا CVE-2017-15095 المذكورة لاحقًا.
    • https://cwiki.apache.org/confluence/display/WW/Version+Notes+2.5.14.1
  • S2-054 : https://cwiki.apache.org/confluence/display/WW/S2-054
    • يتعلق هذا باستخدام REST plugin لمكتبة JSON قديمة تسمى JSON-lib (http://json-lib.sourceforge.net/)، والتي تم الإبلاغ عن مشكلة DoS فيها، لذلك تم التغيير إلى Jackson.

في REST plugin، يبدو أنه تم تضمين معالجات تستخدم JSON-lib ومعالجات تستخدم Jackson منذ البداية، ويمكن للمستخدم الاختيار بينهما. في S2-054، تم تبديل المعالج الافتراضي إلى Jackson، ثم في S2-055 تم تحديث إصدار Jackson القديم إلى الأحدث، وهذا هو جوهر التصحيح الحالي.

إذن، ما هي ثغرة CVE-2017-7525 بالضبط؟ بما أن الكاتب يستخدم Jackson غالبًا عند معالجة JSON في Java، فقد قضى عطلة نهاية الأسبوع في 2 و 3 ديسمبر للتحقيق في هذه المسألة، وهذا هو محتوى هذه المقالة.


بيئة الكاتب المستخدمة للتحقق من نموذج الكود:

  • نظام التشغيل : Windows 10 Pro 64bit
  • Java : Oracle JDK 1.8.0_92 64bit
  • Groovy : 2.3.1

حول ثغرة jackson-databind CVE-2017-7525

تم نشر شرح لـ CVE-2017-7525 في مدونة Adam Caudill.

  • https://adamcaudill.com/2017/10/04/exploiting-jackson-rce-cve-2017-7525/

باختصار بكلمات الكاتب نفسه، يوفر jackson-databind وظيفة لتعيين JSON إلى كائنات Java (فئة ObjectMapper). عن طريق استدعاء ObjectMapper.enableDefaultTyping()، يصبح من الممكن التعيين باستخدام اسم فئة مضمن بشكل مخصص في JSON. ربما شعر بعض القراء بإحساس سيء بمجرد "إمكانية تحديد اسم الفئة من إدخال JSON"، وهذا الإحساس السيئ تحقق تمامًا في CVE-2017-7525.

قبل الدخول في شرح الثغرة، دعنا نشرح لماذا تم تنفيذ هذه الوظيفة في المقام الأول.

حول وظيفة ObjectMapper.enableDefaultTyping()

يرجى مراجعة نموذج الكود التالي للاستخدام الأساسي لإلغاء التسلسل (deserialize) بواسطة jackson-databind. (في هذه المقالة، نستخدم Groovy في نموذج كود Jackson. من المريح أنه يمكن تبديل إصدار jackson-databind بسهولة باستخدام @Grab.)

  • objectmapper-demo.groovy

في نموذج الكود أعلاه، يمكن ببساطة تعيين مفتاح "animal" إلى فئة Animal. وماذا عن الحالة التالية؟```java class Zoo { Animal animal; }

abstract class Animal { String name; protected Animal() { } }

class Dog extends Animal { double barkVolume; Dog() { } }

class Cat extends Animal { boolean likesCream; int lives; Cat() { } }

في هذا التكوين، يظهر نوعان: عندما يشير مفتاح "animal" إلى فئة Dog، وعندما يشير إلى فئة Cat. وبالتالي، نحتاج إلى معلومات إضافية لتحديد أي من الفئتين سيتم استخدامها للتعيين.

لحل هذه المشكلة، أضافت jackson-databind معالجة خاصة تسمح بدمج اسم الفئة المستخدمة في التعيين داخل JSON.
على سبيل المثال، كما هو موضح أدناه، يتم تحويل محتوى مفتاح "animal" إلى مصفوفة، ويتم تحديد اسم الفئة في العنصر الأول.```
{"animal":["Dog",{"name":"dog1","barkVolume":1.2}]}

وبالتالي فإن ObjectMapper.readValue() يتعرف على أن محتوى المفتاح "animal" هو من فئة Dog ويقوم بالتخطيط. بالطبع، لا يمكن التمييز مباشرةً ما إذا كان محتوى المفتاح "animal" كان في الأصل مصفوفة أم كان يحتوي على معلومات اسم الفئة الخاصة بـ jackson-databind. الطريقة التي تسمح بالتبديل بين هذين النمطين هي ObjectMapper.enableDefaultTyping(). هناك أيضًا طريقة لتعريف التعليق التوضيحي @JsonTypeInfo في الفئة. لمزيد من التفاصيل، راجع وثائق Jackson التالية.

  • JacksonPolymorphicDeserialization
    • https://github.com/FasterXML/jackson-docs/wiki/JacksonPolymorphicDeserialization

فيما يلي نموذج لاستخدام طريقة ObjectMapper.enableDefaultTyping() فعليًا.

  • enable-default-type-demo.groovy

معالجة CVE-2017-7525 من خلال فحص القائمة السوداء لأسماء الفئات

كما رأينا أعلاه، من خلال إعطاء اسم الفئة ثم خصائصها بتنسيق JSON، يمكن إنشاء أي فئة بأي خصائص، على الرغم من وجود بعض القيود. واستغلال هذه الثغرة هو ثغرة CVE-2017-7525، ويُعتقد أن الدافع وراء ذلك هو التقرير التالي.

  • Java Unmarshaller Security - Turning your data into code execution
    • https://github.com/mbechler/marshalsec

بالنسبة لمكتبات التسلسل وإلغاء التسلسل شائعة الاستخدام في Java مثل Jackson، تم الإبلاغ عن خطر يؤدي إلى تنفيذ رمز عشوائي عن طريق التلاعب بأسماء الفئات، وتم إدراج أسماء الفئات المحددة التي تشكل خطرًا. لا أعرف ما إذا كان ذلك ردًا على ذلك، لكن من حيث التاريخ، بعد أول commit للمستودع المذكور أعلاه مباشرة، تم إنشاء Issue التالي في jackson-databind وبدأ العمل على معالجته.

  • Jackson Deserializer security vulnerability
    • https://github.com/FasterXML/jackson-databind/issues/1599

كيف يبدو بالفعل بيانات JSON ورمز Java الذي يستغل هذه الثغرة؟ هناك تلميح في كود الاختبار الخاص بـ jackson-databind 2.8.9 الذي تم معالجته في هذه المشكلة:

  • https://github.com/FasterXML/jackson-databind/blob/jackson-databind-2.8.9/src/test/java/com/fasterxml/jackson/databind/interop/IllegalTypesCheckTest.java

فيما يلي نموذج كود تم تعديله بناءً على كود الاختبار هذا للتحقق من العمل.

  • cve-2017-7525-check.groovy
تنزيل الأداة