Skip to content

Build Not yet confirmed elsewhere1 publisher 2 min read Published

Naming a Kestra flow 'configs' slips past the auth filter to root RCE

CISA added Kestra's CVE-2026-49869 to its known-exploited catalog on September 2 at CVSS 10.0, after an auth-filter bug let unauthenticated callers run commands as root. Teams on affected Kestra OSS builds should upgrade to 1.0.45 or 1.3.21.

The Engineer · Build desk

How we use AI Send a correction

Illustration accompanying Naming a Kestra flow 'configs' slips past the auth filter to root RCE
Generated illustration
Six Kestra routes left reachable with no credentials Routes left reachable without credentials, the CVSS severity, and the days to remediate after the KEV listing.

Six routes were left reachable without credentials. The CVSS 3.1 score is 10.0, rated Critical. The remediation deadline fell three days after the KEV listing.

Six Kestra routes left reachable with no credentials
FigureValueNoteClaim
Routes reachable with no credentials6 routes11
CVSS 3.1 score, Critical10 of 102
Days, listing to deadline3 days23

What happened

  • Kestra puts the caller's chosen flow name straight into the request URL, so a flow named 'configs' makes its routes end in /configs and the filter treats them as the public settings read.
  • The suffix match left six routes reachable without credentials, including ones that create and run flows, write the key-value store, and delete flows, dashboards and audit logs.
  • CISA gave federal agencies just three days to remediate, setting a September 5, 2026 deadline.

Why it matters

  • exposure No credential appears anywhere in the chain, so any Kestra an attacker can reach on the network is exploitable, and firewalling the port is the real control.
  • constraint Shell, Python and Node plugins are on by default, so a stock install is exploitable with no special configuration on the target.
  • precedent Exploitation is already confirmed in the wild, so an unpatched instance reachable from the network should be treated as already breached.
  • decision Patching forces a release-line choice, since the 1.0 branch is fixed in 1.0.45 and the 1.1-to-1.3 branch in 1.3.21.

Kestra, an open-source workflow orchestration platform, needs exactly one endpoint to answer before anyone logs in [5]. GET /api/v1/configs returns base settings a client reads first, including the auth mode and feature flags, so AuthenticationFilter makes it an exception and lets it through without credentials [6].

The exemption was written as a suffix test. Line 49 of AuthenticationFilter.java sets isConfigEndpoint = request.getPath().endsWith("/configs"), and when that check passes the filter calls chain.proceed and skips authentication [7]. The intended question is whether the request is the config endpoint. The code asks whether the path ends in /configs, and endsWith reads only the tail of a string; it has no opinion about anything in front of it [8].

The two questions diverge because Kestra builds the caller's own input into the URL. A flow route is /flows/{namespace}/{flowId}, where flowId is whatever the caller named it [9]. Name a flow configs and almost every request for that flow ends in /configs, so the filter cannot tell it apart from the settings read [10].

The same tail unlocks more than flow creation. The write-up counts six routes reachable this way [11], and flow creation plus flow execution are enough on their own [12].

The chain is three requests. A PUT to /api/v1/main/flows/tutorial/configs creates a flow whose single task is a shell command, and the server answers 200 [13]. A POST to /api/v1/main/executions/tutorial/configs runs it [14]. A GET to /api/v1/main/logs/search reads the output back [15]. None of the three sends an Authorization header [16].

The command runs as root because of two defaults. Kestra enables shell, Python and Node script plugins out of the box [17], and the worker runs inside its container as uid 0 [18]. So the planted shell task executes with root privileges, and the logs print uid=0(root) and the contents of /etc/passwd [19]. The result is root-level remote code execution inside the worker container, with no credentials anywhere in the exchange [20].

Affected builds are those below 1.0.45, and 1.1.0 up to but not including 1.3.21 [21]; the last vulnerable release on the 1.3 line is 1.3.20 [22].

What to watch

  • Whether Kestra ships a configuration-level mitigation for operators who cannot upgrade right away.
  • Reports of mass scanning for flow paths ending in /configs against internet-facing Kestra instances.
  • Whether downstream platforms that bundle Kestra inherit the same unauthenticated route.

Clarity's read

What the record supports and how the coverage leans. The claims behind it follow.

Reality

Evidence45
Adoption55
Hype gap+10
Incentives25
Confidence50
Why these scores

Claim ledger

Ranked by verification strength, evidence, and original report placement.

  1. [1]

    On September 2, 2026, CISA added CVE-2026-49869 to its Known Exploited Vulnerabilities (KEV) catalog.

    Reported SupportedView cited source
  2. [2]

    The vulnerability's CVSS 3.1 score is 10.0, rated Critical.

    Reported SupportedView cited source
  3. [3]

    A KEV listing means exploitation of the flaw has been confirmed in the wild.

    Reported SupportedView cited source

Get this ledger inside ChatGPT. Ask about any of our stories and the answer brings its figure, each claim’s verdict and the sources. Free, no account.

Add to ChatGPTAdd to Claude

Sources

1 independent publisher whose own reporting we read for this story.

  1. dev.to

    1 article · October 14, 2026

    If It Ends the Same, Let It Through" — The Comparison Operator That Broke Kestra (CVE-2026-49869)

Share your take

Let Clarity write the post for you.

Signed-in readers get a short post drafted on this story in the register they choose — narrative, analytical, or a direct position — editable to the last word before it goes anywhere. The share buttons at the top of this story work without an account.

Topics and entities

Follow any of these and your For You feed starts watching them — no settings page required.

Loading related stories