CVE-2026-49869 深度分析:一个 endsWith() 让 Kestra 工作流引擎裸奔
CVSS 10.0 | CISA KEV 2026-09-02 收录 | 联邦截止 2026-09-05 | 微软报告 6 月底在野利用
一句话概括
Kestra 的认证过滤器用 request.getPath().endsWith("/configs") 判断「这是公开配置端点,跳过 Basic Auth」——后缀匹配而非精确匹配。于是攻击者只要把任何 API 路径的最后一节伪装成 configs,就能完全绕过认证,以匿名身份创建并执行任意 workflow。而 Kestra 默认启用 plugin-script-shell / plugin-script-python 等脚本插件——workflow 即代码,代码即 root shell。一个 endsWith(),就是 CVSS 10.0。
漏洞档案
| 项 | 值 |
|---|---|
| CVE | CVE-2026-49869 |
| CVSS | 10.0(Critical) |
| 类型 | 认证绕过 → 任意 workflow 创建执行 → OS 命令注入(RCE) |
| 产品 | Kestra OSS(事件驱动开源编排/工作流平台) |
| 受影响版本 | < 1.0.45 与 < 1.3.21(两条维护线) |
| 修复版本 | 1.0.45、1.3.21 |
| 公告 | GHSA-5vc5-wxxq-3fjx |
| CISA KEV | 2026-09-02 收录,BOD 26-04 截止 2026-09-05 |
| 在野利用 | 是(微软报告,2026 年 6 月底) |
| MITRE ATT&CK | T1190(利用公网应用入口)/ T1059(命令与脚本执行) |
根因拆解:后缀匹配白名单的典型陷阱
有缺陷的代码逻辑
Kestra 的 AuthenticationFilter 需要把公开的配置端点(如 /api/v1/configs)从 Basic Auth 中豁免。问题代码的核心是:
// Kestra OSS < 1.0.45 / < 1.3.21 的缺陷逻辑(示意)
String path = request.getPath();
// 本意:允许匿名访问公共配置端点 /api/v1/configs
// 实际:任何「以 /configs 结尾」的路径都被放行
if (path.endsWith("/configs")) {
// 跳过认证过滤器 → 继续处理请求
chain.doFilter(request, response);
return;
}这个 endsWith("/configs") 就是全部问题所在:
- 设计意图是匹配唯一的公开端点
/api/v1/configs - 实际效果是把所有以
/configs结尾的 API 路径都从认证中豁免 - 攻击者构造类似
/api/v1/executions/.../configs、/api/v1/flows/.../configs、或任意功能路径拼接/configs后缀的 URL,过滤器直接放行
为什么绕过认证 = RCE
Kestra 是工作流编排引擎——它的核心能力就是「定义并执行任意自动化任务」。Kestra 内置了任务插件体系,默认安装即带脚本执行类插件:
plugin-script-shell(执行 Shell 脚本)plugin-script-python(执行 Python 脚本)- 还有 PowerShell、Node 等脚本插件
于是攻击链非常短:
匿名攻击者
│ ① 构造 /xxx/configs 结尾路径绕过 AuthenticationFilter(✅ 认证绕过)
▼
│ ② 调用 workflow API 创建一个恶意 workflow,
│ 任务类型 = io.kestra.plugin.scripts.shell.Commands
▼
│ ③ 命令内容 = 攻击者想要的任意 shell(reverse shell / 下载矿机 / 窃取数据)
▼
│ ④ 触发 workflow 执行 → worker 容器内以 root 运行攻击者命令(✅ RCE)
▼
容器内 root → Docker socket(若挂载)→ 宿主机 / 横向移动workflow 引擎 + 默认脚本插件 + 认证绕过,三者叠加就是一条无需任何凭据的 RCE 高速公路。微软将利用手法归纳为四条影响路径:
- Shell 执行:通过 workflow 引擎直接执行命令
- 容器环境暴露:访问 Docker socket 进行容器环境发现
- 主机资源劫持:部署加密货币矿机(XMRig)
- 数据收集:通过 workflow 任务执行横向收集数据
在野利用:微软披露的 6 月底攻击
微软在 2026 年 8 月底的报告(促成 CISA 收录)中披露:某威胁行为者 2026 年 6 月底已利用 CVE-2026-49869:
- 建立 reverse shell
- 进行 Docker 容器环境发现(通过 Docker socket)
- 执行防御规避
- 部署 XMRig 加密货币矿机
- 进行数据收集
一个值得注意的细节:后续的 curl-pipe-shell 事件把收集到的输出编码后,通过 Kestra 自己的 key-value 存储接口保存——攻击者利用受害平台自身的存储机制做数据中转,减少了对独立文件工件的依赖,让传统文件型 IOC 检测更难奏效。
检测思路
| 检测点 | 特征 |
|---|---|
| 匿名 workflow 创建 | workflow 的创建者/来源为匿名或缺失;异常 src_ip 高频创建 |
| 新 SSH 公钥 | ~/.ssh/authorized_keys 出现未知密钥(持久化信号) |
| 矿机进程 | xmrig / kdevtmpfsi 等进程名;矿池外连 |
| 异常出站 | reverse shell 外连、矿池、已知 C2 |
| Kestra KV 存储 | key-value 中出现含编码输出的异常条目(curl-pipe-shell 痕迹) |
| 行为侧 | 应用进程产生 reverse shell;日志中 /configs 结尾的异常 200 响应 |
自检:我是否受影响
无需扫描器,用 curl 即可做防御性验证(探测认证是否可被绕过,不执行任何恶意负载):
# ① 基准:公共配置端点本就应匿名可读(正常)
curl -s -o /dev/null -w "%{http_code}\n" https://kestra.example.com/api/v1/configs
# 期望:200
# ② 关键探测:一个本应要求认证的业务端点,
# 在其路径末尾拼接 /configs 后是否仍返回 200?
# - 返回 200(未认证可访问业务数据/功能)→ 受影响,立即升级
# - 返回 401/403 → 认证过滤器正确拦截(已修复或未受影响)
curl -s -o /dev/null -w "%{http_code}\n" https://kestra.example.com/api/v1/flows/anything/configs判定标准:如果②返回 200 而同样的路径去掉 /configs 后缀返回 401,说明 endsWith 白名单绕过生效,实例处于易感状态。探测请仅对你有权测试的实例执行;对生产系统,最稳妥的做法是直接核对版本号并升级到 1.0.45 / 1.3.21 及以上。
加固与修复清单
P0——立即:
- 升级到修复版本:1.0.45 或 1.3.21(按你的维护线)。CISA BOD 26-04 给联邦机构的截止是 2026-09-05
- 假设已被攻破:任何公网可达且未启用认证的 Kestra 实例,按已失陷处理——排查 reverse shell、authorized_keys、矿机进程、异常 workflow
- 轮换密钥:Kestra 所在环境的所有凭据/密钥/数据库口令
P1——网络收敛:
- 管理接口下线公网:Kestra 的 API/UI 不应暴露在互联网;放 VPN/访问控制之后
- 审计 Docker socket 挂载:workflow 引擎容器默认不应挂载
/var/run/docker.sock——这是容器逃逸到宿主机的关键通道 - 最小化脚本插件:不需要的
plugin-script-*插件移除或限制来源
P2——纵深防御:
- 认证必须默认开启:Kestra 支持 Basic Auth / OIDC,确认未设置成匿名可访问
- workflow 审批流:生产环境开启 workflow 发布审批与来源校验
- 监控「匿名用户创建 workflow」类事件并告警
更大的图景:AI 基础设施成了攻击者的提款机
CVE-2026-49869 是 CISA 9 月 2 日一次性新增 7 个在野利用漏洞中的一员(同批还有 SonicWall SMA1000 两个、Sangoma Switchvox、JFrog Artifactory、Starlette、LiteLLM MCP 端点),其中 5 个联邦截止日为 9 月 5 日。把这些案例放在一起看,模式非常清晰:攻击者直奔 AI/自动化基础设施的凭证与算力——Kestra 这类 workflow 引擎、LiteLLM 这类 AI 网关、Artifactory 这类制品库,正在取代传统服务器成为新的「金库」。
对自托管 Kestra 的团队,这个漏洞的教训是双重的:一是白名单豁免必须精确匹配,永远不要用后缀匹配做安全边界;二是工作流引擎是代码执行平台,其认证缺失 = RCE,绝不能用「内网工具」的心态部署。
参考来源
- CISA KEV 目录(2026-09-02 更新)与 BOD 26-04
- NVD:CVE-2026-49869 记录;GitHub Advisory GHSA-5vc5-wxxq-3fjx
- 微软威胁情报报告(2026-08 末,促成 CISA 收录)
- DataHouse / CSIRTS / ThreatsEye 技术分析与缓解建议
- 相关阅读:CVE-2026-58138 Orkes Conductor GraalVM RCE、CVE-2026-82329 JFrog Artifactory 认证绕过、ServiceNow AI 平台三 CVSS 10.0

