CVE-2026-40189

criticalPriorität · verfolgen · 39OT-Risiko · erhöhtEPSS 0.006 · 51. PerzentilEUUS
grimoire priorityP2 · Scheduled
Exploitable?
—
no known exploitation
Likely / severe?
0.64% (51st) EPSS
CVSS 9.8 · critical
Is it mine?
5 products
Prüfe deine Angriffsfläche
Who says so?
4 sources
cnnvd · enisa_euvd · osv · nvd

EPSS · bewertet 2026-10-28

goshs is a SimpleHTTPServer written in Go. Prior to 2.0.0-beta.4, goshs enforces the documented per-folder .goshs ACL/basic-auth mechanism for directory listings and file reads, but it does not enforce the same authorization checks for state-changing routes. An unauthenticated attacker can upload files with PUT, upload files with multipart POST /upload, create directories with ?mkdir, and delete files with ?delete inside a .goshs-protected directory. By deleting the .goshs file itself, the attacker can remove the folder's auth policy and then access previously protected content without credentials. This results in a critical authorization bypass affecting confidentiality, integrity, and availability. This vulnerability is fixed in 2.0.0-beta.4.

01

cvss

Technischer Schweregrad, 0–10. Eine Zeile je Quelle.

9.8
010

Basiswert 0–10 · höher = schwerwiegender · Vektor überfahren zum Auflösen⚠ Quellen uneinig · high–critical · 8.1–9.8

v3.19.8criticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Hprimary · NVD / NIST USAusnutzbarkeit 3.9 · Auswirkung 5.9
v3.19.8criticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:Hsecondary · OSV
v4.09.3criticalCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:Nsecondary · ENISA EU
v4.09.3criticalCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:Xsecondary · security-advisories@github.com
v4.08.1highCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:U/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:Xsecondary · CVSS-BT (t0sche)
02

SSVC

Eine Handlungsentscheidung — aus Ausnutzung und Auswirkung.

Exploitation: poc · Automatable: yes · Technical Impact: totalcoordinatorcisa_ssvcUS
03

schwächen

Die CWE-Schwächeklassen, zu denen dies gehört.

04

betroffene Produkte (5)

Betroffene Produkte und Versionsbereiche.

05

Advisories (2)

