{"id":"CVE-2026-63120","kind":"vulnerability","aliases":["CVE-2026-63120"],"related":[],"title":"pghoard: incomplete path traversal fix lets restores write files outside pgdata","description":"pghoard is a PostgreSQL backup daemon and restore tooling that stores backup data in cloud object stores. Prior to version 2.7.2, an incomplete path traversal fix in pghoard allows an attacker with write access to the backup object storage (such as S3, GCS, or Azure) to execute arbitrary file writes and directory creation outside the designated PostgreSQL data directory (pgdata). When a database administrator executes a restore operation (via pghoard_restore get-basebackup), a maliciously crafted delta backup manifest with path traversal sequences (e.g., ../../../../etc/cron.d/backdoor) will write arbitrary payloads to the host system. This issue has been patched in version 2.7.2.","summary":"pghoard, a PostgreSQL backup daemon, fails to fully block path traversal in backup manifests before version 2.7.2. An attacker who can write to the backup object store can make a database administrator's restore write arbitrary files on the host, such as cron jobs.","severity":"high","cvss":8.4,"epss":0.00487,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["azure-blob","backup","cloud-object-storage","gcs","package","pghoard","postgresql","s3"],"not_affected_if":["no-restore-from-shared-bucket","pghoard-2.7.2-or-later"],"how_to_check":"- Run `pghoard_restore --version` or `pip show pghoard` and compare against `2.7.2`.\n- Check whether restores are run from a host where pghoard is installed at a version below `2.7.2`.\n- Review who has write access to the backup bucket (S3, GCS, or Azure container) used by pghoard.","fix":"- Upgrade pghoard to `2.7.2` or later.\n- Restrict write access to the backup object storage to the pghoard backup role only.\n- Until upgraded, avoid running `pghoard_restore get-basebackup` against backups from storage that untrusted parties could write to.","status":"open","published_at":"2026-10-23T13:17:12+00:00","first_seen_at":"2026-10-23T21:57:33+00:00","triaged_at":"2026-10-25T03:01:40+00:00","updated_at":"2026-10-25T12:38:50+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-25T03:01:40Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade pghoard to `2.7.2` or later.\n- Restrict write access to the backup object storage to the pghoard backup role only.\n- Until upgraded, avoid running `pghoard_restore get-basebackup` against backups from storage that untrusted parties could write to.","reach":"internet","title":"pghoard: incomplete path traversal fix lets restores write files outside pgdata","impact":"high","summary":"pghoard, a PostgreSQL backup daemon, fails to fully block path traversal in backup manifests before version 2.7.2. An attacker who can write to the backup object store can make a database administrator's restore write arbitrary files on the host, such as cron jobs.","category":"package","nicknames":[],"who_cares":["postgresql","pghoard","backup","cloud-object-storage","s3","gcs","azure-blob"],"confidence":0.7,"needs_auth":"yes","worst_case":"Attacker writes arbitrary files on the restore host as the administrator","analyst_note":"Confirm the affected version range and whether the write-access precondition can be reached through a public bucket; check the NVD entry for the attack vector and CVSS detail.","how_to_check":"- Run `pghoard_restore --version` or `pip show pghoard` and compare against `2.7.2`.\n- Check whether restores are run from a host where pghoard is installed at a version below `2.7.2`.\n- Review who has write access to the backup bucket (S3, GCS, or Azure container) used by pghoard.","needs_analyst":true,"not_affected_if":["pghoard-2.7.2-or-later","no-restore-from-shared-bucket"],"who_is_affected":"Teams that run pghoard to back up PostgreSQL to cloud object storage and that restore from it with pghoard_restore get-basebackup on versions before 2.7.2. Exposure requires that an attacker can write to the backup bucket, so teams that restrict bucket write access to the backup process and do not use pghoard restore are less exposed.","user_interaction":"yes","needs_special_setup":"no","severity_if_unknown":"high"},"cost_usd":0.000705,"input_tokens":3456,"output_tokens":718,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-2026':13A,16A '-63120':14A,17A '/../../../etc/cron.d/backdoor':160C '2.7.2':47B,95C,176C 'access':108C 'administr':62B,138C 'allow':103C 'arbitrari':66B,122C,163C 'attack':49B,105C 'azur':19B,119C 'azure-blob':18B 'backup':21B,34B,43B,55B,79C,86C,111C,153C 'basebackup':148C 'blob':20B 'block':39B 'cloud':23B,89C 'cloud-object-storag':22B 'craft':151C 'creation':127C 'cron':73B 'cve':12A,15A 'daemon':35B,80C 'data':87C,132C 'databas':61B,137C 'delta':152C 'design':130C 'directori':126C,133C 'e.g':159C 'execut':121C,139C 'fail':36B 'file':9A,67B,123C 'fix':5A,100C 'fulli':38B 'gcs':26B,117C 'get':147C 'get-basebackup':146C 'host':70B,167C 'incomplet':2A,97C 'issu':170C 'job':74B 'let':6A 'make':59B 'malici':150C 'manifest':44B,154C 'object':24B,56B,90C,112C 'oper':142C 'outsid':10A,128C 'packag':27B 'patch':173C 'path':3A,40B,98C,156C 'payload':164C 'pgdata':11A,134C 'pghoard':1A,28B,31B,75C,102C,144C 'postgresql':29B,33B,78C,131C 'prior':92C 'restor':7A,64B,82C,141C,145C 's3':30B,116C 'sequenc':158C 'storag':25B,113C 'store':57B,85C,91C 'system':168C 'tool':83C 'travers':4A,41B,99C,157C 'version':46B,94C,175C 'via':143C 'write':8A,52B,65B,107C,124C,162C","nicknames":[],"mitigations":[],"who_affected":"Teams that run pghoard to back up PostgreSQL to cloud object storage and that restore from it with pghoard_restore get-basebackup on versions before 2.7.2. Exposure requires that an attacker can write to the backup bucket, so teams that restrict bucket write access to the backup process and do not use pghoard restore are less exposed.","tier":"B","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-23T13:17:12+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:H/UI:R/S:C/C:H/I:H/A:H","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-63120","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-63120","severity":null,"published_at":"2026-10-23T13:17:12+00:00","modified_at":"2026-10-23T19:57:42+00:00","first_seen_at":"2026-10-23T21:57:33+00:00","fetched_at":"2026-10-23T22:29:03+00:00","note":null},{"source":"epss","external_id":"CVE-2026-63120","url":"https://api.first.org/data/v1/epss?cve=CVE-2026-63120","severity":null,"published_at":null,"modified_at":null,"first_seen_at":"2026-10-25T12:38:50+00:00","fetched_at":"2026-10-25T12:38:50+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}