VYPR
Critical severityNVD Advisory· Published Mar 7, 2026· Updated Mar 9, 2026

Soft Serve: SSRF via unvalidated LFS endpoint in repo import

CVE-2026-30832

Description

Soft Serve is a self-hostable Git server for the command line. From version 0.6.0 to before version 0.11.4, an authenticated SSH user can force the server to make HTTP requests to internal/private IP addresses by running repo import with a crafted --lfs-endpoint URL. The initial batch request is blind (the response from a metadata endpoint won't parse as valid LFS JSON), but an attacker hosting a fake LFS server can chain this into full read access to internal services by returning download URLs that point at internal targets. This issue has been patched in version 0.11.4.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
github.com/charmbracelet/soft-serveGo
>= 0.6.0, < 0.11.40.11.4

Affected products

1

Patches

1
3ef660098ab3

fix(ssrf): handle DNS resolution in SSRF protection

https://github.com/charmbracelet/soft-serveAyman BagabasMar 5, 2026via ghsa
1 file changed · +8 1
  • pkg/ssrf/ssrf.go+8 1 modified
    @@ -39,7 +39,14 @@ func NewSecureClient() *http.Client {
     
     				ip := net.ParseIP(host)
     				if ip == nil {
    -					return nil, fmt.Errorf("unexpected non-IP address in dial: %s", host)
    +					ips, err := net.LookupIP(host) //nolint
    +					if err != nil {
    +						return nil, fmt.Errorf("DNS resolution failed for host %s: %v", host, err)
    +					}
    +					if len(ips) == 0 {
    +						return nil, fmt.Errorf("no IP addresses found for host: %s", host)
    +					}
    +					ip = ips[0] // Use the first resolved IP address
     				}
     				if isPrivateOrInternal(ip) {
     					return nil, fmt.Errorf("%w", ErrPrivateIP)
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

5

News mentions

0

No linked articles in our index yet.