{"id":"CVE-2026-129433","kind":"vulnerability","aliases":["CVE-2026-129433"],"related":[],"title":"Dokploy: stored serviceName input runs shell commands as root on backups","description":"Dokploy before 0.31.1 contains an OS command injection vulnerability in getComposeContainerCommand() that allows authenticated organization members to execute shell commands via the serviceName parameter. Attackers can store serviceName values with shell metacharacters through backup.create or backup.update tRPC procedures, executing commands as root when scheduled backups run and taking over the host via the mounted Docker socket.","summary":"Dokploy, a self-hosted deployment platform, passes a stored serviceName value to a shell in getComposeContainerCommand(), so shell metacharacters run as commands. An authenticated organization member can trigger this through backup settings, and scheduled backups execute the commands as root, which can take over the host through the mounted Docker socket.","severity":"critical","cvss":9.9,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["backups","docker","dokploy","other","self-hosted"],"not_affected_if":["managed-hosting","version-0.31.1-or-later"],"how_to_check":"- Check the installed Dokploy version: `dokploy --version` or the image tag in your compose file, and confirm whether it is below `0.31.1`.\n- Review who holds organization member accounts in your Dokploy instance.\n- Look for backup schedules and stored backup serviceName values containing shell characters such as `;`, `|`, `$(`, or backticks.","fix":"- Dokploy: move to `0.31.1` or later.","status":"open","published_at":"2026-11-14T13:17:22+00:00","first_seen_at":"2026-11-14T13:28:10+00:00","triaged_at":"2026-11-14T13:28:57+00:00","updated_at":"2026-11-14T13:28:57+00:00","category":"other","confidence":0.8,"triage":{"at":"2026-11-14T13:28:57Z","model":"claude-haiku-5-5","output":{"fix":"- Dokploy: move to `0.31.1` or later.","reach":"network","title":"Dokploy: stored serviceName input runs shell commands as root on backups","impact":"high","summary":"Dokploy, a self-hosted deployment platform, passes a stored serviceName value to a shell in getComposeContainerCommand(), so shell metacharacters run as commands. An authenticated organization member can trigger this through backup settings, and scheduled backups execute the commands as root, which can take over the host through the mounted Docker socket.","audience":"businesses","category":"other","nicknames":[],"who_cares":["dokploy","self-hosted","docker","backups"],"confidence":0.8,"fix_status":"available","needs_auth":"yes","worst_case":"Commands run as root on the host, giving full server takeover.","analyst_note":"","how_to_check":"- Check the installed Dokploy version: `dokploy --version` or the image tag in your compose file, and confirm whether it is below `0.31.1`.\n- Review who holds organization member accounts in your Dokploy instance.\n- Look for backup schedules and stored backup serviceName values containing shell characters such as `;`, `|`, `$(`, or backticks.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["version-0.31.1-or-later","managed-hosting"],"who_is_affected":"Teams that self-host Dokploy below 0.31.1, where organization members can edit backup settings. Exposure depends on backup schedules running and the Docker socket being mounted into the Dokploy container, which is the default setup for that platform. Instances on 0.31.1 or later, or where only trusted administrators can reach backup settings, have a much smaller exposure.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"unknown","severity_if_unknown":"critical"},"cost_usd":0.000777,"input_tokens":4657,"output_tokens":623,"severity_before":"critical"},"analyst_status":null,"analyst_note":null,"search":"'-129433':14A,17A '-2026':13A,16A '0.31.1':79C 'allow':89C 'attack':101C 'authent':49B,90C 'backup':11A,18B,56B,60B,121C 'backup.create':110C 'backup.update':112C 'command':7A,47B,63B,83C,96C,116C 'contain':80C 'cve':12A,15A 'deploy':30B 'docker':19B,75B,131C 'dokploy':1A,20B,25B,77C 'execut':61B,94C,115C 'getcomposecontainercommand':41B,87C 'host':24B,29B,71B,127C 'inject':84C 'input':4A 'member':51B,92C 'metacharact':44B,108C 'mount':74B,130C 'organ':50B,91C 'os':82C 'paramet':100C 'pass':32B 'platform':31B 'procedur':114C 'root':9A,65B,118C 'run':5A,45B,122C 'schedul':59B,120C 'self':23B,28B 'self-host':22B,27B 'servicenam':3A,35B,99C,104C 'set':57B 'shell':6A,39B,43B,95C,107C 'socket':76B,132C 'store':2A,34B,103C 'take':68B,124C 'trigger':53B 'trpc':113C 'valu':36B,105C 'via':97C,128C 'vulner':85C","nicknames":[],"mitigations":[],"who_affected":"Teams that self-host Dokploy below 0.31.1, where organization members can edit backup settings. Exposure depends on backup schedules running and the Docker socket being mounted into the Dokploy container, which is the default setup for that platform. Instances on 0.31.1 or later, or where only trusted administrators can reach backup settings, have a much smaller exposure.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["backups","critical","docker","dokploy","other","selfhosted"],"campaign_type":null,"search_a":"'-129433':14A,17A '-2026':13A,16A 'backup':11A 'command':7A 'cve':12A,15A 'dokploy':1A 'input':4A 'root':9A 'run':5A 'servicenam':3A 'shell':6A 'store':2A","search_b":"'authent':49B 'backup':18B,56B,60B 'command':47B,63B 'deploy':30B 'docker':19B,75B 'dokploy':20B,25B 'execut':61B 'getcomposecontainercommand':41B 'host':24B,29B,71B 'member':51B 'metacharact':44B 'mount':74B 'organ':50B 'pass':32B 'platform':31B 'root':65B 'run':45B 'schedul':59B 'self':23B,28B 'self-host':22B,27B 'servicenam':35B 'set':57B 'shell':39B,43B 'socket':76B 'store':34B 'take':68B 'trigger':53B 'valu':36B","search_c":"'0.31.1':79C 'allow':89C 'attack':101C 'authent':90C 'backup':121C 'backup.create':110C 'backup.update':112C 'command':83C,96C,116C 'contain':80C 'docker':131C 'dokploy':77C 'execut':94C,115C 'getcomposecontainercommand':87C 'host':127C 'inject':84C 'member':92C 'metacharact':108C 'mount':130C 'organ':91C 'os':82C 'paramet':100C 'procedur':114C 'root':118C 'run':122C 'schedul':120C 'servicenam':99C,104C 'shell':95C,107C 'socket':132C 'store':103C 'take':124C 'trpc':113C 'valu':105C 'via':97C,128C 'vulner':85C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-12T08:16:28+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"disclosure@vulncheck.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-129433","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-129433","severity":null,"published_at":"2026-11-14T13:17:22+00:00","modified_at":"2026-11-14T13:17:22+00:00","first_seen_at":"2026-11-14T13:28:10+00:00","fetched_at":"2026-11-14T13:28:10+00:00","note":null}],"documents":[{"id":155850,"url":"https://github.com/Dokploy/dokploy/commit/b24006e16e95a10ce3daf739d06ac783e5c70ba0","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":140888,"url":"https://github.com/Dokploy/dokploy/releases/tag/v0.31.1","title":"Release notes: github.com","kind":"release","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Release notes: github.com"},{"id":155852,"url":"https://github.com/Dokploy/dokploy/security/advisories/GHSA-j329-jw7j-rxjm","title":"Vendor advisory: github.com","kind":"vendor","source":"nvd","publisher":"vendor","text":null,"published_at":"2026-11-12T08:16:28+00:00","relation":"advisory","confidence":null,"note":"Vendor advisory: github.com"},{"id":155853,"url":"https://www.vulncheck.com/advisories/dokploy-before-0.31.1-os-command-injection-via-compose-backup-servicename","title":"Third-party advisory: www.vulncheck.com","kind":"advisory","source":"nvd","publisher":"research","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Third-party advisory: www.vulncheck.com"}],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}