# Charmbracelet soft-serve race condition in SetPrivate leaves private repositories readable

Source: https://junglewise.ai/threats/go-2026-6891-charmbracelet-soft-serve-race-in-setprivate-leaves-a-cabb0105  
Publisher: Junglewise Threat Intelligence, https://junglewise.ai/threats  
Published: 2026-11-05. Updated: 2026-11-07  
License: CC BY 4.0 with a link back

Severity: info · Published 2026-11-05

Soft Serve is a Git server that allows administrators to control repository access. Due to a race condition in how it caches repository visibility settings, an attacker can exploit the brief window when an operator marks a repository private to permanently read it—including all future commits—until the server restarts. The attacker needs only anonymous read access, no account, and no special timing knowledge.

Technologies: [Charmbracelet Soft-Serve](https://junglewise.ai/threats/technologies/charmbracelet-soft-serve), [github.com/charmbracelet/soft-serve (Go)](https://junglewise.ai/threats/technologies/github-com-charmbracelet-soft-serve). Vendors: [Charmbracelet](https://junglewise.ai/threats/vendors/charmbracelet), [Go](https://junglewise.ai/threats/vendors/go).

## Quick answers

**Is This vulnerability exploited in the wild?** No. Junglewise Threat Intelligence has no report of This vulnerability being exploited in the wild.

**How severe is This vulnerability?** Informational severity, published 5 November 2026.

**Which products and versions are affected?** Charmbracelet Soft-Serve 0.6.0 through 0.12.2; github.com/charmbracelet/soft-serve (Go) SEMVER:introduced=0.6.0,fixed=0.12.3.

**Is there a fix for This vulnerability?** Yes. github.com/charmbracelet/soft-serve (Go): upgrade to 0.12.3 or later. Until then: Restart the server to clear stale cached records and restore correct access checks. Operators unable to upgrade immediately should create repositories as private from the start rather than converting public ones, and avoid changing visibility while the server is serving traffic. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.

**How is This vulnerability attacked?** It is attacked over the network, in a hosted service.

**Am I affected?** Check whether you run Charmbracelet Soft-Serve or github.com/charmbracelet/soft-serve (Go) at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

## How to fix

- github.com/charmbracelet/soft-serve (Go): upgrade to 0.12.3 or later

  ```sh
  go get github.com/charmbracelet/soft-serve@v0.12.3
  ```


Restart the server to clear stale cached records and restore correct access checks. Operators unable to upgrade immediately should create repositories as private from the start rather than converting public ones, and avoid changing visibility while the server is serving traffic.

## Technical details

The vulnerability is a race condition in the SetPrivate function combined with an unbounded in-memory cache of repository metadata. The cache was cleared before the database transaction that updates visibility, allowing a concurrent request between the clear and commit to read the stale cached value and re-populate the cache with outdated information. This affects single and multi-process deployments; the latter experience persistent stale caches across all processes. The fix in v0.12.3 removes the cache entirely, ensuring access checks always read the current database state.

## Affected products

- Charmbracelet soft-serve 0.6.0 through 0.12.2

## Identifiers

- GHSA-f3fj-9625-rv3m
- GO-2026-6891

## Timeline

- 2026-10-05: disclosed
- 2026-10-26: patched: v0.12.3 released

## References

- [https://github.com/charmbracelet/soft-serve/security/advisories/GHSA-f3fj-9625-rv3m](https://github.com/charmbracelet/soft-serve/security/advisories/GHSA-f3fj-9625-rv3m)
- [https://github.com/charmbracelet/soft-serve/commit/0a4e6f0b7e063927c7128756e1c1b3db871edabf](https://github.com/charmbracelet/soft-serve/commit/0a4e6f0b7e063927c7128756e1c1b3db871edabf)

## Related threats

- [charmbracelet soft-serve information disclosure of private repository names](https://junglewise.ai/threats/go-2026-6892-charmbracelet-soft-serve-http-responses-disclose-the-a9c42c70)
- [charmbracelet soft-serve race condition in SetPrivate](https://junglewise.ai/threats/charmbracelet-soft-serve-race-in-setprivate-leaves-a-private-repository-ff0fdf2d)
- [charmbracelet soft-serve repository name disclosure via HTTP](https://junglewise.ai/threats/charmbracelet-soft-serve-http-responses-disclose-the-existence-and-d0036784)
- [In Soft Serve, an authenticated repo import can clone server-local private repositories](https://junglewise.ai/threats/cve-2026-33353-in-soft-serve-an-authenticated-repo-import-can-clone-server-local)
- [GO-2026-4634 - soft-serve vulnerable to SSRF via unvalidated LFS endpoint in repo import in github.com/charmbracelet/soft-serve](https://junglewise.ai/threats/cve-2026-30832-soft-serve-vulnerable-to-ssrf-via-unvalidated-lfs-endpoint-in)
