All vulnerabilities

Servers and applications

GHSA-2gq3-9q77-8hgv

Authenticated Command Injection via unescaped backup.prefix in database/service backup commands leads to RCE as root

Severity
Critical 9.9
Published
12 Nov 2026
Last changed
12 Nov 2026
Added to UpHeron
12 Nov 2026
Fixed in
0.31.1
Weakness
OS command injection (CWE-78)
Attack
Over the network · Needs a user account · No user action needed
Attacker can
Read data · Change data · Take it down
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Sources
Project advisories (GitHub)

Description

The prefix field of a Backup (used to namespace backup files within an S3-compatible destination) is validated only as a non-empty string, with no restriction on shell metacharacters, and is interpolated directly into the rclone command line used to upload backups and to prune old ones. The value sits inside a double-quoted rclone argument (or, in the retention-cleanup path, with no quoting at all), so an authenticated organization member with permission to configure backups for a service can inject arbitrary shell commands that execute as root on the Dokploy host (or configured remote server) as soon as a backup runs - manually or on its schedule.

Field definition: packages/server/src/db/schema/backups.ts - prefix: text("prefix").notNull(), validated as z.string().min(1) with no character restriction (unlike branch-name fields elsewhere in the schema, which do carry a restrictive regex).

From Dokploy/dokploy's security advisory. Shortened; the full text is there.

Affected software

SoftwareAffected versions
DokployServers and applications · github:dokploy/dokploy
  • Every version before 0.31.1

References