禅道项目管理系统-远程命令执行漏洞源码分析
字数 1418 2025-08-11 08:36:24
禅道项目管理系统远程命令执行漏洞分析与复现
1. 漏洞概述
禅道研发项目管理软件是国产开源项目管理软件,专注研发项目管理,内置需求管理、任务管理、bug管理等功能,已为100万+项目提供服务。
2023年1月6日披露的漏洞包含:
- 权限绕过漏洞:攻击者可在无需登录的情况下构造恶意请求
- 命令执行漏洞:结合权限绕过可执行任意命令,控制服务器
受影响版本
- 开源版:17.4 ≤ Zentao ≤ 18.0.beta1
- 旗舰版:3.4 ≤ Zentao ≤ 4.0.beta1
- 企业版:7.4 ≤ Zentao ≤ 8.0.beta1
2. 漏洞分析
2.1 权限绕过漏洞分析
关键函数调用链
-
index.php:所有HTTP请求的入口
parseRequest():解析请求入口方法setParams():设置被调用方法的参数checkPriv():检查用户权限loadModule():加载相应模块并调用方法
-
checkPriv函数缺陷:
- 检查是否为重置密码请求 → 检查是否已登录 → 检查用户权限
- 权限检查失败时调用
deny()→helper::end()抛出异常 - 关键问题:异常被捕获但程序继续执行
-
绕过方法:
- 构造
session['user']即可绕过登录验证 - 利用
captcha函数写入自定义session
- 构造
2.2 命令执行漏洞分析
漏洞位置
module/repo/model.php中的checkConnection函数:
function checkConnection(){
if($this->scm == 'Subversion'){
$command = $this->client . ' --version --quiet';
exec($command, $output, $return);
// ...
}
}
漏洞成因
client参数未经任何校验直接拼接执行- 当
scm值为"Subversion"时触发命令执行
3. 漏洞复现
3.1 权限绕过复现步骤
-
利用
captcha函数生成自定义session:- 一键安装包URL:
/misc-captcha-user.html - 源码搭建URL:
/index.php?m=misc&f=captcha&sessionVar=user
- 一键安装包URL:
-
效果:设置
$this->app->user不为空,绕过权限检查
3.2 命令执行复现步骤
两种触发路径:
-
create函数路径:
- 被
checkClient函数多重校验阻挡 - 需要满足三个条件之一:
scm == "Gitlab"checkClient == falseclientVersionFile文件存在
- 被
-
edit函数路径(推荐):
- 前提:系统已创建仓库
- 调用链:
edit()→update()→checkConnection()
实际利用:
- 先调用
captcha获取session - 调用
repo/edit执行命令:- Linux:使用反引号
` - Windows:使用
%26(&的URL编码)
- Linux:使用反引号
- 验证方式:
- 推荐使用dnslog或Ceye
- Windows回显较复杂,建议外带验证
4. 修复方案
官方已于2023年1月12日发布补丁,建议升级到最新版本。
5. 技术要点总结
-
权限绕过关键:
checkPriv异常处理缺陷captcha函数的session写入利用
-
命令执行关键:
client参数未过滤scm == "Subversion"触发条件- 多路径选择策略
-
跨平台差异:
- Linux与Windows命令执行方式不同
- Windows下回显限制解决方案