
API SAS Use It Flow RCE
Identificador: CVE-2025-50881
Produto Afetado: API Use it Flow Versão 8.2.0 (Rev 15851), Versão 9.2.0 (Rev 18093)
Editor: https://www.tenorsolutions.com (anteriormente https://api-sas.fr/)
Componente(s) Afetado(s): flow/admin/moniteur.php
Tipo de Vulnerabilidade: Execução Remota de Código (RCE) via Injeção de eval()
Severidade: Crítica
Descrição:
O script flow/admin/moniteur.php é vulnerável à Execução Remota de Código. Ao processar requisições GET, o script recebe entrada fornecida pelo usuário através do parâmetro action da URL, realiza validação insuficiente e incorpora essa entrada em uma string ($wscom) que é posteriormente executada pela função eval(). Embora uma verificação method_exists() seja realizada, ela apenas valida a parte da entrada do usuário antes do primeiro parêntese (, permitindo que um atacante anexe código PHP arbitrário após uma estrutura de chamada de método válida. A exploração bem-sucedida permite que um atacante não autenticado ou trivialmente autenticado execute código PHP arbitrário no servidor com os privilégios do processo do servidor web.
Trechos de Código Vulneráveis:
Arquivo: flow/admin/moniteur.php
Leitura da Entrada do Usuário (Linha ~45):
if (isset($_GET['action'])) {$action=urldecode(htmlentities($_GET['action']));} else notice($server);
Comentário: $action é derivada diretamente da entrada do usuário ($_GET['action']) apenas com decodificação de URL e codificação de entidades HTML, o que não impede a injeção de código.
Construção da String de Comando (Linha ~47):
$wscom='$ws->'.$action;
Comentário: O $action controlado pelo usuário é concatenado na string $wscom.
Validação Insuficiente (Linha ~49):
$func=explode("(",$action);
if (method_exists($ws, $func[0])) {
Comentário: Apenas a parte de $action antes do primeiro parêntese é verificada contra métodos válidos na classe UIFWebService.
Execução de Código via (Linha ~50):
Exploração:
Um atacante pode criar uma requisição GET para moniteur.php, fornecendo parâmetros login e password arbitrários (já que são usados para autenticação dentro do método chamado, não para o eval em si) e um parâmetro action malicioso. O parâmetro action deve começar com um nome de método válido da classe UIFWebService (ex.: get_data) para passar na verificação method_exists, seguido de código PHP injetado.
Exemplo de Payload:
GET /admin/moniteur.php?login=foo&password=bar&action=get_data(1);phpinfo();$res=0; HTTP/1.1
Host: <target>
Este payload resulta na execução pela eval() de código semelhante a:
$res = $ws->get_data(1);phpinfo();$res=0;;
Isso executa o método get_data, depois executa phpinfo() e, por fim, define $res como 0.
Impacto: Um atacante pode executar comandos arbitrários no servidor, potencialmente levando a:
Divulgação:
eval()
eval('$res=' . $wscom . ';');
Comentário: A string construída $wscom, contendo entrada do usuário, é executada como código PHP.