IPBUF安全漏洞报告
English
CVE-2025-64135 CVSS 5.9 中危

CVE-2025-64135 Jenkins Eggplant Runner Plugin禁用安全属性漏洞

披露日期: 2025-10-29

漏洞信息

漏洞编号
CVE-2025-64135
漏洞类型
安全配置错误
CVSS评分
5.9 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Jenkins Eggplant Runner Plugin

相关标签

安全配置错误Jenkins插件漏洞Java安全属性代理认证绕过CVE-2025-64135Eggplant Runner Plugin中间人攻击凭据窃取

漏洞概述

Jenkins Eggplant Runner Plugin 0.0.1.301.v963cffe8ddb_8及之前版本存在安全配置错误漏洞。该插件将Java系统属性`jdk.http.auth.tunneling.disabledSchemes`设置为空值,从而禁用了Java运行时的安全保护机制。`jdk.http.auth.tunneling.disabledSchemes`属性用于控制HTTP代理认证中允许的隧道认证方案,默认情况下Java会禁用某些不安全的认证方案以防止潜在的安全风险。当该属性被设置为空值时,所有认证方案都被允许,可能导致代理认证凭据被窃取或中间人攻击。虽然CVSS评分为5.9(中等),但此漏洞可能与其他安全缺陷结合造成更严重的影响。 Jenkins是一个广泛使用的开源自动化服务器,其插件生态系统中存在此类配置错误可能影响大量使用该插件的Jenkins实例。

技术细节

该漏洞源于Jenkins Eggplant Runner Plugin在初始化时错误地配置了Java系统属性`jdk.http.auth.tunneling.disabledSchemes`。在Java网络编程中,HTTP代理认证通过隧道(tunneling)机制实现,该机制使用CONNECT方法建立到目标服务器的隧道连接。`jdk.http.auth.tunneling.disabledSchemes`属性控制哪些认证方案被允许用于代理隧道认证。

默认情况下,Java运行时环境会禁用不安全的认证方案(如Basic认证),因为这些方案在非加密通道上传输凭据时存在风险。然而,当`jdk.http.auth.tunneling.disabledSchemes`被设置为空字符串时,Java运行时不再限制任何认证方案,导致所有方案都被允许。

攻击者可能利用此漏洞:1)通过中间人攻击拦截使用该插件的HTTP请求;2)窃取通过代理传输的认证凭据;3)在特定网络环境下劫持代理连接。由于该插件影响Jenkins构建流程中与外部系统的通信,攻击者可能获取构建凭据、源代码或敏感部署信息。

攻击链分析

STEP 1
步骤1
攻击者识别目标环境运行Jenkins Eggplant Runner Plugin 0.0.1.301.v963cffe8ddb_8或更早版本
STEP 2
步骤2
攻击者通过中间人攻击(MITM)或控制代理服务器,拦截Jenkins实例的HTTP代理连接
STEP 3
步骤3
由于jdk.http.auth.tunneling.disabledSchemes被设置为空值,所有认证方案(包括不安全的Basic认证)都被允许
STEP 4
步骤4
Jenkins插件在认证代理时,使用不安全的认证方案传输凭据
STEP 5
步骤5
攻击者拦截并获取代理认证凭据,可能包括Jenkins凭据、API密钥或其他敏感信息
STEP 6
步骤6
攻击者利用获取的凭据进一步渗透系统或访问Jenkins上的敏感资源

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-64135 PoC - Jenkins Eggplant Runner Plugin配置错误验证 // 此PoC演示如何检测jdk.http.auth.tunneling.disabledSchemes属性配置 import java.lang.reflect.Field; public class CVE_2025_64135_POC { public static void main(String[] args) { try { // 获取系统属性jdk.http.auth.tunneling.disabledSchemes String disabledSchemes = System.getProperty("jdk.http.auth.tunneling.disabledSchemes"); System.out.println("=== CVE-2025-64135 Detection ==="); System.out.println("Property: jdk.http.auth.tunneling.disabledSchemes"); System.out.println("Current Value: " + (disabledSchemes == null ? "null" : "\"" + disabledSchemes + "\"")); // 检测漏洞:如果属性值为空字符串,则存在漏洞 if (disabledSchemes != null && disabledSchemes.isEmpty()) { System.out.println("[VULNERABLE] The property is set to empty string!"); System.out.println("[VULNERABLE] All authentication schemes are allowed for proxy tunneling."); System.out.println("[VULNERABLE] This may allow credential theft via proxy authentication."); } else if (disabledSchemes == null) { System.out.println("[SAFE] Property not set, using default Java security settings."); } else { System.out.println("[INFO] Allowed schemes: " + disabledSchemes); } // 使用反射检查Authenticator默认值 Class<?> authClass = Class.forName("sun.net.www.protocol.http.AuthenticatorImpl"); Field defaultSchemesField = authClass.getDeclaredField("defaultSchemes"); defaultSchemesField.setAccessible(true); System.out.println("\nDefault allowed authentication schemes: " + defaultSchemesField.get(null)); } catch (Exception e) { System.out.println("Error during detection: " + e.getMessage()); e.printStackTrace(); } } } // 修复验证脚本(检查插件版本) /* // 检查Jenkins插件版本 import hudson.plugins.eggplantrunner.EggplantRunnerPlugin; if (EggplantRunnerPlugin.getVersion().compareTo("0.0.1.302.v7d9a_09b_60b_b_") < 0) { throw new SecurityException("CVE-2025-64135: Vulnerable plugin version detected"); } */

影响范围

Jenkins Eggplant Runner Plugin <= 0.0.1.301.v963cffe8ddb_8

防御指南

临时缓解措施
如果无法立即升级插件,可以通过Jenkins系统配置覆盖错误的系统属性设置。在Jenkins启动参数中添加:-Djdk.http.auth.tunneling.disabledSchemes=Basic,或在初始化脚本中设置System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "Basic")。同时,确保Jenkins与代理服务器之间的通信使用加密通道,并限制代理认证使用安全的认证方案。建议同时审查Jenkins日志,检测是否存在异常的代理认证行为。

参考链接

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