{"id":"GHSA-wg2q-39h6-66x9","revision":"fbb399186d944765bf74daa1455e1248","records":[{"revision":"fbb399186d944765bf74daa1455e1248","observedAt":"2026-10-24T13:19:41.952+00:00","statement":{"source":"osv","id":"GHSA-wg2q-39h6-66x9","aliases":["CVE-2026-66063","GO-2026-6137"],"title":"goshs has a Path Traversal issue","description":"## Summary\n\nThe multipart upload filename fix splits on the path separator but never rejects dot-dot, allowing a write outside the served tree.\n\n## Finding (Medium): upload filename escapes the served tree (residual of CVE-2026-35393)\n\nThe multipart filename fix (updown.go lines 135-136) splits on the path separator but never rejects \"..\". Uploading with filename=\"..\" results in os.Create against the parent of the upload folder with a trailing marker character, outside the served tree, and the subsequent failed rename leaves that file behind. Verified: a file containing ESCAPED_WRITE_PROOF was written outside the webroot, unauthenticated, with the default configuration. Not claimed: a Windows-specific variant (Go's Part.FileName() already applies filepath.Base).\n\n## Suggested fixes\n\n1. Reject any upload filename that is \"..\", is empty after sanitisation, or resolves outside the upload folder; validate the final resolved destination rather than only transforming the input.\n\n## Tooling\n\nAI assistance was used while investigating. The finding was reproduced against a running server on loopback.","state":0,"publishedAt":"2026-07-28T22:08:53+00:00","modifiedAt":"2026-08-18T15:10:58.0264369+00:00","affected":[{"ecosystem":"Go","name":"goshs.de/goshs/v2","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"2.1.5-0.20260727065949-f3ef599e4091"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"github.com/patrickhener/goshs/v2","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"2.1.5-0.20260727065949-f3ef599e4091"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"goshs.de/goshs","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"last_affected","version":"1.1.4"}]}],"versions":[],"rawVersionEvidence":null},{"ecosystem":"Go","name":"github.com/patrickhener/goshs","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"last_affected","version":"1.1.4"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V3","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"MODERATE"}],"references":["https://github.com/goshs-labs/goshs/security/advisories/GHSA-wg2q-39h6-66x9","https://github.com/goshs-labs/goshs/commit/f3ef599e409151d1380866e47de8b1afb0bb54fa","https://github.com/goshs-labs/goshs"],"sourceUrl":"https://github.com/advisories/GHSA-wg2q-39h6-66x9","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-wg2q-39h6-66x9","identifiers":["GHSA-wg2q-39h6-66x9","CVE-2026-66063","GO-2026-6137"]},"retained":false,"historicalAffected":[]}],"coverage":[]}