IPBUF安全漏洞报告
English
CVE-2026-33664 CVSS 7.3 高危

CVE-2026-33664 Kestra 存储型XSS漏洞

披露日期: 2026-03-26

漏洞信息

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

相关标签

XSS存储型XSSKestraWeb安全CVE-2026-33664Vue.js

漏洞概述

Kestra是一款开源事件驱动编排平台,其在1.3.3及之前版本中存在存储型XSS漏洞。该漏洞源于系统未对用户提供的Flow YAML元数据进行充分过滤,直接通过Vue的v-html指令渲染HTML。攻击者可利用此漏洞在流程描述或输入名称中注入恶意JavaScript代码,一旦其他用户查看该流程,代码即在其浏览器中自动执行,从而窃取凭证或执行未授权操作。

技术细节

该漏洞根因在于Kestra前端组件Markdown.vue的不安全渲染机制。当用户编辑Flow YAML时,特定字段(如description、inputs[].displayName、inputs[].description)的内容被传递给Markdown组件,该组件在实例化时启用了html: true选项。随后,生成的HTML字符串通过Vue.js的v-html指令直接注入到DOM中,且完全没有任何HTML清理或消毒机制。由于缺乏严格的输入验证和输出编码,攻击者可以在这些字段中构造包含恶意脚本(如<script>标签或带有onerror/onload事件的img标签)的Markdown/HTML内容。特别是inputs[].displayName字段,可实现零点击触发。这本质上是一个存储型XSS漏洞,一旦恶意Flow被保存到服务器,任何访问该页面的管理员或普通用户都会被迫执行攻击者的脚本,从而导致会话令牌被盗、账户劫持或敏感数据窃取。

攻击链分析

STEP 1
1. 侦察与权限获取
攻击者识别出目标Kestra实例,并获得创建或编辑Flow的低权限账户(PR:L)。
STEP 2
2. 构造恶意Payload
攻击者编写包含XSS Payload的YAML代码,利用Markdown特性,将恶意脚本注入到inputs[].displayName或description字段中。
STEP 3
3. 存储恶意数据
攻击者保存包含恶意YAML内容的Flow。此时,恶意脚本被持久化存储在Kestra数据库中。
STEP 4
4. 触发漏洞
具有更高权限的用户(如管理员)或其他受害者在浏览器中查看或加载该Flow页面。
STEP 5
5. 执行攻击代码
前端Vue组件通过v-html渲染未经过滤的HTML,导致受害者浏览器解析并执行攻击者注入的JavaScript代码。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-33664 PoC: Stored XSS in Kestra via inputs[].displayName id: xss-poc-demo namespace: malicious.namespace description: | This flow demonstrates the XSS vulnerability. inputs: - id: user_input # The displayName field is rendered via v-html without sanitization displayName: <img src=x onerror=alert('CVE-2026-33664_XSS')> type: STRING description: <script>alert('Another XSS vector')</script> tasks: - id: harmless_task type: io.kestra.core.tasks.log.Log message: "Viewing this flow triggers the XSS."

影响范围

Kestra <= 1.3.3

防御指南

临时缓解措施
在官方补丁发布前,建议管理员严格限制用户对Flow的编辑权限,仅允许受信用户创建或修改Flow。同时,管理员应谨慎查看来源不明的Flow详情,避免在未经验证的环境中直接加载包含复杂Markdown内容的页面。

参考链接

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