OpenSTAManager API认证SQL注入漏洞分析

本文详细分析了OpenSTAManager中存在的认证SQL注入漏洞(CVE-2025-65103),攻击者可通过display参数执行任意SQL查询,导致数据泄露和系统完全被控制的安全风险。

OpenSTAManager存在认证SQL注入漏洞(CVE-2025-65103)

漏洞概述

OpenSTAManager中存在一个经过认证的SQL注入漏洞,允许任何用户(无论权限级别如何)通过操纵API请求中的display参数执行任意SQL查询。攻击者可以利用此漏洞泄露、修改或删除数据库中的任何数据,导致系统完全被控制。

技术细节

漏洞位置

该漏洞位于src/API/Manager.php文件中的retrieve()方法。

漏洞原理

用户从display GET参数输入的未经适当验证的处理方式存在问题。代码会去除周围的括号[],按逗号分割字符串,然后将每个生成的元素直接传递到查询构建器的selectRaw()函数中。

1
2
3
4
5
6
7
8
9
// 来自'display'的用户输入未经清理就被使用
$select = !empty($request['display']) ? explode(',', substr((string) $request['display'], 1, -1)) : null;

// ...

// 未经清理的输入直接传递给`selectRaw()`
foreach ($select as $s) {
    $query->selectRaw($s);
}

由于selectRaw()设计用于执行原始SQL表达式,因此它会执行在display参数中提供的任何恶意SQL代码。

漏洞验证

复现步骤

  1. 以任何用户身份登录到OpenSTAManager实例
  2. 导航到用户的个人资料页面以获取其个人API令牌
  3. 使用此API令牌向API端点发送特制的GET请求

基于时间的盲注测试

<your_host><your_token><resource_name>替换为实际值。anagrafiche是一个有效资源。

1
curl "http://<your_host>/openstamanager/api?token=<your_token>&resource=anagrafiche&display=[1,SLEEP(5)]"

服务器将延迟其响应大约5秒,确认数据库执行了SLEEP(5)命令。

影响分析

这是一个严重的SQL注入漏洞。任何经过认证的用户,即使拥有最低权限,也可以利用此漏洞:

  • 从数据库泄露所有数据(例如用户凭据、客户信息、发票、内部数据)
  • 修改或删除数据,破坏数据完整性
  • 根据数据库用户的权限和系统配置,可能实现进一步的系统控制

受影响版本

  • 受影响版本:<= 2.9.4
  • 已修复版本:2.9.5

参考信息

安全指标

  • 严重程度:高
  • CVSS评分:8.8
  • 弱点类型:CWE-89 SQL注入漏洞
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计