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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-42779 — إثبات مفهوم يوضح تجاوز مرشح إلغاء التسلسل في Apache MINA مما يؤدي إلى تنفيذ التعليمات البرمجية عن بُعد، مع تحليل تفصيلي للسبب الجذري، ونماذج استغلال PoCs، وإرشادات المعالجة. | Kitploit
أدوات/GitHubGitHub/dinosn/cve-2026-42779
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبالأوراق والأبحاثالتعلم والتعليم
GitHubdinosn/cve-2026-42779

CVE-2026-42779

إثبات مفهوم يوضح تجاوز مرشح إلغاء التسلسل في Apache MINA مما يؤدي إلى تنفيذ التعليمات البرمجية عن بُعد، مع تحليل تفصيلي للسبب الجذري، ونماذج استغلال PoCs، وإرشادات المعالجة.

عرض المستودع
1122منذ 4 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2026-42779 — تجاوز مرشح إزالة التسلسل في Apache MINA يؤدي إلى تنفيذ التعليمات البرمجية عن بُعد

CVSS 3.1: 9.8 حرج AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H CWE: CWE-502 إزالة تسلسل البيانات غير الموثوقة المُبلّغ: Venkatraman Kumar، Securin النشرة: القائمة البريدية لـ Apache

نظرة عامة

تحتوي إصدارات Apache MINA 2.1.0 حتى 2.1.11 و2.2.0 حتى 2.2.6 على تجاوز لمرشح إزالة التسلسل في AbstractIoBuffer.resolveClass(). يتم تخطي قائمة السماح acceptMatchers — المخصصة لتقييد فئات Java التي يمكن إزالة تسلسلها — تمامًا عندما يُرجع ObjectStreamClass.forClass() قيمة null.

يمكن للمهاجم الذي لديه وصول شبكي إلى نقطة نهاية MINA تستخدم ObjectSerializationCodecFactory صياغة حمولة بروتوكول تتجاوز مرشح الفئات، مما يتيح عبر سلاسل أدوات إزالة التسلسل القياسية في Java (مثل Commons Collections).

تنفيذ التعليمات البرمجية عن بُعد بالكامل

هذا إصلاح غير مكتمل لـ CVE-2026-41635. تم تطبيق التصحيح الأصلي على فرع 2.0.x ولكن لم يتم نقله إلى 2.1.x أو 2.2.x بسبب خطأ في الدمج.

الإصدارات المتأثرة

الفرعالإصدارات المعرضةالإصدار المُصلَح
2.1.x2.1.0 – 2.1.112.1.12
2.2.x2.2.0 – 2.2.62.2.7

السبب الجذري

الثغرة موجودة في AbstractIoBuffer.resolveClass()، التي تتعامل مع حل الفئات أثناء إزالة تسلسل كائنات Java.

تستخدم MINA بروتوكول تسلسل مخصصًا بنوعين من واصفات الفئات:

  • النوع 0 — الفئات غير القابلة للتسلسل، والأنواع البدائية، والمصفوفات (تنسيق واصف فئات Java القياسي)
  • النوع 1 — الفئات القابلة للتسلسل (تنسيق اسم فئة مضغوط)

في الكود المعرض للخطر، يتم فحص مرشح acceptMatchers فقط في فرع النوع 1 (عندما يُرجع forClass() قيمة غير null). يستدعي فرع النوع 0 Class.forName() مباشرة، متجاوزًا المرشح تمامًا:

root@kitploit:~
// AbstractIoBuffer.java — عرضة للخطر (2.2.6)
protected Class<?> resolveClass(ObjectStreamClass desc) {
    Class<?> clazz = desc.forClass();

    if (clazz == null) {
        // خطأ: لا يوجد فحص acceptMatchers — تم تجاوز المرشح تمامًا
        return Class.forName(name, false, classLoader);
    } else {
        // يتم تطبيق المرشح هنا فقط
        for (ClassNameMatcher matcher : acceptMatchers) { ... }
    }
}

ينقل الإصلاح في 2.2.7 فحص المرشح قبل الفرع:

root@kitploit:~
// AbstractIoBuffer.java — مُصلَح (2.2.7)
protected Class<?> resolveClass(ObjectStreamClass desc) {
    String className = desc.getName();

    // يتم تطبيق المرشح أولاً، بغض النظر عن نتيجة forClass()
    if (!acceptMatchers.stream().anyMatch(m -> m.matches(className))) {
        throw new ClassNotFoundException("Class not in accept list " + className);
    }

    Class<?> clazz = desc.forClass();
    // ... يتبع الحل الآمن
}

الاستغلال

تدفق الهجوم

root@kitploit:~
المهاجم                                    خادم MINA المعرض للخطر
   |                                              |
   |  1. صياغة حمولة MINA بواصفات النوع 0          |
   |     لفئات سلسلة الأدوات                       |
   |                                              |
   |  2. الإرسال إلى نقطة نهاية تستخدم             |
   |     ObjectSerializationCodecFactory -------->|
   |                                              |
   |          3. يقرأ readClassDescriptor() النوع 0|
   |             → يفوض إلى super (Java القياسي)   |
   |                                              |
   |          4. يرى resolveClass() أن forClass()==null
   |             → Class.forName() بدون مرشح       |
   |                                              |
   |          5. يتم إزالة تسلسل سلسلة الأدوات بالكامل
   |             → يطلق readObject() السلسلة       |
   |             → يعمل Runtime.exec()             |
   |                                              |
   |                               تم تحقيق RCE   |

الشروط المسبقة

  1. يستخدم التطبيق الهدف IoBuffer.getObject() أو ObjectSerializationCodecFactory
  2. يحتوي الهدف على accept() مُهيأ (التطبيقات بدون مرشح كانت قابلة للاستغلال بالفعل عبر CVE-2026-41635)
  3. توجد مكتبة سلسلة أدوات (Commons Collections، Spring، إلخ) في مسار الفئات

الرؤية الأساسية

يتحكم المهاجم في تدفق البايتات المتسلسل. باستخدام واصفات فئات من النوع 0 (بدلاً من النوع 1) لفئات سلسلة الأدوات القابلة للتسلسل، تتجاوز كل فئة في مخطط إزالة التسلسل مرشح acceptMatchers، بغض النظر عن تكوين قائمة السماح في التطبيق.

إثبات المفهوم

ثلاثة إثباتات مفهوم توضح التأثير المتصاعد:

إثبات المفهومما يثبته
FilterBypassPoC.javaتجاوز المرشح للأنواع البدائية والفئات غير القابلة للتسلسل والمصفوفات
CraftedBypassPoC.javaحمولات النوع 0 المصممة من قبل المهاجم تتجاوز المرشح لأي فئة قابلة للتسلسل
RcePoC.javaRCE كامل عبر سلسلة أدوات CC6 من خلال تجاوز المرشح

1. تجاوز المرشح (MINA 2.2.6 — عرضة للخطر)

يتم إزالة تسلسل الفئات غير الموجودة في قائمة السماح دون قيود:

تجاوز المرشح على MINA 2.2.6 المعرضة للخطر

2. حمولة مصممة — تحميل فئات عشوائية

يصمم المهاجم حمولات بروتوكول MINA بواصفات النوع 0 لتحميل أي فئة تتجاوز قائمة السماح التي تقبل String فقط:

تجاوز الحمولة المصممة

3. RCE كامل — تنفيذ الأوامر

تحقق سلسلة أدوات متغير CC6 (HashSet → TiedMapEntry → LazyMap → ChainedTransformer → Runtime.exec()) تنفيذ الأوامر من خلال تجاوز المرشح:

تأكيد RCE على MINA 2.2.6

4. تجاوز المرشح (MINA 2.2.7 — مُصلَح)

يتم حظر نفس الاختبارات على الإصدار المُصلَح:

حظر تجاوز المرشح على MINA 2.2.7

5. حظر RCE (MINA 2.2.7 — مُصلَح)

يتم رفض سلسلة الأدوات بواسطة المرشح:

حظر RCE على MINA 2.2.7

بدء سريع (Docker)

