
CVE-2026-40987 PoC
هذا المستودع هو PoC أدنى لإعادة إنتاج CVE-2026-40987 الذي تم الكشف عنه من خلال التوصية الأمنية الرسمية لـ Spring.
Remote-file synchronizer in Spring Integration writes server-supplied filename under localDirectory without canonicalizationAV:N/AC:H/PR:L/UI:R/S:C/C:L/I:H/A:Lكان بإمكان مزامن الملفات عن بُعد في Spring Integration استخدام اسم الملف الذي يوفره الخادم البعيد كما هو عند إنشاء مسار التخزين المحلي. إذا لم يكن التحقق من المسار المتعارف عليه (canonical path) كافيًا، يمكن لخادم FTP/SFTP/SMB ضار أو مخترق إرجاع اسم ملف مثل ../escaped-by-ftp-list.txt مما يتيح كتابة ملف خارج localDirectory المحدد.
وفقًا للتوصية الرسمية، هذه ليست مشكلة FTP فقط، بل تنطبق على عائلة مزامنة الملفات عن بُعد FTP/SFTP/SMB في Spring Integration. يستخدم هذا PoC FtpInboundFileSynchronizer لإعادة إنتاج نفس المسار الضعيف بأصغر وأوضح شكل.
المنتجات المتأثرة وفقًا للتوصية الرسمية:
الإصدارات المتأثرة:
7.0.0 - 7.0.46.5.0 - 6.5.86.4.0 - 6.4.116.3.0 - 6.3.145.5.0 - 5.5.20الإصدارات المصححة:
7.0.5 أو 7.0.4.16.5.9 أو 6.5.8.16.4.126.3.155.5.21يظهر الاختبار مسارين.
SpringIntegrationRemoteFilePathTraversalTest
../escaped-by-spring-integration.txt.SpringIntegrationFtpPathTraversalTest
../escaped-by-ftp-list.txt في استجابة LIST لخادم FTP.FtpInboundFileSynchronizer الفعلي لـ Spring Integration يستلم اسم الملف هذا، ويقوم بتنزيل incoming/../escaped-by-ftp-list.txt، وينشأ الملف الناتج خارج دليل downloads.التدفق الأساسي لـ PoC هو كما يلي:
configured localDirectory = <temp>/downloads
remote LIST filename = ../escaped-by-ftp-list.txt
resulting local path = <temp>/downloads/../escaped-by-ftp-list.txt
normalized location = <temp>/escaped-by-ftp-list.txt
أي يمكن كتابة ملف خارج دليل التنزيل المقصود من التطبيق.
ويندوز:
.\mvnw.cmd test
ماك/لينكس:
./mvnw test
النتيجة المتوقعة للإصدار الضعيف:
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
نجاح الاختبار يعني أنه تم إعادة إنتاج السلوك الضعيف. أي في التبعيات الضعيفة، يمر الاختبار ويثبت عملية الكتابة الخارجة عن الدليل.
يمكن التحقق من عدة إصدارات ضعيفة باستخدام الأوامر التالية.
.\mvnw.cmd "-Dspring-integration.version=6.4.10" test
.\mvnw.cmd "-Dspring-integration.version=6.5.8" test
.\mvnw.cmd "-Dspring-integration.version=7.0.4" test
.\mvnw.cmd "-Dspring-integration.version=7.1.0-RC1" test
القيمة الافتراضية لهذا المستودع هي spring-integration.version=7.0.4.
هذه الثغرة تسمح للمهاجم بكتابة محتوى يتحكم به على نظام الملفات المحلي لتطبيق العميل. لا يكون المهاجم عميل HTTP عاديًا، بل يجب أن يكون قادرًا على التلاعب باستجابة خادم ملفات بعيد يثق به التطبيق ويقوم باستطلاعه.
وبالتالي، على الرغم من وجود شروط مسبقة، يمكن أن تحدث التأثيرات التالية إذا تحققت الشروط:
صنفت التوصية الرسمية هذه المشكلة على أنها عالية (High).
تذكر التوصية الرسمية لـ Spring أن الباحثين التاليين أبلغوا عنها بمسؤولية: