这个漏洞(CVE-2024-27198)是JetBrains TeamCity中的一个身份验证绕过漏洞。攻击者可以利用此漏洞在未授权的情况下访问TeamCity服务器的受限端点,从而执行管理员操作,包括创建用户、生成令牌、修改配置以及执行远程代码
漏洞原理:
- 路径遍历和身份验证绕过:TeamCity的Web服务器在处理请求时,对某些路径的访问控制存在缺陷。攻击者可以通过在请求路径中插入特殊字符串(如“/hax?jsp=”)来绕过身份验证检查,从而访问需要认证的API端点
在TeamCity中,存在一个认证过滤器(Authentication Filter),它负责对访问特定路径的请求进行认证检查。正常情况下,访问如/app/rest/和/admin/等路径的请求需要经过认证。
然而,由于TeamCity的URL路由机制存在缺陷,攻击者可以通过构造特殊的URL来绕过认证过滤器。具体来说,攻击者可以在URL中插入一个特殊的参数(比如jsp)并在其后加上一个分号(;)和任意字符串(如.jsp),从而使得认证过滤器无法正确识别请求的实际路径。
例如,正常需要认证的路径是:/app/rest/users
攻击者可以构造:/hax?jsp=/app/rest/users;.jsp
当这个请求到达TeamCity服务器时,认证过滤器可能会因为路径不匹配而跳过认证检查。但是,后续的请求处理逻辑却可能将jsp参数的值(即/app/rest/users;.jsp)当作实际要处理的路径,从而执行相应的操作
// 原始请求URL
/hax?jsp=/app/rest/users;.jsp
// Web服务器 (Apache/Nginx) 解析:
路径: /hax
参数: jsp=/app/rest/users;.jsp
// 应用服务器 (Tomcat) 解析:
路径: /hax?jsp=/app/rest/users
文件扩展名: .jsp
// TeamCity 过滤器解析:
路径: /app/rest/users ← 这是实际处理的路径!
详细认证绕过流程
步骤1: 请求到达Web服务器
http
GET /hax?jsp=/app/rest/users;.jsp HTTP/1.1
Host: teamcity.example.com
Web服务器视角:
- 路径:/hax
- 查询参数:jsp=/app/rest/users;.jsp
- 结论:这不是受保护路径,直接转发给应用服务器
步骤2: 应用服务器处理
java
// Tomcat/Jetty 的 URL 解析逻辑
String requestURI = "/hax?jsp=/app/rest/users;.jsp";
String servletPath = extractServletPath(requestURI); // 返回: "/hax"
String pathInfo = extractPathInfo(requestURI); // 返回: null
String queryString = extractQueryString(requestURI); // 返回: "jsp=/app/rest/users;.jsp"
// JSP Servlet 映射检查
if (requestURI.endsWith(".jsp") || requestURI.endsWith(".jspf")) {
// 匹配到 JSP Servlet!
forwardToJSPServlet(requestURI);
}
步骤3: JSP Servlet 处理(中间人执行命令)
因为JSP对;进行过滤
// 攻击输入: "/app/rest/users;.jsp"
// 清理后: "/app/rest/users"
组件 | 看到的路径 | 处理结果
Web服务器 | /hax | 转发请求
安全过滤器 | /hax | 跳过认证
JSP Servlet | /app/rest/users | 执行API逻辑
远程代码执行(RCE)的实现:
首先,利用身份验证绕过漏洞创建一个管理员用户。
然后,使用该用户生成一个访问令牌。
使用该令牌修改内部属性,将“rest.debug.processes.enable”设置为“true”,以启用进程调试端点。
最后,通过进程调试端点(/app/rest/debug/processes)执行操作系统命令。
漏洞影响:此漏洞允许未经授权的攻击者完全控制TeamCity服务器,包括执行任意系统命令,从而完全接管服务器。
此漏洞影响2023.11.4版本之前的TeamCity。
总结
类似 CVE-2024-27198 的认证绕过漏洞通常出现在:
- 多层架构系统:前端代理 + 后端应用的解析差异
- 复杂路由配置:正则表达式或通配符匹配过于宽松
- 文件扩展名处理:基于扩展名的不同处理逻辑
- 参数信任过度:用户输入直接用于路径构造
- 配置默认不安全:开箱即用的配置存在安全隐患


Comments NOTHING