JetBrains TeamCity 鉴权绕过浅析
字数 2305 2025-08-23 18:31:24
JetBrains TeamCity 鉴权绕过漏洞分析与利用教学文档
1. CVE-2023-42793 漏洞分析
1.1 漏洞概述
CVE-2023-42793 是 JetBrains TeamCity 中的一个鉴权绕过漏洞,允许攻击者绕过身份验证机制获取管理员权限。
1.2 影响版本
漏洞影响 TeamCity 多个版本,具体补丁前的版本均受影响。
1.3 漏洞原理
1.3.1 补丁分析
补丁主要针对 RequestInterceptors 类进行修改:
- 通过反射在
myPreHandlingDisabled字段添加了一个路由/RPC2 - 在
myPreHandlingDisabled的myMatchingPaths字段中移除了所有匹配/**/RPC2的路径
1.3.2 代码审计
漏洞根源在于 RequestInterceptors 类的处理逻辑:
- 请求处理时首先执行
preHandle方法 - 如果
requestPreHandlingAllowed返回 false 则直接放行请求 - 检查访问的是否为 JSP 页面
- 使用
myPreHandlingDisabled字段进行路径匹配 - 类初始化时创建并添加了
/**/RPC2路径到myPreHandlingDisabled字段 - 以
/RPC为后缀的 URL 不会被鉴权
1.3.3 关键利用点
jetbrains.buildServer.server.rest.request.UserRequest#createToken 方法:
- 可以通过 path 变量创建 token
- 用户可通过
userLocator指定(admin 默认为 id:1) - 将 name 位置设置为 RPC2 即可绕过鉴权
1.4 漏洞复现
利用步骤:
-
获取 admin token:
- 利用
/RPC2路径绕过鉴权 - 调用
createToken方法创建管理员 token
- 利用
-
RCE 实现:
- 使用获取的 admin token 开启 debug API
- 触发配置重载过程中的 RCE
- 去掉 Content-Type 字段实现 RCE
2. CVE-2024-27198 漏洞分析
2.1 漏洞概述
CVE-2024-27198 是另一个 TeamCity 的鉴权绕过漏洞,通过特殊构造的请求绕过授权检查。
2.2 漏洞原理
2.2.1 请求分发机制
TeamCity 业务请求分发位于 jetbrains.buildServer.controllers.BaseController:
- 正常授权请求会被重定向到
/unauthorized.html - 不存在的 URI 会导致 404 错误,由
PageNotFoundController处理
2.2.2 关键代码分析
-
updateViewIfRequestHasJspParameter方法:- 获取外部参数
getJspFromRequest - 如果
.jsp结尾或不包含admin/则不会返回 null - 如果与默认视图名
404.jsp不同则设置为最终返回内容
- 获取外部参数
-
视图渲染过程:
DispatcherServlet#resolveViewName得到JstlView类型视图- 对 JSP 文件视图会进行 dispatch 处理
ApplicationContext#getRequestDispatcher会去除;及之后的部分
2.2.3 鉴权绕过原理
- 拦截器
RequestInterceptors#preHandle只在请求栈大小为 1 时起作用 - 请求不存在的 URI 时始终返回 true
- 通过控制视图名实现二次 dispatch 请求绕过鉴权
2.3 漏洞利用
2.3.1 获取管理员 token
构造 payload:
curl --noproxy '*' -ik "http://127.0.0.1:8111/xxxx?jsp=/app/rest/users/id:1/tokens/racerz;.jsp" -X POST
2.3.2 利用流程
- 构造不存在的 URI 请求
- 通过 jsp 参数控制视图名
- 利用分号截断和视图渲染机制
- 最终请求目标授权端点
3. 漏洞总结
3.1 根本原因
- Spring 框架支持通过配置 location 响应错误页面
- TeamCity 鉴权未处理嵌套请求
- 视图名可控导致可以覆盖默认配置
- 通过特殊构造的请求实现二次 dispatch
3.2 防御建议
- 及时更新到最新版本
- 限制外部输入的视图名参数
- 加强嵌套请求的鉴权检查
- 对特殊字符进行严格过滤
4. 参考资源
- [CVE-2023-42793 JetBrains TeamCity 权限绕过 - Y4er的博客]
- [vulhub/teamcity/CVE-2023-42793/README.zh-cn.md]
- [Source Code at Risk: Critical Code Vulnerability in CI/CD Platform TeamCity | Sonar]
- [JetBrains TeamCity RCE - CVE-2023-42793 (projectdiscovery.io)]
- [CVE-2024-27198 and CVE-2024-27199: JetBrains TeamCity Multiple Authentication Bypass Vulnerabilities | Rapid7 Blog]
- [Spring Framework Exception Handling Documentation]