
API SAS Use It Flow RCE
Identifier: CVE-2025-50881
Betroffenes Produkt: API Use it Flow Version 8.2.0 (Rev 15851), Version 9.2.0 (Rev 18093)
Herausgeber: https://www.tenorsolutions.com (ehemals https://api-sas.fr/)
Betroffene Komponente(n): flow/admin/moniteur.php
Verwundbarkeitstyp: Remote Code Execution (RCE) durch eval()-Injection
Schweregrad: Kritisch
Beschreibung:
Das Skript flow/admin/moniteur.php ist anfällig für Remote Code Execution. Bei der Verarbeitung von GET-Anfragen wird eine vom Benutzer bereitgestellte Eingabe aus dem URL-Parameter action ohne ausreichende Validierung übernommen und in einen String ($wscom) eingefügt, der anschließend von der eval()-Funktion ausgeführt wird. Obwohl eine method_exists()-Prüfung durchgeführt wird, validiert diese nur den Teil der Benutzereingabe vor der ersten Klammer (, sodass ein Angreifer nach einem gültigen Methodenaufruf beliebigen PHP-Code anhängen kann. Eine erfolgreiche Ausnutzung ermöglicht es einem nicht authentifizierten oder trivial authentifizierten Angreifer, beliebigen PHP-Code auf dem Server mit den Berechtigungen des Webserver-Prozesses auszuführen.
Anfällige Code-Ausschnitte:
Datei: flow/admin/moniteur.php
Einlesen der Benutzereingabe (Zeile ~45):
if (isset($_GET['action'])) {$action=urldecode(htmlentities($_GET['action']));} else notice($server);
Kommentar: $action wird direkt aus der Benutzereingabe ($_GET['action']) abgeleitet, lediglich URL-Dekodierung und HTML-Entity-Kodierung, was keine Code-Injection verhindert.
Konstruktion des Befehlsstrings (Zeile ~47):
$wscom='$ws->'.$action;
Kommentar: Die benutzergesteuerte $action wird in den String $wscom eingefügt.
Unzureichende Validierung (Zeile ~49):
$func=explode("(",$action);
if (method_exists($ws, $func[0])) {
Kommentar: Es wird nur der Teil von $action vor der ersten Klammer gegen gültige Methoden der Klasse UIFWebService geprüft.
Code-Ausführung via (Zeile ~50):
Ausnutzung:
Ein Angreifer kann eine GET-Anfrage an moniteur.php senden, mit beliebigen login- und password-Parametern (da diese zwar für die Authentifizierung innerhalb der aufgerufenen Methode verwendet werden, nicht jedoch für eval selbst) und einem bösartigen action-Parameter. Der action-Parameter muss mit einem gültigen Methodennamen aus der Klasse UIFWebService beginnen (z. B. get_data), um die method_exists-Prüfung zu bestehen, gefolgt von injiziertem PHP-Code.
Beispiel-Payload:
GET /admin/moniteur.php?login=foo&password=bar&action=get_data(1);phpinfo();$res=0; HTTP/1.1
Host: <target>
Diese Payload führt dazu, dass eval() Code ähnlich wie den folgenden ausführt:
$res = $ws->get_data(1);phpinfo();$res=0;;
Dies führt die Methode get_data aus, dann phpinfo() und setzt schließlich $res auf 0.
Auswirkungen: Ein Angreifer kann beliebige Befehle auf dem Server ausführen, was potenziell zu Folgendem führen kann:
Offenlegung:
eval()
eval('$res=' . $wscom . ';');
Kommentar: Der konstruierte String $wscom, der Benutzereingaben enthält, wird als PHP-Code ausgeführt.