
أداة إثبات مفهوم قابلة للتشغيل لإعادة إنتاج CVE-2026-79983، وهو اجتياز مسار في مستهلكي Apache Camel camel-ftp، مع تجهيزات خادم FTP خبيثة ونسخ بناء متأثرة مقابل مُصلحة.
مُعيد إنتاج إثبات مفهوم قابل للتشغيل لثغرة Apache Camel حيث تستعلم مستهلكات الملفات البعيدة عن
دليل على خادم بعيد وتبني المسار البعيد المطلق لكل ملف عبر دمج الدليل المُهيأ
مع اسم الملف المُبلَّغ عنه في قائمة دليل الخادم، دون تطبيع معجمي ودون
التحقق من بقاء النتيجة داخل الدليل المُستعلَم عنه. يصبح ذلك المسار بعد ذلك معاملًا للاسترجاع (دائمًا)،
وللحذف أو إعادة التسمية عند تهيئة delete=true أو move أو preMove أو moveFailed أو readLock=rename.
اسم القائمة ليس بيانات يتحكم بها المسار — بل يوفره الخادم البعيد، وقناة تحكم FTP
لا تتمتع بحماية سلامة، لذا يمكن لمهاجم على المسار إعادة كتابة استجابة LIST، ويمكن لخادم
مخترق أو متعدد المستأجرين إصدار مثل هذا الاسم مباشرةً. خيار jailStartingDirectory الموثّق والمُفعَّل افتراضيًا لم يقيّد
هذا المعامل البعيد.
| بيئة التشغيل | الدليل | المكدس |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-ftp 4.22.0 (متأثر؛ مُصلَح في 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-ftp 3.29.0 (Camel 4.15.0، متأثر) |
يأتي الإصلاح في Camel 4.18.5 / 4.22.1 / 4.23.0؛ تشغّل وحدة Spring Boot كلاً من البناء المتأثر (4.22.0) والبناء المُصلَح (4.22.1). لا توجد نسخة Camel Quarkus مُصدَرة بعد تتضمن Camel مُصلَحًا.
يتضمن التطبيق خادم FTP خبيثًا عمدًا (Apache MINA FtpServer مع VFS في الذاكرة) يُدرج، في
الدليل المُستعلَم عنه /upload:
normal.txt — ملف شرعي داخل الدليل، وd/../../outside.txt — إدخال مصنوع اسمه ليس مقطع مسار واحدًا. لا يبدأ بنقطة
(لذا لا تلتقطه قاعدة الملفات المخفية في Camel)، و/upload + d/../../outside.txt يُحلَّل إلى /outside.txt،
على مستوى أعلى من الدليل المُستعلَم عنه.يستعلم مستهلك FTP عادي في Camel عن /upload. على البناء المتأثر يسترجع كلا الإدخالين — بما في ذلك
/outside.txt، وهو ملف لا ينبغي أن يصل إليه. على البناء المُصلَح يحتفظ بـ normal.txt ويتخطى الإدخال
الهارب، مع تسجيل Skipping file as it resolves outside the starting directory: upload/d/../../outside.txt.
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
الناتج المتوقع على البناء المتأثر:
What the Camel consumer retrieved:
name=[normal.txt] (inside)
name=[d/../../outside.txt] <<< FILE FROM OUTSIDE THE POLLED DIRECTORY
content: OUTSIDE-SECRET (/outside.txt, a file the consumer should never reach)
Paths the server was asked to read:
upload/normal.txt -> /upload/normal.txt
upload/d/../../outside.txt -> /outside.txt
| الخاصية | القيمة |
|---|---|
| المكوّن | camel-ftp (مخططات ftp وftps وsftp) |
| CWE | CWE-22 (التقييد غير الصحيح لاسم المسار إلى دليل محظور) |
| الخطورة | عالية |
| ناقل الهجوم | إدخال LIST (يوفّره الخادم، وقابل لإعادة الكتابة عبر قناة تحكم FTP غير مصادَق عليها) لا يمثّل مقطع مسار واحدًا |
| التأثير | القراءة — ومع delete/move/readLock=rename، الحذف أو إعادة التسمية — لملفات خارج الدليل المُستقصى، باستخدام بيانات اعتماد نقطة النهاية |
| الإصدارات المتأثرة | من 4.0.0 قبل 4.18.5، ومن 4.19.0 قبل 4.22.1 |
| الإصدارات المُصلحة | 4.18.5، 4.22.1، 4.23.0 |
| JIRA | CAMEL-24487 |
| الفضل | Dilrevx من NSSL، SJTU |
الإشعار الأمني: https://camel.apache.org/security/CVE-2026-79983.html
يقوم تحميل زائد لـ GenericFileHelper.isWithinDirectory يراعي الفواصل، واستراتيجية GenericFileConsumer.isWithinStartingDirectory
(يُرجَع إليها من isValidFile عند تفعيل jailStartingDirectory) بضغط المسار المُحلَّل والتحقق،
على حدود مقاطع المسار، من أنه لا يزال يُحلَّل داخل الدليل المُستقصى. يُتخطّى أي ملف يُحلَّل خارج ذلك
مع تسجيل تحذير (بحيث تُعالَج الإدخالات الشرعية الأخرى في القائمة نفسها). تتجاوز RemoteFileConsumer
وSmbConsumer هذا الفحص؛ أما التنفيذ الأساسي المحلي فهو بلا تأثير، لأن أسماء القوائم المحلية دائمًا
مقاطع مفردة.
فضّل sftp/ftps على ftp حتى لا يمكن إعادة كتابة القائمة أثناء النقل، وتحقق من مفتاح المضيف/الشهادة.
قيّد المستهلك باستخدام filter أو antInclude أو include لقبول الأسماء المفردة المقطع فقط، وتجنّب
delete=true/move/preMove/moveFailed/readLock=rename مع خوادم لا تكون قوائمها موثوقة بالكامل.
حيثما أمكن، احصر حساب الخادم في الدليل المُستقصى.
يُنشر هذا المستودع لأغراض تعليمية ودفاعية: لمساعدة مستخدمي Apache Camel على فهم الثغرة الأمنية، والتحقق مما إذا كانوا متأثرين بها، وتأكيد أن الترقية تحلّها. الخادم الخبيث و"السر" هما عناصر محلية خاملة. لا تستخدم هذه المواد ضد أنظمة لا تملكها أو لا تديرها.