Skip to main content

goshs CVE-2026-66064

| EUVDEUVD-2026-50083 MEDIUM
Improper Resolution of Path Equivalence (CWE-41)
2026-07-28 GitHub_M GHSA-964w-f6gj-5236
5.3
CVSS 3.1 · Vendor: GitHub_M
Share

Severity by source

Vendor (GitHub_M) PRIMARY
5.3 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
vuln.today AI
5.3 MEDIUM

Attack vector is network, no privileges, no user interaction; impact only low confidentiality.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
SUSE
MEDIUM
qualitative

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
None
Availability
None

Lifecycle Timeline

3
Patch available
Jul 28, 2026 - 23:02 EUVD
Source Code Evidence Fetched
Jul 28, 2026 - 22:51 vuln.today
Analysis Generated
Jul 28, 2026 - 22:51 vuln.today

DescriptionCVE.org

goshs is a feature-rich single-binary file server for red teamers and developers. Prior to 2.1.5, the httpserver/handler.go sendFile handler opened files using a cleaned path but derived the authorization filename from raw req.URL.Path, so a trailing slash could bypass .goshs ACL-file protection and block-list checks. This issue is fixed in version 2.1.5.

AnalysisAI

A path equivalence bypass in goshs lets attackers retrieve blocked files and the ACL configuration file by appending a trailing slash to the request path. The sendFile handler derives the authorization-check filename from the raw URL while opening the file from the cleaned path, so a trailing slash yields an empty string for the check and defeats the block list and the rule that hides the .goshs file. No public exploit has been identified, but a proof-of-concept test is included in the patch; the vulnerability is not currently in CISA's Known Exploited Vulnerabilities catalog.

Technical ContextAI

The vulnerability lies in the sendFile handler within httpserver/handler.go. The Go standard library's filepath.Clean is correctly applied when opening the file, but the filename used for access-control decisions (block list and ACL-file protection) is taken from the raw req.URL.Path by splitting on '/' and taking the last segment. Because filepath.Clean strips trailing slashes, a request like '/blocked/secret.txt/' opens the real file but produces an empty derived name. The CWE-41 classification (Improper Resolution of Path Equivalence) captures this discrepancy between the path used for authorization and the path used for file access. CPE data shows the affected product is goshs-labs:goshs, with the fix incorporated in version 2.1.5.

RemediationAI

Upgrade to goshs version 2.1.5, which contains the fix. The commit f3ef599e409151d1380866e47de8b1afb0bb54fa modifies sendFile to derive the served filename from the opened file's Stat() call rather than from the raw request path, eliminating the inconsistency. For servers on the v1 branch (1.1.4 and earlier) no patch is available; users should upgrade to the v2 line and then to 2.1.5 as the vendor no longer supports v1. As a workaround, if authentication is available, protect sensitive directories with authentication rather than relying solely on the block list, as authentication is not bypassed by this vulnerability. Another compensating control is to use a reverse proxy that strips trailing slashes before forwarding requests to goshs, though this may alter expected behavior for directory listing.

Vendor StatusVendor

SUSE

Severity: Moderate

Share

CVE-2026-66064 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy