GHSA-fgxm-5hvv-x4vh: charmbracelet/soft-serve HTTP responses disclose the existence and names of private repositories
Soft Serve answers Go’s ?go-get=1 requests by walking up the requested path until it finds a repository, then rendering that repository’s name and clone URL into a go-import meta tag. The walk checked that each candidate repository existed, but never that the caller could read it.
A request for a path inside a private repository, such as GET /secret/anything?go-get=1, therefore returned 200 naming secret and its clone URL, even though GET /secret?go-get=1 correctly returned 404. The same ?go-get=1 exception in the HTTP access middleware also let requests reach the LFS and dumb-HTTP routes with the repository existence check skipped, where two LFS handlers dereferenced the missing repository and panicked.
The same disclosure appears without ?go-get=1. The Git and LFS routes answered a repository the caller could not read differently depending on whether it existed: an anonymous clone of a private repository got 401 while a missing one got 404, and a signed-in user without access got the reverse pattern. Either way, one request confirms whether a guessed name is a private repository. This was found while fixing the go-get issue and is included here because it has the same impact and is fixed in the same release.
References
- github.com/advisories/GHSA-fgxm-5hvv-x4vh
- github.com/charmbracelet/soft-serve/commit/74e41543304d1e12fd54fc59e410bd428373dd34
- github.com/charmbracelet/soft-serve/commit/dc351aa0d824c8bef528c6924a7acdfb9f20c852
- github.com/charmbracelet/soft-serve/releases/tag/v0.12.3
- github.com/charmbracelet/soft-serve/security/advisories/GHSA-fgxm-5hvv-x4vh
Code Behaviors & Features
Detect and mitigate GHSA-fgxm-5hvv-x4vh with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Dependency Scanning using SBOM also detects vulnerabilities from proprietary advisories that this site does not include. Learn more about Dependency Scanning using SBOM →