
CVE-2026-34038: Coolify में प्रमाणित दूरस्थ कमांड इंजेक्शन
इस रिपॉजिटरी में CVE-2026-34038 का दस्तावेज़ीकरण और विश्लेषण शामिल है, जो Coolify में एक गंभीर कमांड इंजेक्शन भेद्यता है।
Coolify में एक प्रमाणित रिमोट कमांड इंजेक्शन भेद्यता (CWE-78) उन उपयोगकर्ताओं को अनुमति देती है जिनके पास एप्लिकेशन "लिखने" की अनुमति है, वे रिमोट कोड निष्पादन (RCE) प्राप्त कर सकते हैं और परिनियोजन लॉग के माध्यम से संवेदनशील पर्यावरण चर (जैसे, डेटाबेस क्रेडेंशियल्स, API कुंजियाँ) को एक्सफ़िल्ट्रेट कर सकते हैं, भले ही बिल्ड वातावरण डॉकर सॉकेट को अलग करता हो।
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:Hwrite (कॉन्फ़िगरेशन अपडेट करने के लिए) और read:sensitive (लॉग के माध्यम से एक्सफ़िल्ट्रेटेड डेटा पढ़ने के लिए)।deploy अनुमतियों के बिना टोकन को बिल्ड ट्रिगर करने की अनुमति देता है।dockerfile_location इंजेक्शनफ़ाइल: app/Jobs/ApplicationDeploymentJob.php
इनपुट में उचित शेल एस्केपिंग या इनपुट सत्यापन का अभाव है, जो ;, &&, और पाइप जैसे मेटाकैरेक्टर का उपयोग करके सीधे कमांड इंजेक्शन की अनुमति देता है।
// Lines 2976-2978: Traditional build with args
$build_command = $this->wrap_build_command_with_env_export(
"docker build {$this->buildTarget} --network {$this->destination->network} -f {$this->workdir}{$this->dockerfile_location} {$this->build_args} --progress plain -t $this->build_image_name {$this->workdir}"
);
// Lines 526: Also used in simple dockerfile deployment
executeInDocker($this->deployment_uuid, "echo '$dockerfile_base64' | base64 -d | tee {$this->workdir}{$this->dockerfile_location} > /dev/null"),
pre_deployment_command निष्पादनफ़ाइल: app/Jobs/ApplicationDeploymentJob.php (पंक्तियाँ 3882-3909)
जबकि बुनियादी एस्केपिंग की जाती है, फ़ंक्शन स्वाभाविक रूप से नेटिव शेल कमांड चलाता है, जिससे डेटा को सीधे बिल्ड लॉग में डंप करना संभव हो जाता है।
private function run_pre_deployment_command()
{
if (empty($this->application->pre_deployment_command)) {
return;
}
// ...
$cmd = "sh -c '".str_replace("'", "'\\''", $this->application->pre_deployment_command)."'";
$exec = "docker exec {$containerName} {$cmd}";
$this->execute_remote_command(
[
'command' => $exec,
'hidden' => true,
],
);
}
dockerfile_location इनपुट को स्वच्छ करें (ApplicationDeploymentJob.php में):सख्त रेगुलर एक्सप्रेशन का उपयोग करके इनपुट को मान्य करें और शेल तर्क को एस्केप करें:
if ($this->application->dockerfile_location) {
if (!preg_match('/^[a-zA-Z0-9._\-\/]+$/', $this->application->dockerfile_location)) {
throw new \RuntimeException("Invalid dockerfile_location: contains forbidden characters");
}
if (str_contains($this->application->dockerfile_location, '..')) {
throw new \RuntimeException("Invalid dockerfile_location: path traversal detected");
}
$this->dockerfile_location = escapeshellarg($this->application->dockerfile_location);
}
bootstrap/helpers/api.php):'dockerfile_location' => [
'string',
'nullable',
'regex:/^[a-zA-Z0-9._\-\/]+$/',
'max:255'
],
docker_compose_location जैसे समकक्ष फ़ील्ड का ऑडिट करें।