Announcement

👇Official Account👇

Welcome to join the group & private message

Article first/tail QR code

Skip to content

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。

漏洞档案

CVECVE-2026-49869
CVSS10.0(Critical)
类型认证绕过 → 任意 workflow 创建执行 → OS 命令注入(RCE)
产品Kestra OSS(事件驱动开源编排/工作流平台)
受影响版本< 1.0.45 与 < 1.3.21(两条维护线)
修复版本1.0.45、1.3.21
公告GHSA-5vc5-wxxq-3fjx
CISA KEV2026-09-02 收录,BOD 26-04 截止 2026-09-05
在野利用是(微软报告,2026 年 6 月底)
MITRE ATT&CKT1190(利用公网应用入口)/ T1059(命令与脚本执行)

根因拆解:后缀匹配白名单的典型陷阱

有缺陷的代码逻辑

Kestra 的 AuthenticationFilter 需要把公开的配置端点(如 /api/v1/configs)从 Basic Auth 中豁免。问题代码的核心是:

java
// 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 等脚本插件

于是攻击链非常短:

text
匿名攻击者
  │ ① 构造 /xxx/configs 结尾路径绕过 AuthenticationFilter(✅ 认证绕过)

  │ ② 调用 workflow API 创建一个恶意 workflow,
  │    任务类型 = io.kestra.plugin.scripts.shell.Commands

  │ ③ 命令内容 = 攻击者想要的任意 shell(reverse shell / 下载矿机 / 窃取数据)

  │ ④ 触发 workflow 执行 → worker 容器内以 root 运行攻击者命令(✅ RCE)

容器内 root → Docker socket(若挂载)→ 宿主机 / 横向移动

workflow 引擎 + 默认脚本插件 + 认证绕过,三者叠加就是一条无需任何凭据的 RCE 高速公路。微软将利用手法归纳为四条影响路径:

  1. Shell 执行:通过 workflow 引擎直接执行命令
  2. 容器环境暴露:访问 Docker socket 进行容器环境发现
  3. 主机资源劫持:部署加密货币矿机(XMRig)
  4. 数据收集:通过 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 即可做防御性验证(探测认证是否可被绕过,不执行任何恶意负载):

bash
# ① 基准:公共配置端点本就应匿名可读(正常)
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. 升级到修复版本:1.0.45 或 1.3.21(按你的维护线)。CISA BOD 26-04 给联邦机构的截止是 2026-09-05
  2. 假设已被攻破:任何公网可达且未启用认证的 Kestra 实例,按已失陷处理——排查 reverse shell、authorized_keys、矿机进程、异常 workflow
  3. 轮换密钥:Kestra 所在环境的所有凭据/密钥/数据库口令

P1——网络收敛:

  1. 管理接口下线公网:Kestra 的 API/UI 不应暴露在互联网;放 VPN/访问控制之后
  2. 审计 Docker socket 挂载:workflow 引擎容器默认不应挂载 /var/run/docker.sock——这是容器逃逸到宿主机的关键通道
  3. 最小化脚本插件:不需要的 plugin-script-* 插件移除或限制来源

P2——纵深防御:

  1. 认证必须默认开启:Kestra 支持 Basic Auth / OIDC,确认未设置成匿名可访问
  2. workflow 审批流:生产环境开启 workflow 发布审批与来源校验
  3. 监控「匿名用户创建 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,绝不能用「内网工具」的心态部署

参考来源

上次更新于: