漏洞复现 TeamCity CVE-2024-27198

最后更新于 2025-11-29 141 次阅读


这个漏洞(CVE-2024-27198)是JetBrains TeamCity中的一个身份验证绕过漏洞。攻击者可以利用此漏洞在未授权的情况下访问TeamCity服务器的受限端点,从而执行管理员操作,包括创建用户、生成令牌、修改配置以及执行远程代码

漏洞原理:

  1. 路径遍历和身份验证绕过: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 的认证绕过漏洞通常出现在:

  1. 多层架构系统:前端代理 + 后端应用的解析差异
  2. 复杂路由配置:正则表达式或通配符匹配过于宽松
  3. 文件扩展名处理:基于扩展名的不同处理逻辑
  4. 参数信任过度:用户输入直接用于路径构造
  5. 配置默认不安全:开箱即用的配置存在安全隐患