Hersteller- und Ökosystem-Meldungen dazu.

  • GHSA-wvhv-qcqf-f3cxgoshs has a file-based ACL authorization bypass in goshs state-changing routes2026-04-10ghsa · osvUS

    ### Summary goshs enforces the documented per-folder `.goshs` ACL/basic-auth mechanism for directory listings and file reads, but it does not enforce the same authorization checks for state-changing routes. An unauthenticated attacker can upload files with `PUT`, upload files with multipart `POST /upload`, create directories with `?mkdir`, and delete files with `?delete` inside a `.goshs`-protected directory. By deleting the `.goshs` file itself, the attacker can remove the folder's auth policy and then access previously protected content without credentials. This results in a critical authorization bypass affecting confidentiality, integrity, and availability. ### Details The project README explicitly documents file-based ACLs as a security feature: - `README.md:59` - "You can place a .goshs in any folder to apply custom ACLs" - `README.md:61` - "You can apply custom basic auth per folder" The read/list path correctly enforces `.goshs`: - `httpserver/filebased.go:10-49` loads `.goshs` - `httpserver/handler.go:68-91` calls `findSpecialFile()` for directories - `httpserver/handler.go:94-101` calls `findSpecialFile()` for files - `httpserver/handler.go:285-305` applies custom auth - `httpserver/handler.go:545-565` enforces folder auth during directory rendering - `httpserver/handler.go:590-630` enforces file auth and blocked entries during file serving However, the state-changing routes bypass this logic entirely: - `httpserver/server.go:94-100` routes multipart `POST /.../upload` directly to `upload()` - `httpserver/server.go:105-109` routes `PUT` directly to `put()` - `httpserver/handler.go:119-123` dispatches `?mkdir` directly to `handleMkdir()` - `httpserver/handler.go:181-187` dispatches `?delete` directly to `deleteFile()` - `httpserver/updown.go:18-60` writes files for `PUT` without checking `.goshs` - `httpserver/updown.go:63-165` writes files for multipart upload without checking `.goshs` - `httpserver/handler.go:679-698` deletes files with `os.RemoveAll()` without checking `.goshs` - `httpserver/handler.go:901-937` creates directories with `os.MkdirAll()` without checking `.goshs` This is not a path traversal issue. The path remains inside the configured root after sanitization. The vulnerability is that authorization is applied inconsistently: reads are protected, but writes and deletes are not. Because `.goshs` itself can be deleted through the unauthenticated delete route, the attacker can escalate the impact from unauthorized modification to full removal of the folder's auth barrier. ### PoC Environment used for verification: - Repository/module: `github.com/patrickhener/goshs` - Verified vulnerable tag: `v2.0.0-beta.3` - Also present in the `v1.1.4` line based on code inspection - Local host: `127.0.0.1:18091` Build and setup: ```bash cd '/Users/r1zzg0d/Documents/CVE hunting/targets/goshs_beta3' go build -o /tmp/goshs_acl_verify/goshs ./ rm -rf /tmp/goshs_acl_verify/root mkdir -p /tmp/goshs_acl_verify/root/protected cp integration/keepFiles/goshsACLAuth /tmp/goshs_acl_verify/root/protected/.goshs printf 'top secret\n' > /tmp/goshs_acl_verify/root/protected/secret.txt /tmp/goshs_acl_verify/goshs -d /tmp/goshs_acl_verify/root -p 18091 ``` In a second terminal: ```bash # The protected folder initially requires auth curl -s -o /dev/null -w '%{http_code}\n' 'http://127.0.0.1:18091/protected/' # Unauthenticated write into the protected folder succeeds curl -s -o /dev/null -w '%{http_code}\n' -X PUT \ --data-binary 'injected via PUT' \ 'http://127.0.0.1:18091/protected/put-created.txt' # Unauthenticated deletion of the ACL file succeeds curl -s -o /dev/null -w '%{http_code}\n' \ 'http://127.0.0.1:18091/protected/.goshs?delete' # The previously protected file is now publicly accessible curl -s -o /dev/null -w '%{http_code}\n' \ 'http://127.0.0.1:18091/protected/secret.txt' curl -s 'http://127.0.0.1:18091/protected/secret.txt' ``` Expected results: ```text 401 200 200 200 top secret ``` <img width="1280" height="657" alt="goshs_poc1" src="https://github.com/user-attachments/assets/37576067-fa90-44f6-8fe5-dcb7c96b9704" /> Note: if using `zsh`, the URL containing `?delete` must be quoted, or the shell will treat `?` as a wildcard and the request will not be sent. PoC Video for reference: https://github.com/user-attachments/assets/deb9106e-6dfa-47c0-95c1-993c2cbc9ee7 ### Impact This is an authorization bypass affecting deployments that rely on `.goshs` for per-folder protection. A remote unauthenticated attacker can: - create or overwrite files inside a folder that should require authentication - create directories inside the protected folder - delete arbitrary files reachable through the vulnerable route inside that protected folder - delete the `.goshs` policy file itself - read previously protected files once the policy file has been removed In practice, this breaks the security boundary promised by the file-based ACL feature and can expose sensitive files while also allowing unauthorized modification or destruction of protected content. ### Remediation 1. Enforce `.goshs` authorization checks for all state-changing operations, not just read/list flows. Before `PUT`, multipart upload, delete, and mkdir, resolve the effective folder ACL and deny the request unless the caller satisfies `acl.Auth`. 2. Protect `.goshs` as a special file in mutation handlers. The application already prevents serving `.goshs`; it should also reject deletion, overwrite, or replacement of `.goshs` through HTTP routes unless the request is properly authorized. 3. Add regression tests covering protected folders for every mutation path. The test suite should verify that `PUT`, `POST /upload`, `?delete`, and `?mkdir` all fail without valid credentials when a `.goshs` file is present.

  • GO-2026-5728goshs has a file-based ACL authorization bypass in goshs state-changing routes in github.com/patrickhener/goshs2026-06-25vendor · osvUS

    goshs has a file-based ACL authorization bypass in goshs state-changing routes in github.com/patrickhener/goshs

06

auch bekannt als (5)

Weitere Namen und Kennungen dieser Entität.

07

quellen

Welche Quellen diesen Datensatz belegen und wann.

veröffentlicht 2026-04-10geändert 2026-10-26
08

Referenzen (10)

Externe Belege — Patches, Meldungen, Analysen.

scry

Angreifer nutzen Schwachstellen wie diese gegen im Internet exponierte Dienste aus. Sehen Sie mit einem kostenlosen Passiv-Scan, was exponiert ist.

Kostenloser Scan