أسرع طريقة للاختبار — بدون الحاجة إلى JDK أو Maven:

root@kitploit:~
# استنساخ هذا المستودع
git clone https://github.com/dinosn/CVE-2026-42779.git
cd CVE-2026-42779

# بناء وتشغيل جميع إثباتات المفهوم
docker build -t cve-2026-42779 .
docker run --rm cve-2026-42779

# تشغيل إثباتات مفهوم فردية
docker run --rm cve-2026-42779 bypass     # تجاوز المرشح فقط
docker run --rm cve-2026-42779 crafted    # تجاوز الحمولة المصممة
docker run --rm cve-2026-42779 rce        # RCE كامل

# الدخول إلى قشرة للاستكشاف
docker run --rm -it cve-2026-42779 shell

تحتوي الصورة على JAR الخاص بـ MINA 2.2.6 المعرضة للخطر، وCommons Collections 3.2.2، وجميع إثباتات المفهوم الثلاثة المترجمة مسبقًا. يعمل كل شيء بشكل مستقل داخل الحاوية.

إعادة الإنتاج (من المصدر)

إذا كنت تفضل البناء من المصدر:

root@kitploit:~
# استنساخ وبناء الإصدار المعرض للخطر
git clone https://github.com/apache/mina.git /tmp/apache-mina
cd /tmp/apache-mina
git checkout 2.2.6
mvn install -pl mina-core -DskipTests -q

# تنزيل commons-collections (لإثبات مفهوم RCE)
curl -sL "https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.2/commons-collections-3.2.2.jar" \
  -o commons-collections-3.2.2.jar

# ترجمة إثباتات المفهوم
javac -cp mina-core/target/mina-core-2.2.6.jar FilterBypassPoC.java
javac -cp mina-core/target/mina-core-2.2.6.jar CraftedBypassPoC.java
javac -cp mina-core/target/mina-core-2.2.6.jar:commons-collections-3.2.2.jar RcePoC.java

# تشغيل إثبات مفهوم تجاوز المرشح
java -cp .:mina-core/target/mina-core-2.2.6.jar FilterBypassPoC

# تشغيل إثبات مفهوم الحمولة المصممة
java -cp .:mina-core/target/mina-core-2.2.6.jar CraftedBypassPoC

# تشغيل إثبات مفهوم RCE الكامل
java -Dorg.apache.commons.collections.enableUnsafeSerialization=true \
     --add-opens java.base/java.util=ALL-UNNAMED \
     --add-opens java.base/java.lang.reflect=ALL-UNNAMED \
     -cp .:mina-core/target/mina-core-2.2.6.jar:commons-collections-3.2.2.jar \
     RcePoC

أو استخدم Makefile المرفق:

root@kitploit:~
make run-all    # بناء وتشغيل جميع إثباتات المفهوم الثلاثة
make run-rce    # إثبات مفهوم RCE فقط

المتطلبات: JDK 11+ وMaven (للبناء من المصدر) أو Docker (للحاوية)

المعالجة

قم بالترقية إلى Apache MINA 2.1.12 أو 2.2.7.

إذا لم تكن الترقية ممكنة فورًا:

  • لا تستخدم IoBuffer.getObject() أو ObjectSerializationCodecFactory مع مدخلات غير موثوقة
  • فكر في استخدام مرشح تسلسل JEP 290 كطبقة دفاع إضافية

الجدول الزمني

التاريخالحدث
2026-05-01نشر النشرة بواسطة لجنة Apache MINA PMC
2026-05-01إصدار الإصدارات المُصلَحة 2.1.12 و2.2.7
2026-05-02تطوير واختبار إثبات المفهوم هذا

المراجع

  • نشرة Apache MINA
  • سجل CVE
  • إدخال NVD
  • تنزيلات Apache MINA

إخلاء المسؤولية

إثبات المفهوم هذا مقدم لأغراض البحث الأمني الدفاعي والتعليم واختبار الاختراق المصرح به فقط. استخدمه بمسؤولية وفقط ضد الأنظمة التي لديك إذن باختبارها.

تنزيل الأداة