QVD-2024-15263禅道项目管理系统身份认证绕过漏洞
1.漏洞描述
禅道项目管理软件是国产的开源项目管理软件,专注研发项目管理,内置需求管理、任务管理、bug管理、缺陷管理、用例管理、计划发布等功能,完整覆盖了研发项目管理的核心流程。
禅道项目管理系统存在身份认证绕过漏洞,远程攻击者利用该漏洞可以绕过身份认证,调用任意API接口并修改管理员用户的密码,并以管理员用户登录该系统,配合其他漏洞进一步利用后,可以实现完全接管服务器
影响版本
16.x <= 禅道项目管理系统< 18.12(开源版)
6.x <= 禅道项目管理系统< 8.12(企业版)
3.x <= 禅道项目管理系统< 4.12(旗舰版)
2.代码分析
在zentaopms/module/common/model.php
中存在一个deny函数,函数对当前的session添加了一个user属性
而在zentaopms/module/testcase/control.php
中的testcase类中刚好存在对用户进行鉴权,发现用户没有相关功能的使用权限之后执行deny操作
通过访问api.php?m=testcase&f=savexmindimpor
t可以调用对应的savexmindimport
函数
但是在这个过程中需要对testcase类进行实例化,实例化过程中将调用helper::isAjaxRequest()
检查是否是ajax请求,所以需要在GET请求中添加参数HTTP_X_REQUESTED_WITH=XMLHttpRequest
此时就可以获取到带有user属性的session了
而用户创建相关模块是在/api.php/v1/users
接口,可以在/zentaopms/framework/api/entry.class.php
中看到当前的判断逻辑,如果session中没有user属性或user的值为guest则报404
然后可以通过/api.php/v1/users接口创建用户,在创建用户过程中没有进行进一步的鉴权操作,所以可以创造一个新的管理员用户(虽然回的是403,但实际上创建成功了)
3.修补措施
更新版本到18.12