GitHub Advisoryadvisory · Go

GHSA-rhf7-wvw3-vjvm goshs has Cross-Origin Arbitrary File Write via Missing CSRF on PUT and Wildcard CORS

MEDIUM Published 2026-04-23 Modified 2026-05-04 Official page ↗
Aliases
CVE-2026-42091
Ecosystem
Go
Packages
github.com/patrickhener/goshs/v2, github.com/patrickhener/goshs
Severity
Moderate
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N
Weaknesses
CWE-352
Reviewed
2026-04-23

Affected packages

• Go github.com/patrickhener/goshs/v2: < 2.0.2 → fixed in 2.0.2 • Go github.com/patrickhener/goshs: <= 1.1.4 (no fix yet)

Description

Summary The PUT upload handler (`httpserver/updown.go`) lacks the CSRF token validation that was added to the POST upload handler during the GHSA-jrq5-hg6x-j6g3 fix. Combined with the unconditional `Access-Control-Allow-Origin: *` on the OPTIONS preflight handler (`httpserver/server.go`), any website can write arbitrary files to a goshs instance through the victim's browser — bypassing network isolation (e.g. localhost, internal network). Details Root Cause 1 — Missing CSRF on PUT (`httpserver/updown.go:19`) When GHSA-jrq5-hg6x-j6g3 was fixed (commit `e3c3d37`), `checkCSRF()` was added to the POST `upload()` function (line 78) but not to the PUT `put()` function directly above it in the same file. This means PUT requests are accepted without any CSRF token. ```go // POST — protected func (fs *FileServer) upload(w http.ResponseWriter, req *http.Request) { if !fs.checkCSRF(w, req) { return } // ... } // PUT — unprotected func (fs *FileServer) put(w http.ResponseWriter, req *http.Request) { // No checkCSRF call // ... } ``` Root Cause 2 — Wildcard CORS (`httpserver/server.go:126`) The OPTIONS handler unconditionally returns permissive CORS headers: ```go w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Access-Control-Allow-Methods", "POST, PUT, OPTIONS") w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization") ``` This allows any website's JavaScript to pass the browser's CORS preflight check and send PUT requests to the goshs server. PoC poc.zip Please extract the uploaded compressed file before proceeding 1. bash poc.sh Impact • Arbitrary file write to the goshs webroot from any website the victim visits • File overwrite — existing files can be silently replaced

Related

Alias · CVE (1)

  • CVE-2026-42091 goshs is a SimpleHTTPServer written in Go. vulnerability

Weakness · CWE (1)

  • CWE-352 Cross-Site Request Forgery weakness

References