CVE-2026-66906
Apache Camel: Camel-Azure-Storage-Blob: عملية downloadBlobToFile تبني هدف التنزيل المحلي من اسم الـ blob البعيد دون تقييده بـ fileDir المُهيأ
- تم النشر
- 24/08/2026
- محدث
- 25/08/2026
- تخصيص CNA
- apache
- الأدلة المرصودة
- 24/08/2026
CVSS الأساسي
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Nمنخفض · الثلاثين يومًا القادمة
- المئوية
- 43.6%
- تاريخ الموديل
- 21/09/2026
EPSS هو تقدير إحصائي، وليس يقينًا أو مقياسًا للتأثير. ادمجها مع CVSS وحالة KEV والتعرض وبيئتك.
ملخص
ثغرة اجتياز المسار النسبي (Relative path traversal) في مكوّن Azure Storage Blob الخاص بـ Apache Camel. تؤثر هذه المشكلة على Apache Camel في الإصدارات: من 4.0.0 حتى ما قبل 4.14.9، ومن 4.15.0 حتى ما قبل 4.18.4، ومن 4.19.0 حتى ما قبل 4.22.0. يمكن لمكوّن camel-azure-storage-blob تنزيل blob من Azure Storage إلى نظام الملفات المحلي عبر عملية downloadBlobToFile الخاصة به، والكتابة داخل الدليل الذي يحدده خيار نقطة النهاية fileDir، وهو موثّق على أنه قابل للاستخدام من كلٍّ من المنتج والمستهلك. يبني BlobOperations.downloadBlobToFile الهدف المحلي من خلال ضمّ fileDir مع اسم الـ blob البعيد تمامًا كما أبلغ عنه Azure SDK (new File(fileDir, client.getBlobName()))، ثم يمرّر النتيجة مباشرةً إلى استدعاء التنزيل في SDK، دون أي تطبيع معجمي ودون أي تحقق من بقاء الموقع المُحلَّل داخل fileDir. إن اسم الـ blob ليس بيانات يتحكم فيها route: إذ يعدّد المستهلك الحاوية في BlobConsumer.createBatchExchangesFromContainer، الذي يسرد الـ blobs وينشئ exchange واحدًا لكل إدخال مأخوذ حرفيًا من BlobItem.getName()، دون تطبيق أي تصفية على الأسماء افتراضيًا. ولذلك فإن اسم blob يحوي مقاطع دليل أصلي (parent-directory segments) يُحلّ إلى موقع خارج fileDir المكوَّن، مما يسمح لأي شخص قادر على التأثير في الأسماء الموجودة في الحاوية المستهلكة بدفع Camel إلى إنشاء ملف أو استبداله في موقع من اختياره، بصلاحيات عملية Camel. واعتمادًا على ما يمكن للعملية الكتابة إليه، يمكن أن يتصاعد استبدال ملف خارج دليل التنزيل إلى ما هو أبعد من فقدان سلامة ذلك الملف. تستخدم حاويات blobs في Azure Storage مساحة اسم مسطحة (flat namespace) يكون فيها اسم الـ blob مفتاحًا غير شفاف (opaque key)، لذا فإن الاسم الذي يحمل مثل هذه المقاطع يُخزَّن ويُدرَج كما هو معطى. إن خيار fileDir هو معامل تكوين عادي من مجموعة الخيارات العامة ولا يحمل أي علامة أمان، لذا لم يُشر أي شيء للمستخدمين إلى أن قيمته لم تكن تُفرَض كحدٍّ للاحتواء. كانت مستهلكات تنزيل الملفات الأخرى في Camel — camel-file وcamel-ftp وcamel-smb وcamel-mina-sftp وcamel-azure-files — قد قيّدت بالفعل تنزيلاتها المحلية إلى الدليل المكوَّن باستخدام فحص لحدود مقاطع المسار؛ ولم يكن مسار تنزيل camel-azure-storage-blob مشمولًا بتلك المعالجة. يُنصح المستخدمون بالترقية إلى الإصدار 4.22.0، الذي يصلح المشكلة. إذا كان المستخدمون على خط إصدارات 4.14.x LTS، فمن المستحسن الترقية إلى 4.14.9. وإذا كان المستخدمون على خط إصدارات 4.18.x، فمن المستحسن الترقية إلى 4.18.4. أما بالنسبة للنُّصب التي لا يمكنها الترقية فورًا، فقيّد الأسماء التي سيتعامل معها المستهلك باستخدام خيار نقطة النهاية regex، الذي يُطبَّق على كل اسم blob مُدرَج كمطابقة كاملة للسلسلة، بحيث لا تُقبل إلا الأسماء البسيطة أحادية المقطع، ويُستبعَد أي اسم يحمل فاصل مسار أو مقطع دليل أصلي قبل إنشاء exchange؛ ويمكن لخيار prefix أن يضيّق القائمة أيضًا من جانب الخادم، مع الإشارة إلى أنه عند تعيين كلاهما، تكون الأولوية لـ regex ويُتجاهَل prefix. وبدلًا من ذلك، تجنّب استخدام عملية downloadBlobToFile على الحاويات غير الموثوقة واكتب الحمولة من الـ route تحت اسم ملف يتحكم فيه الـ route نفسه، بدلًا من اسم مأخوذ من القائمة البعيدة. وكدفاع في العمق، تعامل مع أسماء الـ blobs في أي حاوية قابلة للكتابة من الخارج كمدخلات غير موثوقة، ولا تستمد منها مسارات نظام الملفات المحلية.
الاستخدام المسؤول
استخدم معلومات الثغرات الأمنية فقط على الأنظمة التي تمتلكها أو المرخص لها باختبارها. يرتبط Kitploit ببيانات تعريف البحث العامة ولا يخزن أكواد الاستغلال أو الحمولات الضارة.